Skip to content

Commit

Permalink
Merge pull request #36302 from eugeneius/parameters_transform_keys_en…
Browse files Browse the repository at this point in the history
…umerator

Return parameters enumerator from transform_keys/!
  • Loading branch information
kamipo committed May 20, 2019
2 parents ea730ad + 46e84d5 commit 38a945d
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 9 deletions.
5 changes: 5 additions & 0 deletions actionpack/CHANGELOG.md
@@ -1,3 +1,8 @@
* Calling `ActionController::Parameters#transform_keys/!` without a block now returns
an enumerator for the parameters instead of the underlying hash.

*Eugene Kenny*

* Fix strong parameters blocks all attributes even when only some keys are invalid (non-numerical). It should only block invalid key's values instead.

*Stan Lo*
Expand Down
12 changes: 5 additions & 7 deletions actionpack/lib/action_controller/metal/strong_parameters.rb
Expand Up @@ -679,18 +679,16 @@ def transform_values!
# Returns a new <tt>ActionController::Parameters</tt> instance with the
# results of running +block+ once for every key. The values are unchanged.
def transform_keys(&block)
if block
new_instance_with_inherited_permitted_status(
@parameters.transform_keys(&block)
)
else
@parameters.transform_keys
end
return to_enum(:transform_keys) unless block_given?
new_instance_with_inherited_permitted_status(
@parameters.transform_keys(&block)
)
end

# Performs keys transformation and returns the altered
# <tt>ActionController::Parameters</tt> instance.
def transform_keys!(&block)
return to_enum(:transform_keys!) unless block_given?
@parameters.transform_keys!(&block)
self
end
Expand Down
16 changes: 14 additions & 2 deletions actionpack/test/controller/parameters/accessors_test.rb
Expand Up @@ -203,6 +203,16 @@ class ParametersAccessorsTest < ActiveSupport::TestCase
assert_not_predicate @params.transform_keys { |k| k }, :permitted?
end

test "transform_keys without a block returns an enumerator" do
assert_kind_of Enumerator, @params.transform_keys
assert_kind_of ActionController::Parameters, @params.transform_keys.each { |k| k }
end

test "transform_keys! without a block returns an enumerator" do
assert_kind_of Enumerator, @params.transform_keys!
assert_kind_of ActionController::Parameters, @params.transform_keys!.each { |k| k }
end

test "transform_values retains permitted status" do
@params.permit!
assert_predicate @params.transform_values { |v| v }, :permitted?
Expand All @@ -219,8 +229,9 @@ class ParametersAccessorsTest < ActiveSupport::TestCase
end
end

test "transform_values without block yieds an enumerator" do
test "transform_values without a block returns an enumerator" do
assert_kind_of Enumerator, @params.transform_values
assert_kind_of ActionController::Parameters, @params.transform_values.each { |v| v }
end

test "transform_values! converts hashes to parameters" do
Expand All @@ -229,8 +240,9 @@ class ParametersAccessorsTest < ActiveSupport::TestCase
end
end

test "transform_values! without block yields an enumerator" do
test "transform_values! without a block returns an enumerator" do
assert_kind_of Enumerator, @params.transform_values!
assert_kind_of ActionController::Parameters, @params.transform_values!.each { |v| v }
end

test "value? returns true if the given value is present in the params" do
Expand Down

0 comments on commit 38a945d

Please sign in to comment.