In: |
uri/generic.rb
|
Parent: | Object |
DEFAULT_PORT | = | nil |
COMPONENT | = | [ :scheme, :userinfo, :host, :port, :registry, :path, :opaque, :query, :fragment |
USE_REGISTRY | = | false |
fragment | [R] | |
host | [R] | |
opaque | [R] | |
path | [R] | |
port | [R] | |
query | [R] | |
registry | [R] | |
scheme | [R] |
# File uri/generic.rb, line 85 def self.build2(args) begin return self.build(args) rescue InvalidComponentError if args.kind_of?(Array) return self.build(args.collect{|x| if x URI.escape(x) else x end }) elsif args.kind_of?(Hash) tmp = {} args.each do |key, value| tmp[key] = if value URI.escape(value) else value end end return self.build(tmp) end end end
# File uri/generic.rb, line 111 def self.build(args) if args.kind_of?(Array) && args.size == ::URI::Generic::COMPONENT.size tmp = args elsif args.kind_of?(Hash) tmp = ::URI::Generic::COMPONENT.collect do |c| if args.include?(c) args[c] else nil end end else raise ArgumentError, "expected Array of or Hash of components of #{self.class} (#{self.class.component.join(', ')})" end tmp << true return self.new(*tmp) end
# File uri/generic.rb, line 132 def initialize(scheme, userinfo, host, port, registry, path, opaque, query, fragment, arg_check = false) @scheme = nil @user = nil @password = nil @host = nil @port = nil @path = nil @query = nil @opaque = nil @registry = nil @fragment = nil if arg_check self.scheme = scheme self.userinfo = userinfo self.host = host self.port = port self.path = path self.query = query self.opaque = opaque self.registry = registry self.fragment = fragment else self.set_scheme(scheme) self.set_userinfo(userinfo) self.set_host(host) self.set_port(port) self.set_path(path) self.set_query(query) self.set_opaque(opaque) self.set_registry(registry) self.set_fragment(fragment) end if @registry && !self.class.use_registry raise InvalidURIError, "the scheme #{@scheme} does not accept registry part: #{@registry} (or bad hostname?)" end @scheme.freeze if @scheme self.set_path('') if !@path && !@opaque # (see RFC2396 Section 5.2) self.set_port(self.default_port) if self.default_port && !@port end
# File uri/generic.rb, line 313 def userinfo=(userinfo) if userinfo.nil? return nil end check_userinfo(*userinfo) set_userinfo(*userinfo) userinfo end
# File uri/generic.rb, line 328 def password=(password) check_password(password) set_password(password) password end
# File uri/generic.rb, line 377 def userinfo if !@password @user else @user + ':' + @password end end
# File uri/generic.rb, line 784 def merge!(oth) t = merge(oth) if self == t nil else replace!(t) self end end
abs(self) + rel(oth) => abs(new)
# File uri/generic.rb, line 795 def merge(oth) base, rel = merge0(oth) if base == rel return base end authority = rel.userinfo || rel.host || rel.port # RFC2396, Section 5.2, 2) if rel.path.empty? && !authority && !rel.query base.set_fragment(rel.fragment) if rel.fragment return base end base.set_query(nil) base.set_fragment(nil) # RFC2396, Section 5.2, 4) if !authority base.set_path(merge_path(base.path, rel.path)) else # RFC2396, Section 5.2, 4) base.set_path(rel.path) end # RFC2396, Section 5.2, 7) base.set_userinfo(rel.userinfo) if rel.userinfo base.set_host(rel.host) if rel.host base.set_port(rel.port) if rel.port base.set_query(rel.query) if rel.query base.set_fragment(rel.fragment) if rel.fragment return base end
calculate relative path from oth to self
# File uri/generic.rb, line 971 def route_from(oth) # you can modify `rel', but can not `oth'. oth, rel = route_from0(oth) if oth == rel return rel end rel.set_path(route_from_path(oth.path, self.path)) if rel.path == './' && self.query # "./?foo" -> "?foo" rel.set_path('') end return rel end
# File uri/generic.rb, line 996 def route_to(oth) case oth when Generic when String oth = URI.parse(oth) else raise ArgumentError, "bad argument(expected URI object or URI string)" end oth.route_from(self) end
# File uri/generic.rb, line 1021 def normalize! if path && path == '' set_path('/') end if host && host != host.downcase set_host(self.host.downcase) end end
# File uri/generic.rb, line 1044 def to_s str = '' if @scheme str << @scheme str << ':' end if @opaque str << @opaque else if @registry str << @registry else if @host str << '//' end if self.userinfo str << self.userinfo str << '@' end if @host str << @host end if @port && @port != self.default_port str << ':' str << @port.to_s end end str << path_query end if @fragment str << '#' str << @fragment end str end
# File uri/generic.rb, line 1090 def ==(oth) if self.class == oth.class self.normalize.component_ary == oth.normalize.component_ary else false end end
# File uri/generic.rb, line 1119 def select(*components) components.collect do |c| if component.include?(c) self.send(c) else raise ArgumentError, "expected of components of #{self.class} (#{self.class.component.join(', ')})" end end end
# File uri/generic.rb, line 1132 def inspect sprintf("#<%s:0x%x URL:%s>", self.class.to_s, self.object_id, self.to_s) end