aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--actionpack/CHANGELOG2
-rwxr-xr-xactionpack/lib/action_controller/cgi_ext/cgi_methods.rb2
-rwxr-xr-xactionpack/test/controller/cgi_test.rb7
3 files changed, 9 insertions, 2 deletions
diff --git a/actionpack/CHANGELOG b/actionpack/CHANGELOG
index 202da1d3b8..fe0700444d 100644
--- a/actionpack/CHANGELOG
+++ b/actionpack/CHANGELOG
@@ -125,7 +125,7 @@
* Add assertions with friendly messages to TestCase#process to ensure that @controller, @request, and @response are set. #1367
-* Arrays sent via multipart posts are converted to strings #1032 [dj@omelia.org]
+* Arrays, hashes sent via multipart posts are converted to strings #1032 [dj@omelia.org, me@julik.nl]
* render(:layout => true) is a synonym for render(:layout => nil)
diff --git a/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb b/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb
index dc1b1189b5..81bc4867de 100755
--- a/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb
+++ b/actionpack/lib/action_controller/cgi_ext/cgi_methods.rb
@@ -70,7 +70,7 @@ class CGIMethods #:nodoc:
# Value as part of a multipart request
value.read
elsif value.class == Array
- value.collect { | e | e.respond_to?(:read) ? e.read : e }
+ value.collect { |v| CGIMethods.get_typed_value(v) }
else
# Standard value (not a multipart request)
value.to_s
diff --git a/actionpack/test/controller/cgi_test.rb b/actionpack/test/controller/cgi_test.rb
index 1749eb0c80..1e4bb16337 100755
--- a/actionpack/test/controller/cgi_test.rb
+++ b/actionpack/test/controller/cgi_test.rb
@@ -1,3 +1,4 @@
+$:.unshift File.dirname(__FILE__) + "/../../lib"
require 'test/unit'
require 'action_controller/cgi_ext/cgi_methods'
@@ -112,6 +113,7 @@ class CGITest < Test::Unit::TestCase
"something" => [ StringIO.new("") ],
"array_of_stringios" => [[ StringIO.new("One"), StringIO.new("Two") ]],
"mixed_types_array" => [[ StringIO.new("Three"), "NotStringIO" ]],
+ "mixed_types_as_checkboxes[strings][nested]" => [[ mock_file, "String", StringIO.new("StringIO")]],
"products[string]" => [ StringIO.new("Apple Computer") ],
"products[file]" => [ mock_file ]
}
@@ -120,6 +122,11 @@ class CGITest < Test::Unit::TestCase
"something" => "",
"array_of_stringios" => ["One", "Two"],
"mixed_types_array" => [ "Three", "NotStringIO" ],
+ "mixed_types_as_checkboxes" => {
+ "strings"=> {
+ "nested"=>[ mock_file, "String", "StringIO" ]
+ },
+ },
"products" => {
"string" => "Apple Computer",
"file" => mock_file