method
merge
v2_6_3 -
Show latest stable
- Class:
URI::Generic
merge(oth)public
Args
oth |
Description
Merges two URIs.
Usage
require 'uri' uri = URI.parse("http://my.example.com") uri.merge("/main.rbx?page=1") # => "http://my.example.com/main.rbx?page=1"
# File lib/uri/generic.rb, line 1099
def merge(oth)
rel = parser.send(:convert_to_uri, oth)
if rel.absolute?
#raise BadURIError, "both URI are absolute" if absolute?
# hmm... should return oth for usability?
return rel
end
unless self.absolute?
raise BadURIError, "both URI are relative"
end
base = self.dup
authority = rel.userinfo || rel.host || rel.port
# RFC2396, Section 5.2, 2)
if (rel.path.nil? || rel.path.empty?) && !authority && !rel.query
base.fragment=(rel.fragment) if rel.fragment
return base
end
base.query = nil
base.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.query = rel.query if rel.query
base.fragment=(rel.fragment) if rel.fragment
return base
end Related methods
- Instance methods
- +
- -
- ==
- absolute
- absolute?
- coerce
- component
- default_port
- eql?
- find_proxy
- fragment=
- hash
- hierarchical?
- host=
- hostname
- hostname=
- inspect
- merge
- merge!
- normalize
- normalize!
- opaque=
- parser
- password
- password=
- path=
- port=
- query=
- registry
- registry=
- relative?
- route_from
- route_to
- scheme=
- select
- to_s
- user
- user=
- userinfo
- userinfo=
- Class methods
- build
- build2
- component
- default_port
- new
- use_proxy?
- use_registry
- Protected methods
-
component_ary -
set_host -
set_opaque -
set_password -
set_path -
set_port -
set_registry -
set_scheme -
set_user -
set_userinfo - Private methods
-
check_host -
check_opaque -
check_password -
check_path -
check_port -
check_registry -
check_scheme -
check_user -
check_userinfo -
escape_userpass -
merge_path -
replace! -
split_path -
split_userinfo