class HandyHash::Patch
@api private
Public Class Methods
call(orig_data, *change_set)
click to toggle source
# File lib/handy_hash.rb, line 72 def call(orig_data, *change_set) change_set.inject(orig_data){|data, changes| deep_merge(data, changes) } end
Private Class Methods
deep_merge(h1, h2)
click to toggle source
# File lib/handy_hash.rb, line 78 def deep_merge(h1, h2) HandyHash.new({}).tap do |d| h1.each{|k,v| unless h2.key?(k) d[k] = v else if v.kind_of?(Hash) && h2[k].kind_of?(Hash) d[k] = call(v, h2[k]) else d[k] = h2[k] end end } h2.each{|k,v| next if h1.key?(k) d[k] = v } end end