class Gem::Uri

The Uri handles rubygems source URIs.

Attributes

parsed_uri[R]

Add a protected reader for the cloned instance to access the original object’s parsed uri

Public Class Methods

new(source_uri) click to toggle source
# File lib/rubygems/uri.rb, line 46
def initialize(source_uri)
  @parsed_uri = parse(source_uri)
end
parse(uri) click to toggle source

Parses uri, returning the original uri if it’s invalid

# File lib/rubygems/uri.rb, line 40
def self.parse(uri)
  parse!(uri)
rescue URI::InvalidURIError
  uri
end
parse!(uri) click to toggle source

Parses uri, raising if it’s invalid

# File lib/rubygems/uri.rb, line 18
def self.parse!(uri)
  require "uri"

  raise URI::InvalidURIError unless uri

  return uri unless uri.is_a?(String)

  # Always escape URI's to deal with potential spaces and such
  # It should also be considered that source_uri may already be
  # a valid URI with escaped characters. e.g. "{DESede}" is encoded
  # as "%7BDESede%7D". If this is escaped again the percentage
  # symbols will be escaped.
  begin
    URI.parse(uri)
  rescue URI::InvalidURIError
    URI.parse(URI::DEFAULT_PARSER.escape(uri))
  end
end
redact(uri) click to toggle source

Parses and redacts uri

# File lib/rubygems/uri.rb, line 11
def self.redact(uri)
  new(uri).redacted
end

Public Instance Methods

method_missing(method_name, *args, &blk) click to toggle source
Calls superclass method BasicObject#method_missing
# File lib/rubygems/uri.rb, line 72
def method_missing(method_name, *args, &blk)
  if @parsed_uri.respond_to?(method_name)
    @parsed_uri.send(method_name, *args, &blk)
  else
    super
  end
end
redact_credentials_from(text) click to toggle source
# File lib/rubygems/uri.rb, line 66
def redact_credentials_from(text)
  return text unless valid_uri? && password? && text.include?(to_s)

  text.sub(password, 'REDACTED')
end
redacted() click to toggle source
# File lib/rubygems/uri.rb, line 50
def redacted
  return self unless valid_uri?

  if token? || oauth_basic?
    with_redacted_user
  elsif password?
    with_redacted_password
  else
    self
  end
end
respond_to_missing?(method_name, include_private = false) click to toggle source
Calls superclass method Object#respond_to_missing?
# File lib/rubygems/uri.rb, line 80
def respond_to_missing?(method_name, include_private = false)
  @parsed_uri.respond_to?(method_name, include_private) || super
end
to_s() click to toggle source
# File lib/rubygems/uri.rb, line 62
def to_s
  @parsed_uri.to_s
end

Private Instance Methods

initialize_copy(original) click to toggle source
# File lib/rubygems/uri.rb, line 123
def initialize_copy(original)
  @parsed_uri = original.parsed_uri.clone
end
oauth_basic?() click to toggle source
# File lib/rubygems/uri.rb, line 115
def oauth_basic?
  password == 'x-oauth-basic'
end
parse(uri) click to toggle source
# File lib/rubygems/uri.rb, line 95
def parse(uri)
  self.class.parse(uri)
end
parse!(uri) click to toggle source
# File lib/rubygems/uri.rb, line 91
def parse!(uri)
  self.class.parse!(uri)
end
password?() click to toggle source
# File lib/rubygems/uri.rb, line 111
def password?
  !!password
end
token?() click to toggle source
# File lib/rubygems/uri.rb, line 119
def token?
  !user.nil? && password.nil?
end
valid_uri?() click to toggle source
# File lib/rubygems/uri.rb, line 107
def valid_uri?
  !@parsed_uri.is_a?(String)
end
with_redacted_password() click to toggle source
# File lib/rubygems/uri.rb, line 103
def with_redacted_password
  clone.tap {|uri| uri.password = 'REDACTED' }
end
with_redacted_user() click to toggle source
# File lib/rubygems/uri.rb, line 99
def with_redacted_user
  clone.tap {|uri| uri.user = 'REDACTED' }
end