module Turbopuffer::Internal::Util

def join_parsed_uri(lhs, rhs)

Returns:
  • (URI::Generic) -

Options Hash: (**rhs)
  • :query (Hash{String=>Array}) --
  • :path (String, nil) --
  • :port (Integer, nil) --
  • :host (String, nil) --
  • :scheme (String, nil) --
  • :query (Hash{String=>Array}) --
  • :path (String, nil) --
  • :port (Integer, nil) --
  • :host (String, nil) --
  • :scheme (String, nil) --

Parameters:
  • rhs (Hash{Symbol=>String, Integer, nil}) -- .
  • lhs (Hash{Symbol=>String, Integer, nil}) -- .

Other tags:
    Api: - private
def join_parsed_uri(lhs, rhs)
  base_path, base_query = lhs.fetch_values(:path, :query)
  slashed = base_path.end_with?("/") ? base_path : "#{base_path}/"
  parsed_path, parsed_query = parse_uri(rhs.fetch(:path)).fetch_values(:path, :query)
  override = URI::Generic.build(**rhs.slice(:scheme, :host, :port), path: parsed_path)
  joined = URI.join(URI::Generic.build(lhs.except(:path, :query)), slashed, override)
  query = deep_merge(
    joined.path == base_path ? base_query : {},
    parsed_query,
    rhs[:query].to_h,
    concat: true
  )
  joined.query = encode_query(query)
  joined
end