Skip to content
This repository was archived by the owner on Aug 17, 2017. It is now read-only.

Commit 0e65417

Browse files
committed
Merge pull request #39 from svoop/master
Allow parameter filters to match multi-parameter attributes (DHH compatible)
2 parents 5536c0c + e05301b commit 0e65417

File tree

2 files changed

+35
-0
lines changed

2 files changed

+35
-0
lines changed

lib/action_controller/parameters.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,7 @@ def permit(*filters)
4444
case filter
4545
when Symbol, String then
4646
params[filter] = self[filter] if has_key?(filter)
47+
keys.grep(/\A#{Regexp.escape(filter)}\(\di\)\z/).each { |key| params[key] = self[key] }
4748
when Hash then
4849
self.slice(*filter.keys).each do |key, value|
4950
return unless value
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
require 'test_helper'
2+
require 'action_controller/parameters'
3+
4+
class MultiParameterAttributesTest < ActiveSupport::TestCase
5+
test "permitted multi-parameter attribute keys" do
6+
params = ActionController::Parameters.new({
7+
book: {
8+
"shipped_at(1i)" => "2012",
9+
"shipped_at(2i)" => "3",
10+
"shipped_at(3i)" => "25",
11+
"shipped_at(4i)" => "10",
12+
"shipped_at(5i)" => "15",
13+
"published_at(1i)" => "1999",
14+
"published_at(2i)" => "2",
15+
"published_at(3i)" => "5"
16+
}
17+
})
18+
19+
permitted = params.permit book: [ :shipped_at ]
20+
21+
assert permitted.permitted?
22+
23+
assert_equal "2012", permitted[:book]["shipped_at(1i)"]
24+
assert_equal "3", permitted[:book]["shipped_at(2i)"]
25+
assert_equal "25", permitted[:book]["shipped_at(3i)"]
26+
assert_equal "10", permitted[:book]["shipped_at(4i)"]
27+
assert_equal "15", permitted[:book]["shipped_at(5i)"]
28+
29+
assert_nil permitted[:book]["published_at(1i)"]
30+
assert_nil permitted[:book]["published_at(2i)"]
31+
assert_nil permitted[:book]["published_at(3i)"]
32+
end
33+
end
34+

0 commit comments

Comments
 (0)