module URI

Public Class Methods

build(scheme: "http", domain:, path: "/", query: "", fragment: "") click to toggle source
# File lib/creative_rails_utilities/uri.rb, line 2
def build(scheme: "http", domain:, path: "/", query: "", fragment: "")
  if !query.is_a?(String)
    query = query.to_query # handles non-string argument, a Hash, for example
  end

  query = query.present? ? "?#{query.gsub(/\A\?/, "")}" : ""
  fragment = fragment.present? ? "##{fragment.gsub(/\A\#/, "")}" : ""

  return "#{scheme}://#{domain}#{path}#{query}#{fragment}"
end
merge(uri="", new_query="", replace=false) click to toggle source

use this to merge new query parameters into well-formed URI strings, pass averride as true to replace the query portion with the new one entirely

# File lib/creative_rails_utilities/uri.rb, line 16
def merge(uri="", new_query="", replace=false)
  parsed_uri = URI(uri)
  raise ArgumentError.new(":uri argument is not a well-formed uri string!") if parsed_uri.host.blank?

  query = !new_query.is_a?(String) ? (new_query.try(:to_query).presence || new_query.to_s) : new_query.to_s

  base_uri_options = {scheme: parsed_uri.scheme, domain: parsed_uri.host, path: parsed_uri.path, query: query, fragment: parsed_uri.fragment}

  if !replace
    query = parsed_uri.query.to_s.to_query_hash.merge(query.to_s.to_query_hash).to_query
  end

  new_uri = URI.build(**base_uri_options.merge(query: query))

  return new_uri
end

Private Instance Methods

build(scheme: "http", domain:, path: "/", query: "", fragment: "") click to toggle source
# File lib/creative_rails_utilities/uri.rb, line 2
def build(scheme: "http", domain:, path: "/", query: "", fragment: "")
  if !query.is_a?(String)
    query = query.to_query # handles non-string argument, a Hash, for example
  end

  query = query.present? ? "?#{query.gsub(/\A\?/, "")}" : ""
  fragment = fragment.present? ? "##{fragment.gsub(/\A\#/, "")}" : ""

  return "#{scheme}://#{domain}#{path}#{query}#{fragment}"
end
merge(uri="", new_query="", replace=false) click to toggle source

use this to merge new query parameters into well-formed URI strings, pass averride as true to replace the query portion with the new one entirely

# File lib/creative_rails_utilities/uri.rb, line 16
def merge(uri="", new_query="", replace=false)
  parsed_uri = URI(uri)
  raise ArgumentError.new(":uri argument is not a well-formed uri string!") if parsed_uri.host.blank?

  query = !new_query.is_a?(String) ? (new_query.try(:to_query).presence || new_query.to_s) : new_query.to_s

  base_uri_options = {scheme: parsed_uri.scheme, domain: parsed_uri.host, path: parsed_uri.path, query: query, fragment: parsed_uri.fragment}

  if !replace
    query = parsed_uri.query.to_s.to_query_hash.merge(query.to_s.to_query_hash).to_query
  end

  new_uri = URI.build(**base_uri_options.merge(query: query))

  return new_uri
end