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:
parent
579d3dc086
commit
bb3c364c5d
2 changed files with 31 additions and 2 deletions
|
@ -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
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue