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