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