Project

General

Profile

Backport #3506

Updated by marcandre (Marc-Andre Lafortune) over 7 years ago

=begin 
  
  Kernel::URI could accept an optional parameter to specify a parser. 
 
  It could then be used in a couple of places in the library itself. 
 
  Patch follows: 
 
 
  diff --git a/lib/uri/common.rb b/lib/uri/common.rb 
  index bda6718..f9f0a6a 100644 
  --- a/lib/uri/common.rb 
  +++ b/lib/uri/common.rb 
  @@ -185,14 +185,7 @@ module URI 
       end 
  
       def join(*uris) 
  -        case uris[0] 
  -        when Generic 
  -        when String 
  -          uris[0] = self.parse(uris[0]) 
  -        else 
  -          raise ArgumentError, 
  -            "bad argument(expected URI object or URI string)" 
  -        end 
  +        uris[0] = URI(uris[0], self) 
         uris.inject :merge 
       end 
  
  @@ -845,12 +838,12 @@ module Kernel 
     # 
     # Returns +uri+ converted to a URI object. 
     # 
  -    def URI(uri) 
  +    def URI(uri, parser = URI::DEFAULT_PARSER) 
       case uri 
       when URI::Generic 
         uri 
       when String 
  -        URI.parse(uri) 
  +        parser.parse(uri) 
       else 
         raise ArgumentError, 
           "bad argument (expected URI object or URI string)" 
  diff --git a/lib/uri/generic.rb b/lib/uri/generic.rb 
  index 4fdfd14..4084b56 100644 
  --- a/lib/uri/generic.rb 
  +++ b/lib/uri/generic.rb 
  @@ -783,14 +783,7 @@ module URI 
       # return base and rel. 
       # you can modify `base', but can not `rel'. 
       def merge0(oth) 
  -        case oth 
  -        when Generic 
  -        when String 
  -          oth = parser.parse(oth) 
  -        else 
  -          raise ArgumentError, 
  -            "bad argument(expected URI object or URI string)" 
  -        end 
  +        oth = URI(oth, parser) 
  
         if self.relative? && oth.relative? 
           raise BadURIError, 
  @@ -854,15 +847,7 @@ module URI 
       private :route_from_path 
  
       def route_from0(oth) 
  -        case oth 
  -        when Generic 
  -        when String 
  -          oth = parser.parse(oth) 
  -        else 
  -          raise ArgumentError, 
  -            "bad argument(expected URI object or URI string)" 
  -        end 
  - 
  +        oth = URI(oth, parser) 
         if self.relative? 
           raise BadURIError, 
             "relative URI: #{self}" 
  @@ -966,16 +951,7 @@ module URI 
       #     #=> #<URI::Generic:0x2020c2f6 URL:/main.rbx?page=1> 
       # 
       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) 
  +        URI(oth, parser).route_from(self) 
       end 
  
       # 
 
 =end 
 

Back