Skip to content

Commit e76286e

Browse files
authored
Fix 2D array parameter encoding (stripe#1846)
1 parent 645470b commit e76286e

2 files changed

Lines changed: 18 additions & 2 deletions

File tree

lib/stripe/util.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -276,7 +276,7 @@ def self.flatten_params_array(value, api_mode, calculated_key)
276276
if elem.is_a?(Hash)
277277
result += flatten_params(elem, api_mode, "#{calculated_key}[#{i}]")
278278
elsif elem.is_a?(Array)
279-
result += flatten_params_array(elem, api_mode, calculated_key)
279+
result += flatten_params_array(elem, api_mode, "#{calculated_key}[#{i}]")
280280
else
281281
# Always use indexed format for arrays
282282
result << ["#{calculated_key}[#{i}]", elem]

test/stripe/util_test.rb

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,15 @@ class UtilTest < Test::Unit::TestCase
2929
a: [[foo: "bar", baz: "qux"]],
3030
}
3131
assert_equal(
32-
"a[0][foo]=bar&a[0][baz]=qux",
32+
"a[0][0][foo]=bar&a[0][0][baz]=qux",
33+
Stripe::Util.encode_parameters(params, :v1)
34+
)
35+
end
36+
37+
should "correctly encode 2D arrays of scalars" do
38+
params = { a: [[1, 2], [3, 4]] }
39+
assert_equal(
40+
"a[0][0]=1&a[0][1]=2&a[1][0]=3&a[1][1]=4",
3341
Stripe::Util.encode_parameters(params, :v1)
3442
)
3543
end
@@ -96,6 +104,14 @@ class UtilTest < Test::Unit::TestCase
96104
]
97105
assert_equal([["d[a]", "a"], ["d[b]", "b"], ["e[0]", 0], ["e[1]", 1]], Stripe::Util.flatten_params(params, :v2))
98106
end
107+
108+
should "flatten 2D arrays with correct indices" do
109+
params = { a: [[1, 2], [3, 4]] }
110+
assert_equal(
111+
[["a[0][0]", 1], ["a[0][1]", 2], ["a[1][0]", 3], ["a[1][1]", 4]],
112+
Stripe::Util.flatten_params(params, :v1)
113+
)
114+
end
99115
end
100116

101117
should "#symbolize_names should convert names to symbols" do

0 commit comments

Comments
 (0)