aboutsummaryrefslogtreecommitdiffstats
path: root/actionpack
diff options
context:
space:
mode:
authorRafael França <rafaelmfranca@gmail.com>2016-11-10 11:07:23 -0500
committerGitHub <noreply@github.com>2016-11-10 11:07:23 -0500
commitcd9d6bed1bc6aeee6566eed5a5162baaeba769e6 (patch)
tree6861dbb74063206990784fcc5314a3b7c2e717a8 /actionpack
parentd7b333469e347824a9b2302da674d557277014d1 (diff)
parent6d7f35ecb1ab6d58bb81ecbf5ff18009fb002425 (diff)
downloadrails-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!`
Diffstat (limited to 'actionpack')
-rw-r--r--actionpack/CHANGELOG.md4
-rw-r--r--actionpack/lib/action_controller/metal/strong_parameters.rb7
-rw-r--r--actionpack/test/controller/parameters/parameters_permit_test.rb17
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" }