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.