Object
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 108 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 ::build. But, if exception URI::InvalidComponentError is raised, then it URI::Escape#escape all URI components and tries again.
# File uri/generic.rb, line 70 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
Components of the URI in the order.
# File uri/generic.rb, line 45 def self.component self::COMPONENT end
Returns default port
# File uri/generic.rb, line 26 def self.default_port self::DEFAULT_PORT 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 156 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
Compares to URI's
# File uri/generic.rb, line 1044 def ==(oth) if self.class == oth.class self.normalize.component_ary == oth.normalize.component_ary else false end end
Checks if URI is an absolute one
# File uri/generic.rb, line 597 def absolute? if @scheme true else false end end
# File uri/generic.rb, line 1112 def coerce(oth) case oth when String oth = URI.parse(oth) else super end return oth, self end
# File uri/generic.rb, line 224 def component self.class.component end
# File uri/generic.rb, line 30 def default_port self.class.default_port end
# File uri/generic.rb, line 1056 def eql?(oth) self.class == oth.class && self.component_ary.eql?(oth.component_ary) end
# File uri/generic.rb, line 577 def fragment=(v) check_fragment(v) set_fragment(v) v end
Checks if URI has a path
# File uri/generic.rb, line 586 def hierarchical? if @path true else false end end
# File uri/generic.rb, line 396 def host=(v) check_host(v) set_host(v) v end
# File uri/generic.rb, line 1108 def inspect @@to_s.bind(self).call.sub!(/>\z/) {" URL:#{self}>"} end
oth
URI or String
Merges two URI's.
require 'uri' uri = URI.parse("http://my.example.com") p uri.merge("/main.rbx?page=1") # => #<URI::HTTP:0x2021f3b0 URL:http://my.example.com/main.rbx?page=1>
# File uri/generic.rb, line 728 def merge(oth) begin base, rel = merge0(oth) rescue raise $!.class, $!.message end if base == rel return base end authority = rel.userinfo || rel.host || rel.port # RFC2396, Section 5.2, 2) if (rel.path.nil? || 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)) if base.path && rel.path else # RFC2396, Section 5.2, 4) base.set_path(rel.path) if 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.example.com") uri.merge!("/main.rbx?page=1") p uri # => #<URI::HTTP:0x2021f3b0 URL:http://my.example.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
Returns normalized URI
# File uri/generic.rb, line 970 def normalize uri = dup uri.normalize! uri end
Destructive version of normalize
# File uri/generic.rb, line 979 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 554 def opaque=(v) check_opaque(v) set_opaque(v) v end
# File uri/generic.rb, line 316 def password=(password) check_password(password) set_password(password) # returns password end
# File uri/generic.rb, line 494 def path=(v) check_path(v) set_path(v) v end
# File uri/generic.rb, line 429 def port=(v) check_port(v) set_port(v) port end
# File uri/generic.rb, line 525 def query=(v) check_query(v) set_query(v) v end
# File uri/generic.rb, line 458 def registry=(v) check_registry(v) set_registry(v) v end
Checks if URI is relative
# File uri/generic.rb, line 609 def relative? !absolute? end
oth
URI or String
Calculates relative path from oth to self
require 'uri' uri = URI.parse('http://my.example.com/main.rbx?page=1') p uri.route_from('http://my.example.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'. begin oth, rel = route_from0(oth) rescue raise $!.class, $!.message end 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.example.com') p uri.route_to('http://my.example.com/main.rbx?page=1') #=> #<URI::Generic:0x2020c2f6 URL:/main.rbx?page=1>
# File uri/generic.rb, line 954 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 243 def scheme=(v) check_scheme(v) set_scheme(v) v end
components
Multiple Symbol arguments defined in URI::HTTP
Selects specified components from URI
require 'uri' uri = URI.parse('http://myuser:mypass@my.example.com/test.rbx') p uri.select(:userinfo, :host, :path) # => ["myuser:mypass", "my.example.com", "/test.rbx"]
# File uri/generic.rb, line 1096 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 1000 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 310 def user=(user) check_user(user) set_user(user) # returns user end
# File uri/generic.rb, line 572 def set_fragment(v) @fragment = v end
# File uri/generic.rb, line 549 def set_opaque(v) @opaque = v end
# File uri/generic.rb, line 339 def set_password(v) @password = v # returns v end
# File uri/generic.rb, line 417 def set_port(v) unless !v || v.kind_of?(Fixnum) if v.empty? v = nil else v = v.to_i end end @port = v end
# File uri/generic.rb, line 453 def set_registry(v) @registry = v end
# File uri/generic.rb, line 238 def set_scheme(v) @scheme = v end