From 801dd9931884bfee4ba7d8589bc10f1f41ea94d0 Mon Sep 17 00:00:00 2001 From: Chase Lambert Date: Wed, 17 Jun 2015 17:26:12 -0700 Subject: [PATCH] Get requests with arrays of dictionaries to work --- lib/stripe/util.rb | 2 +- test/stripe/charge_test.rb | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+), 1 deletion(-) diff --git a/lib/stripe/util.rb b/lib/stripe/util.rb index 144d729a..034f5e18 100644 --- a/lib/stripe/util.rb +++ b/lib/stripe/util.rb @@ -110,7 +110,7 @@ module Stripe result = [] value.each do |elem| if elem.is_a?(Hash) - result += flatten_params(elem, calculated_key) + result += flatten_params(elem, "#{calculated_key}[]") elsif elem.is_a?(Array) result += flatten_params_array(elem, calculated_key) else diff --git a/test/stripe/charge_test.rb b/test/stripe/charge_test.rb index 9a43c0c4..cbad8bd0 100644 --- a/test/stripe/charge_test.rb +++ b/test/stripe/charge_test.rb @@ -95,5 +95,24 @@ module Stripe }) assert c.paid end + + should "properly handle an array or dictionaries" do + @mock.expects(:post).with do |url, api_key, params| + url == "#{Stripe.api_base}/v1/charges" && api_key.nil? && CGI.parse(params) == { + 'currency' => ['usd'], 'amount' => ['100'], + 'source' => ['btcrcv_test_receiver'], + 'level3[][red]' => ['firstred', 'another'], + 'level3[][one]' => ['fish'], + } + end.once.returns(make_response(make_charge)) + + c = Stripe::Charge.create({ + :amount => 100, + :source => 'btcrcv_test_receiver', + :currency => "usd", + :level3 => [{:red => 'firstred'}, {:one => 'fish', :red => 'another'}] + }) + assert c.paid + end end end