diff options
author | Ryan T. Hosford <tad.hosford@gmail.com> | 2016-03-04 20:04:40 -0600 |
---|---|---|
committer | Ryan T. Hosford <tad.hosford@gmail.com> | 2016-03-08 13:08:59 -0600 |
commit | a8a908f1ab62f279eb18d3869c3433eb67037e0a (patch) | |
tree | 006b93ff7772f49f308136185ed4cdb0dafdb648 | |
parent | b1bf5a35409a3c6da2f1b7c2e1e41c9b842c0fe7 (diff) | |
download | rack-a8a908f1ab62f279eb18d3869c3433eb67037e0a.tar.gz |
Fixes #1015
- Handles the edge case - Adds a test for #1015
-rw-r--r-- | lib/rack/query_parser.rb | 8 | ||||
-rw-r--r-- | test/spec_utils.rb | 3 |
2 files changed, 10 insertions, 1 deletions
diff --git a/lib/rack/query_parser.rb b/lib/rack/query_parser.rb index 1578ca55..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 diff --git a/test/spec_utils.rb b/test/spec_utils.rb index 9601cbaf..b24762c9 100644 --- a/test/spec_utils.rb +++ b/test/spec_utils.rb @@ -211,6 +211,9 @@ describe Rack::Utils do Rack::Utils.parse_nested_query("x[][z][w]=a&x[][y]=1&x[][z][w]=b&x[][y]=2"). must_equal "x" => [{"y" => "1", "z" => {"w" => "a"}}, {"y" => "2", "z" => {"w" => "b"}}] + Rack::Utils.parse_nested_query("data[books][][data][page]=1&data[books][][data][page]=2"). + must_equal "data" => { "books" => [{ "data" => { "page" => "1"}}, { "data" => { "page" => "2"}}] } + lambda { Rack::Utils.parse_nested_query("x[y]=1&x[y]z=2") }. must_raise(Rack::Utils::ParameterTypeError). message.must_equal "expected Hash (got String) for param `y'" |