diff options
author | Rafael França <rafaelmfranca@gmail.com> | 2016-11-10 11:07:23 -0500 |
---|---|---|
committer | GitHub <noreply@github.com> | 2016-11-10 11:07:23 -0500 |
commit | cd9d6bed1bc6aeee6566eed5a5162baaeba769e6 (patch) | |
tree | 6861dbb74063206990784fcc5314a3b7c2e717a8 | |
parent | d7b333469e347824a9b2302da674d557277014d1 (diff) | |
parent | 6d7f35ecb1ab6d58bb81ecbf5ff18009fb002425 (diff) | |
download | rails-cd9d6bed1bc6aeee6566eed5a5162baaeba769e6.tar.gz rails-cd9d6bed1bc6aeee6566eed5a5162baaeba769e6.tar.bz2 rails-cd9d6bed1bc6aeee6566eed5a5162baaeba769e6.zip |
Merge pull request #26820 from y-yagi/add_bang_merge_to_parameters
add `ActionController::Parameters#merge!`
-rw-r--r-- | actionpack/CHANGELOG.md | 4 | ||||
-rw-r--r-- | actionpack/lib/action_controller/metal/strong_parameters.rb | 7 | ||||
-rw-r--r-- | actionpack/test/controller/parameters/parameters_permit_test.rb | 17 |
3 files changed, 28 insertions, 0 deletions
diff --git a/actionpack/CHANGELOG.md b/actionpack/CHANGELOG.md index c9c347ea26..d4b8d9b456 100644 --- a/actionpack/CHANGELOG.md +++ b/actionpack/CHANGELOG.md @@ -1,3 +1,7 @@ +* Add `ActionController::Parameters#merge!`, which behaves the same as `Hash#merge!`. + + *Yuji Yaginuma* + * Allow keys not found in RACK_KEY_TRANSLATION for setting the environment when rendering arbitrary templates. diff --git a/actionpack/lib/action_controller/metal/strong_parameters.rb b/actionpack/lib/action_controller/metal/strong_parameters.rb index 9c82abb640..98aacd53ab 100644 --- a/actionpack/lib/action_controller/metal/strong_parameters.rb +++ b/actionpack/lib/action_controller/metal/strong_parameters.rb @@ -573,6 +573,13 @@ module ActionController ) end + # Returns current <tt>ActionController::Parameters</tt> instance which + # +other_hash+ merges into current hash. + def merge!(other_hash) + @parameters.merge!(other_hash.to_h) + self + end + # This is required by ActiveModel attribute assignment, so that user can # pass +Parameters+ to a mass assignment methods in a model. It should not # matter as we are using +HashWithIndifferentAccess+ internally. diff --git a/actionpack/test/controller/parameters/parameters_permit_test.rb b/actionpack/test/controller/parameters/parameters_permit_test.rb index 1cb7173aa0..2b9a95d17c 100644 --- a/actionpack/test/controller/parameters/parameters_permit_test.rb +++ b/actionpack/test/controller/parameters/parameters_permit_test.rb @@ -244,6 +244,23 @@ class ParametersPermitTest < ActiveSupport::TestCase assert merged_params[:id] end + test "not permitted is sticky beyond merge!" do + assert_not @params.merge!(a: "b").permitted? + end + + test "permitted is sticky beyond merge!" do + @params.permit! + assert @params.merge!(a: "b").permitted? + end + + test "merge! with parameters" do + other_params = ActionController::Parameters.new(id: "1234").permit! + @params.merge!(other_params) + + assert_equal "1234", @params[:id] + assert_equal "32", @params[:person][:age] + end + test "modifying the parameters" do @params[:person][:hometown] = "Chicago" @params[:person][:family] = { brother: "Jonas" } |