escape square brackets in keys for nested query strings

Closes #82
This commit is contained in:
Mislav Marohnić 2012-01-02 19:23:50 +01:00
parent c78cb61ef1
commit 445152b164
2 changed files with 8 additions and 3 deletions

View File

@ -149,10 +149,10 @@ module Faraday
def build_nested_query(value, prefix = nil)
case value
when Array
value.map { |v| build_nested_query(v, "#{prefix}[]") }.join("&")
value.map { |v| build_nested_query(v, "#{prefix}%5B%5D") }.join("&")
when Hash
value.map { |k, v|
build_nested_query(v, prefix ? "#{prefix}[#{escape(k)}]" : escape(k))
build_nested_query(v, prefix ? "#{prefix}%5B#{escape(k)}%5D" : escape(k))
}.join("&")
when NilClass
prefix

View File

@ -32,7 +32,7 @@ class RequestMiddlewareTest < Faraday::TestCase
def test_url_encoded_no_header
response = @conn.post('/echo', { :fruit => %w[apples oranges] })
assert_equal 'application/x-www-form-urlencoded', response.headers['Content-Type']
assert_equal 'fruit[]=apples&fruit[]=oranges', response.body
assert_equal 'fruit%5B%5D=apples&fruit%5B%5D=oranges', response.body
end
def test_url_encoded_with_header
@ -56,6 +56,11 @@ class RequestMiddlewareTest < Faraday::TestCase
assert err.empty?
end
def test_url_encoded_nested_keys
response = @conn.post('/echo', {'a'=>{'b'=>{'c'=>['d']}}})
assert_equal "a%5Bb%5D%5Bc%5D%5B%5D=d", response.body
end
def test_multipart
# assume params are out of order
regexes = [