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

Add compact and compact! to ActionController::Parameters

This makes it safe to replace `reject { |k, v| v.nil? }` with `compact`,
even when the receiver is an `ActionController::Parameters`.
This commit is contained in:
Eugene Kenny 2020-05-16 23:23:51 +01:00
parent 03e82e2f0d
commit c84cc3a59c
3 changed files with 38 additions and 0 deletions

View file

@ -1,3 +1,7 @@
* Added `compact` and `compact!` to `ActionController::Parameters`.
*Eugene Kenny*
* Calling `each_pair` or `each_value` on an `ActionController::Parameters`
without passing a block now returns an enumerator.

View file

@ -759,6 +759,16 @@ module ActionController
end
alias_method :delete_if, :reject!
# Returns a new instance of <tt>ActionController::Parameters</tt> with +nil+ values removed.
def compact
new_instance_with_inherited_permitted_status(@parameters.compact)
end
# Removes all +nil+ values in place and returns +self+, or +nil+ if no changes were made.
def compact!
self if @parameters.compact!
end
# Returns a new instance of <tt>ActionController::Parameters</tt> without the blank values.
# Uses Object#blank? for determining if a value is blank.
def compact_blank

View file

@ -128,6 +128,30 @@ class ParametersMutatorsTest < ActiveSupport::TestCase
assert_not_predicate @params.deep_transform_keys! { |k| k }, :permitted?
end
test "compact retains permitted status" do
@params.permit!
assert_predicate @params.compact, :permitted?
end
test "compact retains unpermitted status" do
assert_not_predicate @params.compact, :permitted?
end
test "compact! returns nil when no values are nil" do
assert_nil @params.compact!
end
test "compact! retains permitted status" do
@params[:person] = nil
@params.permit!
assert_predicate @params.compact!, :permitted?
end
test "compact! retains unpermitted status" do
@params[:person] = nil
assert_not_predicate @params.compact!, :permitted?
end
test "compact_blank retains permitted status" do
@params.permit!
assert_predicate @params.compact_blank, :permitted?