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