From 445152b164ecc3da315380f0c4b1acfe2f2986b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mislav=20Marohnic=CC=81?= Date: Mon, 2 Jan 2012 19:23:50 +0100 Subject: [PATCH] escape square brackets in keys for nested query strings Closes #82 --- lib/faraday/utils.rb | 4 ++-- test/request_middleware_test.rb | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/lib/faraday/utils.rb b/lib/faraday/utils.rb index 5d2cf637..061b4543 100644 --- a/lib/faraday/utils.rb +++ b/lib/faraday/utils.rb @@ -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 diff --git a/test/request_middleware_test.rb b/test/request_middleware_test.rb index 84d27c4e..56406fbb 100644 --- a/test/request_middleware_test.rb +++ b/test/request_middleware_test.rb @@ -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 = [