def recurse_extends(yml, key, visited)
      assert_not_visited(key, visited)
      return yml[key] unless has_extends?(yml, key)
      return yml[key] unless parents_exist?(yml, key)
      visited[key] = key
      parent_keys = [yml[key]['extends']].flatten
      h = {}
      parent_keys.each do |parent_key|
        from_extends = yml[key].merge(recurse_extends(yml, parent_key, visited)) do |key, child_val, parent_val|
          handle_relative_operators(parent_val, child_val)
        end
        h = h.merge(from_extends) do |key, older_sibling, younger_sibling|
          # In general, go with the younger sibling.
          # UNLESS that younger sibling had a relative operator, in which use the
          # (already computed) relative operator applied, which lands in older_sibling
          # See bug 244.
          sibling = younger_sibling
          %w(+= -= *= /=).each do |op|
            sibling = older_sibling if younger_sibling.to_s.strip.start_with? op
          end
          sibling
        end
      end
      return h
    end
def recurse_extends(yml, key, visited)
      assert_not_visited(key, visited)
      return yml[key] unless has_extends?(yml, key)
      return yml[key] unless parents_exist?(yml, key)
      visited[key] = key
      parent_keys = [yml[key]['extends']].flatten
      h = {}
      parent_keys.each do |parent_key|
        from_extends = yml[key].merge(recurse_extends(yml, parent_key, visited)) do |key, child_val, parent_val|
          handle_relative_operators(parent_val, child_val)
        end
        h = h.merge(from_extends) do |key, older_sibling, younger_sibling|
          # In general, go with the younger sibling.
          # UNLESS that younger sibling had a relative operator, in which use the
          # (already computed) relative operator applied, which lands in older_sibling
          # See bug 244.
          sibling = younger_sibling
          %w(+= -= *= /=).each do |op|
            sibling = older_sibling if younger_sibling.to_s.strip.start_with? op
          end
          sibling
        end
      end
      return h
    end
Process the extends recursively
 :nodoc:
 @api private