From: Marc-Andre Lafortune Date: 2010-07-01T05:18:25+09:00 Subject: [ruby-core:30980] Re: [Bug #3505] URI.join and Kernel::URI should accept URI objects Hi! On Tue, Jun 29, 2010 at 10:44 PM, Yui NARUSE wrote: > I agree with this idea, but the patch has a problem; it breaks objects which have to_str. Ah, indeed! The following patch works better, then: diff --git a/lib/uri/common.rb b/lib/uri/common.rb index 58fd422..1ec4d0e 100644 --- a/lib/uri/common.rb +++ b/lib/uri/common.rb @@ -184,12 +184,15 @@ module URI end end - def join(*str) - u = self.parse(str[0]) - str[1 .. -1].each do |x| - u = u.merge(x) + def join(*uris) + if uris[0].is_a?(URI::Generic) + elsif uri = String.try_convert(uri[0]) + uris[0] = self.parse(uri) + else + raise ArgumentError, + "bad argument(expected URI object or URI string)" end - u + uris.inject :merge end def extract(str, schemes = nil, &block) @@ -837,11 +840,19 @@ module URI end module Kernel - # alias for URI.parse. + # - # This method is introduced at 1.8.2. - def URI(uri_str) # :doc: - URI.parse(uri_str) + # Returns +uri+ converted to a URI object. + # + def URI(uri) + if uri.is_a?(URI::Generic) + uri + elsif uri = String.try_convert(uri) + URI.parse(uri) + else + raise ArgumentError, + "bad argument (expected URI object or URI string)" + end end module_function :URI end