class WebMock::Util::URI
Constants
- ADDRESSABLE_URIS
- NORMALIZED_URIS
Public Class Methods
encode_unsafe_chars_in_userinfo(userinfo)
click to toggle source
# File lib/webmock/util/uri.rb, line 65 def self.encode_unsafe_chars_in_userinfo(userinfo) Addressable::URI.encode_component(userinfo, WebMock::Util::URI::CharacterClasses::USERINFO) end
heuristic_parse(uri)
click to toggle source
# File lib/webmock/util/uri.rb, line 26 def self.heuristic_parse(uri) ADDRESSABLE_URIS[uri].dup end
is_uri_localhost?(uri)
click to toggle source
# File lib/webmock/util/uri.rb, line 69 def self.is_uri_localhost?(uri) uri.is_a?(Addressable::URI) && %w(localhost 127.0.0.1 0.0.0.0).include?(uri.host) end
normalize_uri(uri)
click to toggle source
# File lib/webmock/util/uri.rb, line 30 def self.normalize_uri(uri) return uri if uri.is_a?(Regexp) uri = 'http://' + uri unless uri.match('^https?://') if uri.is_a?(String) NORMALIZED_URIS[uri].dup end
strip_default_port_from_uri_string(uri_string)
click to toggle source
# File lib/webmock/util/uri.rb, line 57 def self.strip_default_port_from_uri_string(uri_string) case uri_string when %r{^http://} then uri_string.sub(%r{:80(/|$)}, '\1') when %r{^https://} then uri_string.sub(%r{:443(/|$)}, '\1') else uri_string end end
variations_of_uri_as_strings(uri_object)
click to toggle source
# File lib/webmock/util/uri.rb, line 36 def self.variations_of_uri_as_strings(uri_object) normalized_uri = normalize_uri(uri_object.dup).freeze uris = [ normalized_uri ] if normalized_uri.path == '/' uris = uris_with_trailing_slash_and_without(uris) end uris = uris_encoded_and_unencoded(uris) if normalized_uri.port == Addressable::URI.port_mapping[normalized_uri.scheme] uris = uris_with_inferred_port_and_without(uris) end if normalized_uri.scheme == "http" uris = uris_with_scheme_and_without(uris) end uris.map {|uri| uri.to_s.gsub(/^\/\//,'') }.uniq end
Private Class Methods
sort_query_values(query_values)
click to toggle source
# File lib/webmock/util/uri.rb, line 76 def self.sort_query_values(query_values) sorted_query_values = query_values.sort query_values.is_a?(Hash) ? Hash[*sorted_query_values.inject([]) { |values, pair| values + pair}] : sorted_query_values end
uris_encoded_and_unencoded(uris)
click to toggle source
# File lib/webmock/util/uri.rb, line 88 def self.uris_encoded_and_unencoded(uris) uris.map do |uri| [ uri.to_s, Addressable::URI.unencode(uri, String).freeze ] end.flatten end
uris_with_inferred_port_and_without(uris)
click to toggle source
# File lib/webmock/util/uri.rb, line 81 def self.uris_with_inferred_port_and_without(uris) uris.map { |uri| uri = uri.dup.force_encoding(Encoding::ASCII_8BIT) if uri.respond_to?(:force_encoding) [ uri, uri.gsub(%r{(:80)|(:443)}, "").freeze ] }.flatten end
uris_with_scheme_and_without(uris)
click to toggle source
# File lib/webmock/util/uri.rb, line 94 def self.uris_with_scheme_and_without(uris) uris.map { |uri| uri = uri.dup.force_encoding(Encoding::ASCII_8BIT) if uri.respond_to?(:force_encoding) [ uri, uri.gsub(%r{^https?://},"").freeze ] }.flatten end
uris_with_trailing_slash_and_without(uris)
click to toggle source
# File lib/webmock/util/uri.rb, line 101 def self.uris_with_trailing_slash_and_without(uris) uris = uris.map { |uri| uri = uri.dup.force_encoding(Encoding::ASCII_8BIT) if uri.respond_to?(:force_encoding) [ uri, uri.omit(:path).freeze ] }.flatten end