mirror of
https://github.com/ruby/ruby.git
synced 2022-11-09 12:17:21 -05:00
* lib/xmlrpc/client.rb (new2): use URI for uri parsing.
* test/xmlrpc/test_client.rb: test that query params are passed to the client constructor. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@34884 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
cd85cd25b4
commit
1836f44fe9
3 changed files with 32 additions and 16 deletions
|
@ -1,3 +1,9 @@
|
|||
Sat Mar 3 08:42:25 2012 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* lib/xmlrpc/client.rb (new2): use URI for uri parsing.
|
||||
* test/xmlrpc/test_client.rb: test that query params are passed to the
|
||||
client constructor.
|
||||
|
||||
Sat Mar 3 08:20:10 2012 Aaron Patterson <aaron@tenderlovemaking.com>
|
||||
|
||||
* lib/xmlrpc/client.rb (new2): raises an ArgumentError on bad
|
||||
|
|
|
@ -339,23 +339,22 @@ module XMLRPC
|
|||
class << self
|
||||
|
||||
def new2(uri, proxy=nil, timeout=nil)
|
||||
if match = /^([^:]+):\/\/(([^@]+)@)?([^\/]+)(\/.*)?$/.match(uri)
|
||||
proto = match[1]
|
||||
user, passwd = (match[3] || "").split(":")
|
||||
host, port = match[4].split(":")
|
||||
path = match[5]
|
||||
begin
|
||||
url = URI(uri)
|
||||
rescue URI::InvalidURIError => e
|
||||
raise ArgumentError, e.message, e.backtrace
|
||||
end
|
||||
|
||||
case proto
|
||||
when 'http' then port ||= 80
|
||||
when 'https' then port ||= 443
|
||||
else
|
||||
unless URI::HTTP === url
|
||||
raise ArgumentError, "Wrong protocol specified. Only http or https allowed!"
|
||||
end
|
||||
|
||||
port = port.to_i
|
||||
else
|
||||
raise ArgumentError, "Wrong URI as parameter!"
|
||||
end
|
||||
proto = url.scheme
|
||||
user = url.user
|
||||
passwd = url.password
|
||||
host = url.host
|
||||
port = url.port
|
||||
path = url.path.empty? ? nil : url.request_uri
|
||||
|
||||
proxy_host, proxy_port = (proxy || "").split(":")
|
||||
proxy_port = proxy_port.to_i if proxy_port
|
||||
|
|
|
@ -132,5 +132,16 @@ module XMLRPC
|
|||
XMLRPC::Client.new2 ':::::'
|
||||
end
|
||||
end
|
||||
|
||||
def test_new2_path_with_query
|
||||
client = FakeClient.new2 'http://example.org/foo?bar=baz'
|
||||
host, path, port, *rest = client.args
|
||||
|
||||
assert_equal 'example.org', host
|
||||
assert_equal '/foo?bar=baz', path
|
||||
assert port
|
||||
|
||||
rest.each { |x| refute x }
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue