提交 e956172b 编写于 作者: A Aaron Patterson

push is_a checks up the stack

now `hash_filter` doesn't need to know about the `Parameters` class
上级 7779e633
......@@ -566,20 +566,22 @@ def convert_value_to_parameters(value)
end
def each_element(object)
if object.is_a?(Array)
object.map { |el| yield el }.compact
elsif fields_for_style?(object)
hash = object.class.new
object.each { |k,v| hash[k] = yield v }
hash
else
yield object
case object
when Array
object.grep(Parameters).map { |el| yield el }.compact
when Parameters
if fields_for_style?(object)
hash = object.class.new
object.each { |k,v| hash[k] = yield v }
hash
else
yield object
end
end
end
def fields_for_style?(object)
object.is_a?(Parameters) &&
object.to_unsafe_h.all? { |k, v| k =~ /\A-?\d+\z/ && v.is_a?(Hash) }
object.to_unsafe_h.all? { |k, v| k =~ /\A-?\d+\z/ && v.is_a?(Hash) }
end
def unpermitted_parameters!(params)
......@@ -665,9 +667,7 @@ def hash_filter(params, filter)
else
# Declaration { user: :name } or { user: [:name, :age, { address: ... }] }.
params[key] = each_element(value) do |element|
if element.is_a?(Parameters)
element.permit(*Array.wrap(filter[key]))
end
element.permit(*Array.wrap(filter[key]))
end
end
end
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册