class Hash
Add a deep_merge
method to a Hash
. It unions arrays (for terraform profiles behaviour)
Public Instance Methods
deep_merge(second)
click to toggle source
# File lib/hash.rb, line 6 def deep_merge(second) merger = proc { |_key, v1, v2| if v1.is_a?(Hash) && v2.is_a?(Hash) v1.merge(v2, &merger) elsif v1.is_a?(Array) && v2.is_a?(Array) v1 | v2 elsif [:undefined, nil, :nil].include?(v2) v1 else v2 end } merge(second.to_h, &merger) end
symbolize_names!(result = self)
click to toggle source
# File lib/hash.rb, line 21 def symbolize_names!(result = self) case result when Hash # rubocop:disable Style/HashEachMethods result.keys.each do |key| result[key.to_sym] = symbolize_names!(result.delete(key)) end # rubocop:enable Style/HashEachMethods when Array result.map! { |r| symbolize_names!(r) } end result end