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