Method: Hash#deep_merge
- Defined in:
- lib/bblib/core/util/hash.rb
#deep_merge(with, merge_arrays: true, overwrite: true, uniq: false) ⇒ Object
Merges with another hash but also merges all nested hashes and arrays/values.
4 5 6 7 8 9 10 11 12 13 14 15 |
# File 'lib/bblib/core/util/hash.rb', line 4 def deep_merge(with, merge_arrays: true, overwrite: true, uniq: false) merger = proc do |_k, v1, v2| if BBLib.are_all?(Hash, v1, v2) v1.merge(v2, &merger) elsif merge_arrays && BBLib.are_all?(Array, v1, v2) uniq ? (v1 + v2).uniq : v1 + v2 else overwrite || v1 == v2 ? v2 : (uniq ? [v1, v2].flatten.uniq : [v1, v2].flatten) end end merge(with, &merger) end |