Deep merge hashes. If both values are numeric they are summed.
$ ruby deep_sum_merge.rb
source:
layer_1: 10
deeper:
layer_2: 20
deeper:
layer_3: 30
deeper:
some_text: im gonna get overwritten
deeper:
layer_5: 50
destination:
layer_1: 100
deeper:
deeper:
layer_3: 300
deeper:
layer_4: 400
some_text: non-numerics are replaced as expected with Hash.merge
deeper:
layer_5: 500
merged result with sums:
layer_1: 110
deeper:
layer_2: 20
deeper:
layer_3: 330
deeper:
some_text: non-numerics are replaced as expected with Hash.merge
deeper:
layer_5: 550
layer_4: 400
It worked :)
The actual merge logic you are looking for here in the code below