Project

General

Profile

« Previous | Next » 

Revision e63d0123

Added by Dominic Cleal over 7 years ago

fixes #18568 - replace deprecated AC::Parameters#update

The #update method in Rails 5 is returning a HWIA rather than the
ActionController::Parameters instance, causing keep_param to return the
wrong object type. It is also deprecated in 5.0, so replace it with a
simpler and supported assignment through #[]=.

View differences:

test/unit/concerns/parameters/keep_param_test.rb
test "retains parameter within top-level hash" do
params = ActionController::Parameters.new(:user => {:login => 'foo'})
returned = keep_param(params, 'user', :login) { {} }
returned = keep_param(params, 'user', :login) { params.permit(:another) }
assert_kind_of ActionController::Parameters, returned
assert_equal 'foo', returned[:login]
end
test "retains multiple parameters" do
params = ActionController::Parameters.new(:user => {:login => 'foo', :other => 'bar'})
returned = keep_param(params, 'user', :login, :other) { {} }
returned = keep_param(params, 'user', :login, :other) { params.permit(:another) }
assert_equal 'foo', returned[:login]
assert_equal 'bar', returned[:other]
end
test "ignores unknown parameters" do
params = ActionController::Parameters.new(:user => {:login => 'foo'})
returned = keep_param(params, 'user', :login, :other) { {} }
returned = keep_param(params, 'user', :login, :other) { params.permit(:another) }
assert_equal 'foo', returned[:login]
refute returned.has_key?(:other)
end
test "doesn't modify input hash" do
params = ActionController::Parameters.new(:user => {:login => 'foo'})
returned = keep_param(params, 'user', :login) { {:login => 'foo'} }
returned = keep_param(params, 'user', :login) { params.permit(:another) }
assert_equal 'foo', returned[:login]
assert_equal 'foo', params[:user][:login]
end

Also available in: Unified diff