module Turbopuffer::Internal::Util
def join_parsed_uri(lhs, rhs)
-
(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