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:
parent
03e82e2f0d
commit
c84cc3a59c
3 changed files with 38 additions and 0 deletions
|
@ -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.
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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?
|
||||
|
|
Loading…
Reference in a new issue