diff options
author | Joshua Peek <josh@joshpeek.com> | 2009-02-07 00:08:28 -0600 |
---|---|---|
committer | Joshua Peek <josh@joshpeek.com> | 2009-02-07 00:08:28 -0600 |
commit | 2277fbedbea930fb8ce38ab7eb133de6fcc4a2d6 (patch) | |
tree | 784f2dfcd066eaa17a89cc435ec4de44393799c8 /actionpack/lib/action_controller/request.rb | |
parent | 24f2e676f700b8a387c6f4c27acf172658cd7863 (diff) | |
download | rails-2277fbedbea930fb8ce38ab7eb133de6fcc4a2d6.tar.gz rails-2277fbedbea930fb8ce38ab7eb133de6fcc4a2d6.tar.bz2 rails-2277fbedbea930fb8ce38ab7eb133de6fcc4a2d6.zip |
Temporarily bundle Rack 1.0 prerelease for testing
Diffstat (limited to 'actionpack/lib/action_controller/request.rb')
-rwxr-xr-x | actionpack/lib/action_controller/request.rb | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/actionpack/lib/action_controller/request.rb b/actionpack/lib/action_controller/request.rb index 935326c347..0e95cfc147 100755 --- a/actionpack/lib/action_controller/request.rb +++ b/actionpack/lib/action_controller/request.rb @@ -417,15 +417,15 @@ EOM FORM_DATA_MEDIA_TYPES.include?(content_type.to_s) end - # Override Rack's GET method to support nested query strings + # Override Rack's GET method to support indifferent access def GET - @env["action_controller.request.query_parameters"] ||= UrlEncodedPairParser.parse_query_parameters(query_string) + @env["action_controller.request.query_parameters"] ||= normalize_parameters(super) end alias_method :query_parameters, :GET - # Override Rack's POST method to support nested query strings + # Override Rack's POST method to support indifferent access def POST - @env["action_controller.request.request_parameters"] ||= UrlEncodedPairParser.parse_hash_parameters(super) + @env["action_controller.request.request_parameters"] ||= normalize_parameters(super) end alias_method :request_parameters, :POST @@ -461,5 +461,28 @@ EOM def named_host?(host) !(host.nil? || /\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.match(host)) end + + # Convert nested Hashs to HashWithIndifferentAccess and replace + # file upload hashs with UploadedFile objects + def normalize_parameters(value) + case value + when Hash + if value.has_key?(:tempfile) + upload = value[:tempfile] + upload.extend(UploadedFile) + upload.original_path = value[:filename] + upload.content_type = value[:type] + upload + else + h = {} + value.each { |k, v| h[k] = normalize_parameters(v) } + h.with_indifferent_access + end + when Array + value.map { |e| normalize_parameters(e) } + else + value + end + end end end |