mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
Adding Hash#compact and Hash#compact! methods
* Adding Hash#compact and Hash#compact! methods * Using Ruby 1.9 syntax on documentation * Updating guides for `Hash#compact` and `Hash#compact!` methods * Updating CHANGELOG for ActiveSupport * Removing unecessary protected method and lambda for `Hash#compact` implementations * Performing `Hash#compact` implementation - https://gist.github.com/tinogomes/8332883 * fixing order position * Fixing typo
This commit is contained in:
parent
f4fc9e65ed
commit
5121593787
5 changed files with 63 additions and 0 deletions
|
@ -1,3 +1,7 @@
|
||||||
|
* Added `Hash#compact` and `Hash#compact!` for removing items with nil value from hash.
|
||||||
|
|
||||||
|
*Celestino Gomes*
|
||||||
|
|
||||||
* Maintain proleptic gregorian in Time#advance
|
* Maintain proleptic gregorian in Time#advance
|
||||||
|
|
||||||
`Time#advance` uses `Time#to_date` and `Date#advance` to calculate a new date.
|
`Time#advance` uses `Time#to_date` and `Date#advance` to calculate a new date.
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
require 'active_support/core_ext/hash/compact'
|
||||||
require 'active_support/core_ext/hash/conversions'
|
require 'active_support/core_ext/hash/conversions'
|
||||||
require 'active_support/core_ext/hash/deep_merge'
|
require 'active_support/core_ext/hash/deep_merge'
|
||||||
require 'active_support/core_ext/hash/except'
|
require 'active_support/core_ext/hash/except'
|
||||||
|
|
20
activesupport/lib/active_support/core_ext/hash/compact.rb
Normal file
20
activesupport/lib/active_support/core_ext/hash/compact.rb
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
class Hash
|
||||||
|
# Returns a hash with non +nil+ values.
|
||||||
|
#
|
||||||
|
# hash = { a: true, b: false, c: nil}
|
||||||
|
# hash.compact # => { a: true, b: false}
|
||||||
|
# hash # => { a: true, b: false, c: nil}
|
||||||
|
# { c: nil }.compact # => {}
|
||||||
|
def compact
|
||||||
|
self.select { |_, value| !value.nil? }
|
||||||
|
end
|
||||||
|
|
||||||
|
# Replaces current hash with non +nil+ values.
|
||||||
|
#
|
||||||
|
# hash = { a: true, b: false, c: nil}
|
||||||
|
# hash.compact! # => { a: true, b: false}
|
||||||
|
# hash # => { a: true, b: false}
|
||||||
|
def compact!
|
||||||
|
self.reject! { |_, value| value.nil? }
|
||||||
|
end
|
||||||
|
end
|
|
@ -54,6 +54,8 @@ class HashExtTest < ActiveSupport::TestCase
|
||||||
assert_respond_to h, :deep_stringify_keys!
|
assert_respond_to h, :deep_stringify_keys!
|
||||||
assert_respond_to h, :to_options
|
assert_respond_to h, :to_options
|
||||||
assert_respond_to h, :to_options!
|
assert_respond_to h, :to_options!
|
||||||
|
assert_respond_to h, :compact
|
||||||
|
assert_respond_to h, :compact!
|
||||||
end
|
end
|
||||||
|
|
||||||
def test_transform_keys
|
def test_transform_keys
|
||||||
|
@ -865,6 +867,32 @@ class HashExtTest < ActiveSupport::TestCase
|
||||||
original.expects(:delete).never
|
original.expects(:delete).never
|
||||||
original.except(:a)
|
original.except(:a)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def test_compact
|
||||||
|
hash_contain_nil_value = @symbols.merge(z: nil)
|
||||||
|
hash_with_only_nil_values = { a: nil, b: nil }
|
||||||
|
|
||||||
|
h = hash_contain_nil_value.dup
|
||||||
|
assert_equal(@symbols, h.compact)
|
||||||
|
assert_equal(hash_contain_nil_value, h)
|
||||||
|
|
||||||
|
h = hash_with_only_nil_values.dup
|
||||||
|
assert_equal({}, h.compact)
|
||||||
|
assert_equal(hash_with_only_nil_values, h)
|
||||||
|
end
|
||||||
|
|
||||||
|
def test_compact!
|
||||||
|
hash_contain_nil_value = @symbols.merge(z: nil)
|
||||||
|
hash_with_only_nil_values = { a: nil, b: nil }
|
||||||
|
|
||||||
|
h = hash_contain_nil_value.dup
|
||||||
|
assert_equal(@symbols, h.compact!)
|
||||||
|
assert_equal(@symbols, h)
|
||||||
|
|
||||||
|
h = hash_with_only_nil_values.dup
|
||||||
|
assert_equal({}, h.compact!)
|
||||||
|
assert_equal({}, h)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
class IWriteMyOwnXML
|
class IWriteMyOwnXML
|
||||||
|
|
|
@ -2907,6 +2907,16 @@ The method `with_indifferent_access` returns an `ActiveSupport::HashWithIndiffer
|
||||||
|
|
||||||
NOTE: Defined in `active_support/core_ext/hash/indifferent_access.rb`.
|
NOTE: Defined in `active_support/core_ext/hash/indifferent_access.rb`.
|
||||||
|
|
||||||
|
### Compacting
|
||||||
|
|
||||||
|
The methods `compact` and `compact!` return a Hash without items with `nil` value.
|
||||||
|
|
||||||
|
```ruby
|
||||||
|
{a: 1, b: 2, c: nil}.compact # => {a: 1, b: 2}
|
||||||
|
```
|
||||||
|
|
||||||
|
NOTE: Defined in `active_support/core_ext/hash/compact.rb`.
|
||||||
|
|
||||||
Extensions to `Regexp`
|
Extensions to `Regexp`
|
||||||
----------------------
|
----------------------
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue