summary refs log tree commit
diff options
context:
space:
mode:
authorRyan T. Hosford <tad.hosford@gmail.com>2016-03-04 20:04:40 -0600
committerRyan T. Hosford <tad.hosford@gmail.com>2016-03-08 13:08:59 -0600
commita8a908f1ab62f279eb18d3869c3433eb67037e0a (patch)
tree006b93ff7772f49f308136185ed4cdb0dafdb648
parentb1bf5a35409a3c6da2f1b7c2e1e41c9b842c0fe7 (diff)
downloadrack-a8a908f1ab62f279eb18d3869c3433eb67037e0a.tar.gz
Fixes #1015
  - Handles the edge case
  - Adds a test for #1015
-rw-r--r--lib/rack/query_parser.rb8
-rw-r--r--test/spec_utils.rb3
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'"