class Hurley::Url

Constants

EMPTY
INFERRED_PORTS
SLASH

Attributes

password[RW]
user[RW]

Public Class Methods

escape_path(path) click to toggle source
# File lib/hurley/url.rb, line 9
def self.escape_path(path)
  ERB::Util.url_encode(path.to_s)
end
escape_paths(*paths) click to toggle source
# File lib/hurley/url.rb, line 13
def self.escape_paths(*paths)
  paths.map do |path|
    escape_path(path)
  end.join(SLASH)
end
join(absolute, relative) click to toggle source
# File lib/hurley/url.rb, line 46
def self.join(absolute, relative)
  parse(absolute).join(parse(relative))
end
new(parsed) click to toggle source
# File lib/hurley/url.rb, line 27
def initialize(parsed)
  @parsed = parsed
  if u = @parsed.user
    @user = CGI.unescape(u)
    @parsed.user = nil
  else
    @user = nil
  end

  if pwd = @parsed.password
    @password = CGI.unescape(pwd)
    @parsed.password = nil
  else
    @password = nil
  end

  @parsed.userinfo = nil
end
parse(raw_url) click to toggle source
# File lib/hurley/url.rb, line 19
def self.parse(raw_url)
  case raw_url
  when Url then raw_url
  when nil, EMPTY then Empty.new
  else new(@@parser.call(raw_url.to_s))
  end
end

Public Instance Methods

basic_auth() click to toggle source
# File lib/hurley/url.rb, line 152
def basic_auth
  return unless @user
  userinfo = @password ? "#{@user}:#{@password}" : @user
  "Basic #{Base64.encode64(userinfo).gsub(/\n/, EMPTY)}"
end
inspect() click to toggle source
# File lib/hurley/url.rb, line 167
def inspect
  "#<%s %s>" % [
    self.class.name,
    to_s,
  ]
end
join(relative) click to toggle source
# File lib/hurley/url.rb, line 76
def join(relative)
  has_host = false

  query.each do |key, value|
    relative.query[key] = value unless relative.query.key?(key)
  end

  if !path.empty? && !relative.path.start_with?(SLASH)
    rel_path = relative.path
    relative.path = path
    if !rel_path.empty?
      joiner = path.end_with?(SLASH) ? nil : SLASH
      relative.path += "#{joiner}#{rel_path}"
    end
  end

  if !relative.path.empty? && !relative.path.start_with?(SLASH)
    relative.path = "/#{relative.path}"
  end

  if relative.host
    has_host = true
  else
    relative.host = host
  end

  if has_host && relative.host != host
    relative.user = relative.password = nil
  else
    relative.user ||= user
    relative.password ||= password
  end

  if relative.scheme
    has_host = true
  else
    relative.scheme = scheme
  end

  inferred_port = INFERRED_PORTS[relative.scheme]
  if !has_host && relative.port == inferred_port
    relative.port = port == inferred_port ? nil : port
  end

  relative
end
path() click to toggle source
# File lib/hurley/url.rb, line 64
def path
  @parsed.path
end
path=(new_path) click to toggle source
# File lib/hurley/url.rb, line 68
def path=(new_path)
  @parsed.path = new_path
end
port() click to toggle source
# File lib/hurley/url.rb, line 60
def port
  @parsed.port || INFERRED_PORTS[@parsed.scheme]
end
query() click to toggle source
# File lib/hurley/url.rb, line 72
def query
  @query ||= query_class.parse(@parsed.query)
end
query_class() click to toggle source
# File lib/hurley/url.rb, line 158
def query_class
  @query_class ||= Query.default
end
query_class=(new_query) click to toggle source
# File lib/hurley/url.rb, line 162
def query_class=(new_query)
  @query = query ? new_query.new(@query) : nil
  @query_class = new_query
end
raw_query() click to toggle source
# File lib/hurley/url.rb, line 139
def raw_query
  if (q = query.to_query_string).empty?
    nil
  else
    q
  end
end
raw_query=(new_query) click to toggle source
# File lib/hurley/url.rb, line 147
def raw_query=(new_query)
  @query = nil
  @parsed.query = new_query
end
request_uri() click to toggle source
# File lib/hurley/url.rb, line 123
def request_uri
  req_path = path
  req_path = SLASH if req_path.empty?

  if (q = query.to_query_string).empty?
    req_path
  else
    "#{req_path}?#{q}"
  end
end
to_s() click to toggle source
# File lib/hurley/url.rb, line 134
def to_s
  @parsed.query = raw_query
  @parsed.to_s
end