class Hash

Public Instance Methods

deep_merge!(second) click to toggle source
# File lib/tiller/util.rb, line 12
def deep_merge!(second)
  merger = proc { |_key, v1, v2| Hash === v1 && Hash === v2 ? v1.merge(v2, &merger) : [:undefined, nil, :nil].include?(v2) ? v1 : v2 }
  self.merge!(second, &merger)
end
deep_traverse() { |key, value| ... } click to toggle source

gist.github.com/sepastian/8688143

# File lib/tiller/util.rb, line 18
def deep_traverse(&block)
  stack = self.map{ |k,v| [ [k], v ] }
  while not stack.empty?
    key, value = stack.pop
    yield(key, value)
    if value.is_a? Hash
      value.each{ |k,v| stack.push [ key.dup << k, v ] }
    end
  end
end
tiller_merge!(second) { |key, v1, v2| ... } click to toggle source
# File lib/tiller/util.rb, line 3
def tiller_merge!(second)
  if Tiller::config['deep_merge']
    self.deep_merge!(second)
  else
    self.merge!(second){ |key , v1 , v2| yield key, v1, v2 if block_given? }
  end
end