merge_hash_tree

in lib/gitlab/utils/merge_hash.rb [61:101]


      def merge_hash_tree(first_element, second_element)
        
        
        
        
        
        if crushable?(first_element) && crush(first_element).include?(second_element)
          first_element
        elsif crushable?(second_element) && crush(second_element).include?(first_element)
          second_element
        
        
        
        
        
        elsif first_element.is_a?(Array) && second_element.is_a?(Hash)
          merge_hash_into_array(first_element, second_element)
        elsif first_element.is_a?(Hash) && second_element.is_a?(Array)
          merge_hash_into_array(second_element, first_element)
        
        
        
        
        elsif first_element.is_a?(Hash) && second_element.is_a?(Hash)
          first_element.deep_merge(second_element) { |key, first, second| merge_hash_tree(first, second) }
        
        
        
        
        elsif first_element.is_a?(Array) && second_element.is_a?(Array)
          first_element.map { |child_element| merge_hash_tree(child_element, second_element) }
        
        
        
        
        
        else
          (Array.wrap(first_element) + Array.wrap(second_element)).uniq
        end
      end