diff options
author | Yogesh Khater <yogeshjain999@gmail.com> | 2020-06-06 21:38:58 +0530 |
---|---|---|
committer | Yogesh Khater <yogeshjain999@gmail.com> | 2020-06-10 11:24:06 +0530 |
commit | b206fb8a79b626d8c4f6edf15caf0eda37e6845c (patch) | |
tree | a3b83bea83258f0c406fd6354fea0b06f73c6c7a /spec/hashie/extensions/indifferent_access_spec.rb | |
parent | c066135a4bd6c75cd19fe342f768d2213df9e684 (diff) | |
download | hashie-b206fb8a79b626d8c4f6edf15caf0eda37e6845c.tar.gz |
Small amendments for Hash#merge with IndifferentAccess
1. Use `indifferent_writer` in `convert!` so that when
`indifferent_writer`, `convert_key` or `indifferent_value` is
overridden in included class, `merge` can use those.
2. `convert!` was calling twice if `other` hash was lacking
indifference. `IndifferentAccess.inject!` already does conversion.
Diffstat (limited to 'spec/hashie/extensions/indifferent_access_spec.rb')
-rw-r--r-- | spec/hashie/extensions/indifferent_access_spec.rb | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/spec/hashie/extensions/indifferent_access_spec.rb b/spec/hashie/extensions/indifferent_access_spec.rb index fc03bc2..612f276 100644 --- a/spec/hashie/extensions/indifferent_access_spec.rb +++ b/spec/hashie/extensions/indifferent_access_spec.rb @@ -86,6 +86,45 @@ describe Hashie::Extensions::IndifferentAccess do end end + describe 'when overriding indifferent methods' do + let(:indifferent_hash) do + Class.new(::Hash) do + include Hashie::Extensions::IndifferentAccess + + ALIASES = { cat: :grumpy }.freeze + + # Override writer to maintain alias of the given key + def indifferent_writer(key, value) + indifferent_value = indifferent_value(value) + + regular_writer convert_key(key), indifferent_value + regular_writer convert_key(ALIASES[key]), indifferent_value + end + alias_method :[]=, :indifferent_writer + end.new + end + + it '#indifferent_writer' do + indifferent_hash[:cat] = 'meow' + + expect(indifferent_hash[:cat]).to eq('meow') + expect(indifferent_hash['cat']).to eq('meow') + + expect(indifferent_hash[:grumpy]).to eq('meow') + expect(indifferent_hash['grumpy']).to eq('meow') + end + + it '#merge' do + merged_hash = indifferent_hash.merge(cat: 'meow') + + expect(merged_hash[:cat]).to eq('meow') + expect(merged_hash['cat']).to eq('meow') + + expect(merged_hash[:grumpy]).to eq('meow') + expect(merged_hash['grumpy']).to eq('meow') + end + end + describe 'when translating properties and ignoring undeclared' do let(:value) { 'baz' } |