diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2017-05-11 13:43:02 -0700 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-05-11 13:43:02 -0700 |
commit | 4b969ea417f097d217ff1f662d2fe8c406d21b99 (patch) | |
tree | 90030492cdf677f5e4df23ec4c38eedae3dc27d8 /actionpack | |
parent | 358280d980685717fc49fb2f6cfb4a0507bfe23f (diff) | |
parent | fb0fae9747ceec065e75867ea83afb713a5b449b (diff) | |
download | rails-4b969ea417f097d217ff1f662d2fe8c406d21b99.tar.gz rails-4b969ea417f097d217ff1f662d2fe8c406d21b99.tar.bz2 rails-4b969ea417f097d217ff1f662d2fe8c406d21b99.zip |
Merge pull request #29040 from eugeneius/parameters_delete_block
Pass block in ActionController::Parameters#delete
Diffstat (limited to 'actionpack')
-rw-r--r-- | actionpack/lib/action_controller/metal/strong_parameters.rb | 4 | ||||
-rw-r--r-- | actionpack/test/controller/parameters/mutators_test.rb | 21 |
2 files changed, 23 insertions, 2 deletions
diff --git a/actionpack/lib/action_controller/metal/strong_parameters.rb b/actionpack/lib/action_controller/metal/strong_parameters.rb index 7864f9decd..20330b5091 100644 --- a/actionpack/lib/action_controller/metal/strong_parameters.rb +++ b/actionpack/lib/action_controller/metal/strong_parameters.rb @@ -666,8 +666,8 @@ module ActionController # to key. If the key is not found, returns the default value. If the # optional code block is given and the key is not found, pass in the key # and return the result of block. - def delete(key) - convert_value_to_parameters(@parameters.delete(key)) + def delete(key, &block) + convert_value_to_parameters(@parameters.delete(key, &block)) end # Returns a new instance of <tt>ActionController::Parameters</tt> with only diff --git a/actionpack/test/controller/parameters/mutators_test.rb b/actionpack/test/controller/parameters/mutators_test.rb index e61bbdbe13..2c36f488c6 100644 --- a/actionpack/test/controller/parameters/mutators_test.rb +++ b/actionpack/test/controller/parameters/mutators_test.rb @@ -25,6 +25,27 @@ class ParametersMutatorsTest < ActiveSupport::TestCase assert_not @params.delete(:person).permitted? end + test "delete returns the value when the key is present" do + assert_equal "32", @params[:person].delete(:age) + end + + test "delete removes the entry when the key present" do + @params[:person].delete(:age) + assert_not @params[:person].key?(:age) + end + + test "delete returns nil when the key is not present" do + assert_equal nil, @params[:person].delete(:first_name) + end + + test "delete returns the value of the given block when the key is not present" do + assert_equal "David", @params[:person].delete(:first_name) { "David" } + end + + test "delete yields the key to the given block when the key is not present" do + assert_equal "first_name: David", @params[:person].delete(:first_name) { |k| "#{k}: David" } + end + test "delete_if retains permitted status" do @params.permit! assert @params.delete_if { |k| k == "person" }.permitted? |