aboutsummaryrefslogtreecommitdiffstats
path: root/activesupport/test/core_ext/hash_ext_test.rb
diff options
context:
space:
mode:
authorMatt Casper <matthewvcasper@gmail.com>2017-03-29 09:56:27 -0500
committerMichael Stock <mikeastock@gmail.com>2017-03-29 15:55:09 -0500
commit0117810cdab34d168b0579a6736c5d58c5ab84c7 (patch)
tree4021e5a1e5181aa63e189297ac5a97ef135e9580 /activesupport/test/core_ext/hash_ext_test.rb
parent55ccec637212a2232a64f86360b2a25fa1c25759 (diff)
downloadrails-0117810cdab34d168b0579a6736c5d58c5ab84c7.tar.gz
rails-0117810cdab34d168b0579a6736c5d58c5ab84c7.tar.bz2
rails-0117810cdab34d168b0579a6736c5d58c5ab84c7.zip
Add aliases for reverse_merge to with_defaults
In the context of controller parameters, reverse_merge is commonly used to provide defaults for user input. Having an alias to reverse_merge called with_defaults feels more idiomatic for Rails.
Diffstat (limited to 'activesupport/test/core_ext/hash_ext_test.rb')
-rw-r--r--activesupport/test/core_ext/hash_ext_test.rb25
1 files changed, 25 insertions, 0 deletions
diff --git a/activesupport/test/core_ext/hash_ext_test.rb b/activesupport/test/core_ext/hash_ext_test.rb
index 525ea08abd..cb6babfe49 100644
--- a/activesupport/test/core_ext/hash_ext_test.rb
+++ b/activesupport/test/core_ext/hash_ext_test.rb
@@ -535,6 +535,16 @@ class HashExtTest < ActiveSupport::TestCase
assert_equal "clobber", hash[:another]
end
+ def test_indifferent_with_defaults_aliases_reverse_merge
+ hash = HashWithIndifferentAccess.new key: :old_value
+ actual = hash.with_defaults key: :new_value
+ assert_equal :old_value, actual[:key]
+
+ hash = HashWithIndifferentAccess.new key: :old_value
+ hash.with_defaults! key: :new_value
+ assert_equal :old_value, hash[:key]
+ end
+
def test_indifferent_deleting
get_hash = proc { { a: "foo" }.with_indifferent_access }
hash = get_hash.call
@@ -848,6 +858,21 @@ class HashExtTest < ActiveSupport::TestCase
assert_equal expected, merged
end
+ def test_with_defaults_aliases_reverse_merge
+ defaults = { a: "x", b: "y", c: 10 }.freeze
+ options = { a: 1, b: 2 }
+ expected = { a: 1, b: 2, c: 10 }
+
+ # Should be an alias for reverse_merge
+ assert_equal expected, options.with_defaults(defaults)
+ assert_not_equal expected, options
+
+ # Should be an alias for reverse_merge!
+ merged = options.dup
+ assert_equal expected, merged.with_defaults!(defaults)
+ assert_equal expected, merged
+ end
+
def test_slice
original = { a: "x", b: "y", c: 10 }
expected = { a: "x", b: "y" }