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