Skip to content

Commit e956172

Browse files
committed
push is_a checks up the stack
now `hash_filter` doesn't need to know about the `Parameters` class
1 parent 7779e63 commit e956172

File tree

1 file changed

+13
-13
lines changed

1 file changed

+13
-13
lines changed

actionpack/lib/action_controller/metal/strong_parameters.rb

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -566,20 +566,22 @@ def convert_value_to_parameters(value)
566566
end
567567

568568
def each_element(object)
569-
if object.is_a?(Array)
570-
object.map { |el| yield el }.compact
571-
elsif fields_for_style?(object)
572-
hash = object.class.new
573-
object.each { |k,v| hash[k] = yield v }
574-
hash
575-
else
576-
yield object
569+
case object
570+
when Array
571+
object.grep(Parameters).map { |el| yield el }.compact
572+
when Parameters
573+
if fields_for_style?(object)
574+
hash = object.class.new
575+
object.each { |k,v| hash[k] = yield v }
576+
hash
577+
else
578+
yield object
579+
end
577580
end
578581
end
579582

580583
def fields_for_style?(object)
581-
object.is_a?(Parameters) &&
582-
object.to_unsafe_h.all? { |k, v| k =~ /\A-?\d+\z/ && v.is_a?(Hash) }
584+
object.to_unsafe_h.all? { |k, v| k =~ /\A-?\d+\z/ && v.is_a?(Hash) }
583585
end
584586

585587
def unpermitted_parameters!(params)
@@ -665,9 +667,7 @@ def hash_filter(params, filter)
665667
else
666668
# Declaration { user: :name } or { user: [:name, :age, { address: ... }] }.
667669
params[key] = each_element(value) do |element|
668-
if element.is_a?(Parameters)
669-
element.permit(*Array.wrap(filter[key]))
670-
end
670+
element.permit(*Array.wrap(filter[key]))
671671
end
672672
end
673673
end

0 commit comments

Comments
 (0)