In: |
uri/generic.rb
|
Parent: | Object |
Base class for all URI classes.
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] |
See new
Creates a new URI::Generic instance from components of URI::Generic with check. Components are: scheme, userinfo, host, port, registry, path, opaque, query and fragment. You can provide arguments either by an Array or a Hash. See new for hash keys to use or for order of array items.
# File uri/generic.rb, line 107 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
See new
At first, tries to create a new URI::Generic instance using URI::Generic::build. But, if exception URI::InvalidComponentError is raised, then it URI::Escape.escape all URI components and tries again.
# File uri/generic.rb, line 69 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
scheme: | Protocol scheme, i.e. ‘http’,’ftp’,’mailto’ and so on. |
userinfo: | User name and password, i.e. ‘sdmitry:bla’ |
host: | Server host name |
port: | Server port |
registry: | DOC: FIXME! |
path: | Path on server |
opaque: | DOC: FIXME! |
query: | Query data |
fragment: | A part of URI after ’#’ sign |
arg_check: | Check arguments [false by default] |
Creates a new URI::Generic instance from ``generic’’ components without check.
# File uri/generic.rb, line 155 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 1098 def coerce(oth) case oth when String oth = URI.parse(oth) else super end return oth, self end
# File uri/generic.rb, line 1094 def inspect sprintf("#<%s:0x%x URL:%s>", self.class.to_s, self.object_id, self.to_s) end
oth: | URI or String |
Merges two URI’s.
require 'uri' uri = URI.parse("http://my.rubysite.com") p uri.merge("/main.rbx?page=1") # => #<URI::HTTP:0x2021f3b0 URL:http://my.rubysite.com/main.rbx?page=1>
# File uri/generic.rb, line 728 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
oth: | URI or String |
Destructive form of merge
require 'uri' uri = URI.parse("http://my.rubysite.com") uri.merge!("/main.rbx?page=1") p uri # => #<URI::HTTP:0x2021f3b0 URL:http://my.rubysite.com/main.rbx?page=1>
# File uri/generic.rb, line 700 def merge!(oth) t = merge(oth) if self == t nil else replace!(t) self end end
# File uri/generic.rb, line 315 def password=(password) check_password(password) set_password(password) password end
oth: | URI or String |
Calculates relative path from oth to self
require 'uri' uri = URI.parse('http://my.rubysite.com/main.rbx?page=1') p uri.route_from('http://my.rubysite.com') #=> #<URI::Generic:0x20218858 URL:/main.rbx?page=1>
# File uri/generic.rb, line 914 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
oth: | URI or String |
Calculates relative path to oth from self
require 'uri' uri = URI.parse('http://my.rubysite.com') p uri.route_to('http://my.rubysite.com/main.rbx?page=1') #=> #<URI::Generic:0x2020c2f6 URL:/main.rbx?page=1>
# File uri/generic.rb, line 950 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
components: | Multiple Symbol arguments defined in URI::HTTP |
Selects specified components from URI
require 'uri' uri = URI.parse('http://myuser:mypass@my.rubysite.com/test.rbx') p uri.select(:userinfo, :host, :path) # => ["myuser:mypass", "my.rubysite.com", "/test.rbx"]
# File uri/generic.rb, line 1083 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
Constructs String from URI
# File uri/generic.rb, line 996 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 364 def userinfo if !@password @user else @user + ':' + @password end end