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:

app/controllers/concerns/foreman/controller/parameters/keep_param.rb
params[top_level_hash].has_key?(key) ? op.update(key => params[top_level_hash].delete(key)) : op
end
# Restore the deleted (kept) keys to the filtered hash of params from the block
filtered = yield.update(old_params)
# Restore the deleted (kept) keys to the original params hash so it remains unchanged
params[top_level_hash].update old_params
filtered = yield
old_params.each do |key,val|
# Restore the deleted (kept) keys to the filtered hash of params from the block
filtered[key] = val
# Restore the deleted (kept) keys to the original params hash so it remains unchanged
params[top_level_hash][key] = val
end
filtered
end
end
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