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 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 << DEFAULT_PARSER 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 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 @parser.escape(x) else x end }) elsif args.kind_of?(Hash) tmp = {} args.each do |key, value| tmp[key] = if value @parser.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 44 def self.component self::COMPONENT end
Returns default port
# File uri/generic.rb, line 25 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
parser
Parser for internal use [URI::DEFAULT_PARSER by default]
arg_check
Check arguments [false by default]
Creates a new URI::Generic instance from “generic” components without check.
# File uri/generic.rb, line 158 def initialize(scheme, userinfo, host, port, registry, path, opaque, query, fragment, parser = DEFAULT_PARSER, arg_check = false) @scheme = nil @user = nil @password = nil @host = nil @port = nil @path = nil @query = nil @opaque = nil @registry = nil @fragment = nil @parser = parser 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 1049 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 602 def absolute? if @scheme true else false end end
# File uri/generic.rb, line 1117 def coerce(oth) case oth when String oth = @parser.parse(oth) else super end return oth, self end
# File uri/generic.rb, line 229 def component self.class.component end
# File uri/generic.rb, line 29 def default_port self.class.default_port end
# File uri/generic.rb, line 1061 def eql?(oth) @parser == oth.parser && self.component_ary.eql?(oth.component_ary) end
# File uri/generic.rb, line 582 def fragment=(v) check_fragment(v) set_fragment(v) v end
Checks if URI has a path
# File uri/generic.rb, line 591 def hierarchical? if @path true else false end end
# File uri/generic.rb, line 401 def host=(v) check_host(v) set_host(v) v end
# File uri/generic.rb, line 1113 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 733 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 705 def merge!(oth) t = merge(oth) if self == t nil else replace!(t) self end end
Returns normalized URI
# File uri/generic.rb, line 975 def normalize uri = dup uri.normalize! uri end
Destructive version of normalize
# File uri/generic.rb, line 984 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 559 def opaque=(v) check_opaque(v) set_opaque(v) v end
# File uri/generic.rb, line 321 def password=(password) check_password(password) set_password(password) # returns password end
# File uri/generic.rb, line 499 def path=(v) check_path(v) set_path(v) v end
# File uri/generic.rb, line 434 def port=(v) check_port(v) set_port(v) port end
# File uri/generic.rb, line 530 def query=(v) check_query(v) set_query(v) v end
# File uri/generic.rb, line 463 def registry=(v) check_registry(v) set_registry(v) v end
Checks if URI is relative
# File uri/generic.rb, line 614 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 919 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 959 def route_to(oth) case oth when Generic when String oth = @parser.parse(oth) else raise ArgumentError, "bad argument(expected URI object or URI string)" end oth.route_from(self) end
# File uri/generic.rb, line 248 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 1101 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 1005 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 315 def user=(user) check_user(user) set_user(user) # returns user end
# File uri/generic.rb, line 1077 def component_ary component.collect do |x| self.send(x) end end
# File uri/generic.rb, line 577 def set_fragment(v) @fragment = v end
# File uri/generic.rb, line 554 def set_opaque(v) @opaque = v end
# File uri/generic.rb, line 344 def set_password(v) @password = v # returns v end
# File uri/generic.rb, line 422 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 458 def set_registry(v) @registry = v end
# File uri/generic.rb, line 243 def set_scheme(v) @scheme = v end
Commenting is here to help enhance the documentation. For example, code samples, or clarification of the documentation.
If you have questions about Ruby or the documentation, please post to one of the Ruby mailing lists. You will get better, faster, help that way.
If you wish to post a correction of the docs, please do so, but also file bug report so that it can be corrected for the next release. Thank you.
If you want to help improve the Ruby documentation, please visit Documenting-ruby.org.