From 238a6bb62dc153743a0abc6eb1e35392ac799d65 Mon Sep 17 00:00:00 2001 From: Joshua Peek Date: Sat, 14 Feb 2009 18:23:08 -0600 Subject: Update bundled rack to fix more parameter parsing issues --- .../vendor/rack-1.0/rack/utils.rb | 33 +++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) (limited to 'actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb') diff --git a/actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb b/actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb index d13a5dfad0..f352cb6783 100644 --- a/actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb +++ b/actionpack/lib/action_controller/vendor/rack-1.0/rack/utils.rb @@ -29,19 +29,39 @@ module Rack # and ';' characters. You can also use this to parse # cookies by changing the characters used in the second # parameter (which defaults to '&;'). - def parse_query(qs, d = '&;') params = {} (qs || '').split(/[#{d}] */n).each do |p| k, v = unescape(p).split('=', 2) - normalize_params(params, k, v) + + if cur = params[k] + if cur.class == Array + params[k] << v + else + params[k] = [cur, v] + end + else + params[k] = v + end end return params end module_function :parse_query + def parse_nested_query(qs, d = '&;') + params = {} + + (qs || '').split(/[#{d}] */n).each do |p| + k, v = unescape(p).split('=', 2) + normalize_params(params, k, v) + end + + return params + end + module_function :parse_nested_query + def normalize_params(params, name, v = nil) name =~ %r([\[\]]*([^\[\]]+)\]*) k = $1 || '' @@ -50,14 +70,7 @@ module Rack return if k.empty? if after == "" - cur = params[k] - if cur.is_a?(Array) - params[k] << v - elsif cur && name == $1 - params[k] = [cur, v] - else - params[k] = v - end + params[k] = v elsif after == "[]" params[k] ||= [] raise TypeError unless params[k].is_a?(Array) -- cgit v1.2.3