Class: DynportTools::DeepMerger
- Inherits:
-
Object
- Object
- DynportTools::DeepMerger
- Defined in:
- lib/dynport_tools/deep_merger.rb
Class Method Summary collapse
Class Method Details
.merge(a, b) ⇒ Object
3 4 5 6 7 8 9 10 11 |
# File 'lib/dynport_tools/deep_merger.rb', line 3 def merge(a, b) if a.is_a?(Hash) && b.is_a?(Hash) merge_hashes(a, b) elsif a.is_a?(Array) && b.is_a?(Array) merge_arrays(a, b) else b end end |
.merge_arrays(a, b) ⇒ Object
13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/dynport_tools/deep_merger.rb', line 13 def merge_arrays(a, b) [a.length, b.length].max.times.map do |i| if b.length < i + 1 a[i] elsif a.length < i + 1 b[i] else merge(a[i], b[i]) end end end |
.merge_hashes(a, b) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/dynport_tools/deep_merger.rb', line 25 def merge_hashes(a, b) (a.keys + b.keys).uniq.inject({}) do |hash, key| if !a.has_key?(key) hash[key] = b[key] elsif !b.has_key?(key) hash[key] = a[key] else hash[key] = merge(a[key], b[key]) end hash end end |