self.merge_hash!

in itchef/cookbooks/fb_helpers/libraries/fb_helpers.rb [304:341]


    def self.merge_hash!(merge_onto, merge_with, overwrite_leaves = false)
      
      if merge_onto.is_a?(Hash) && merge_with.is_a?(Hash)
        merge_with.each do |key, merge_with_value|
          is_leaf = false
          if overwrite_leaves && merge_with_value.is_a?(Hash)
            
            merge_with_value.each do |_k, v|
              if v.is_a?(Hash)
                is_leaf = true
                break
              end
            end
          end

          if merge_onto.key?(key)
            if is_leaf
              value = merge_onto[key]
              merge_with_value.each do |k, _v|
                value[k] = merge_with_value[k]
              end
            else
              value = self.merge_hash(merge_onto[key], merge_with_value,
                                      overwrite_leaves)
            end
          else
            value = merge_with_value
          end

          merge_onto[key] = value
        end
        merge_onto
      else
        
        merge_with
      end
    end