diff options
Diffstat (limited to 'lib/rack/query_parser.rb')
-rw-r--r-- | lib/rack/query_parser.rb | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/lib/rack/query_parser.rb b/lib/rack/query_parser.rb index 72a521f3..17b77128 100644 --- a/lib/rack/query_parser.rb +++ b/lib/rack/query_parser.rb @@ -82,7 +82,13 @@ module Rack k = $1 || ''.freeze after = $' || ''.freeze - return if k.empty? + if k.empty? + if !v.nil? && name == "[]".freeze + return Array(v) + else + return + end + end if after == ''.freeze params[k] = v @@ -96,7 +102,8 @@ module Rack child_key = $1 params[k] ||= [] raise ParameterTypeError, "expected Array (got #{params[k].class.name}) for param `#{k}'" unless params[k].is_a?(Array) - if params_hash_type?(params[k].last) && !params[k].last.key?(child_key) + first_key = child_key.gsub(/[\[\]]/, ' ').split.first + if params_hash_type?(params[k].last) && !params[k].last.key?(first_key) normalize_params(params[k].last, child_key, v, depth - 1) else params[k] << normalize_params(make_params, child_key, v, depth - 1) |