1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00

ActionController::Parameters#deep_dup (#26567)

* ActionController::Parameters#deep_dup

* Tests for ActionController::Parameters#deep_dup

* Fix test for ActionController::Parameters#deep_dup

* More tests for ActionController::Parameters#deep_dup

[Rafael Mendonça França + Pavel Evstigneev]
This commit is contained in:
Pavel Evstigneev 2016-10-11 21:29:20 +08:00 committed by Rafael Mendonça França
parent 579d3dc086
commit bb3c364c5d
No known key found for this signature in database
GPG key ID: FC23B6D0F1EEE948
2 changed files with 31 additions and 2 deletions

View file

@ -641,6 +641,13 @@ module ActionController
end
end
# Returns duplicate of object including all parameters
def deep_dup
self.class.new(@parameters.deep_dup).tap do |duplicate|
duplicate.permitted = @permitted
end
end
protected
attr_reader :parameters

View file

@ -1,5 +1,6 @@
require 'abstract_unit'
require 'action_controller/metal/strong_parameters'
require "abstract_unit"
require "action_controller/metal/strong_parameters"
require "active_support/core_ext/object/deep_dup"
class ParametersDupTest < ActiveSupport::TestCase
setup do
@ -40,4 +41,25 @@ class ParametersDupTest < ActiveSupport::TestCase
dupped_params.permit!
assert_not_equal @params, dupped_params
end
test "deep_dup content" do
dupped_params = @params.deep_dup
dupped_params[:person][:age] = "45"
dupped_params[:person][:addresses].clear
assert_not_equal @params[:person][:age], dupped_params[:person][:age]
assert_not_equal @params[:person][:addresses], dupped_params[:person][:addresses]
end
test "deep_dup @permitted" do
dupped_params = @params.deep_dup
dupped_params.permit!
assert_not @params.permitted?
end
test "deep_dup @permitted is being copied" do
@params.permit!
assert @params.deep_dup.permitted?
end
end