[#30589] [Bug #3391] Use single exclamation mark instead of double exclamation mark for IRB — Diego Viola <redmine@...>

Bug #3391: Use single exclamation mark instead of double exclamation mark for IRB

10 messages 2010/06/04

[#30672] [Bug #3411] Time.local 1916,5,1 #=> 1916-04-30 23:00:00 +0100 — Benoit Daloze <redmine@...>

Bug #3411: Time.local 1916,5,1 #=> 1916-04-30 23:00:00 +0100

12 messages 2010/06/08

[#30699] [Bug #3419] 1.9.2-preview3 possible bug with Rails 3 active_record sqlite_adapter — Joe Sak <redmine@...>

Bug #3419: 1.9.2-preview3 possible bug with Rails 3 active_record sqlite_adapter

9 messages 2010/06/09

[#30734] [Bug #3428] ri outputs ansi escape sequences even when stdout is not a tty — caleb clausen <redmine@...>

Bug #3428: ri outputs ansi escape sequences even when stdout is not a tty

11 messages 2010/06/11

[#30756] [Feature #3436] Spawn the timer thread lazily — Maximilian Gass <redmine@...>

Feature #3436: Spawn the timer thread lazily

15 messages 2010/06/13
[#32686] [Ruby 1.9-Feature#3436] Spawn the timer thread lazily — Mark Somerville <redmine@...> 2010/10/04

Issue #3436 has been updated by Mark Somerville.

[ruby-core:30960] [Bug #3505] URI.join and Kernel::URI should accept URI objects

From: Marc-Andre Lafortune <redmine@...>
Date: 2010-06-29 20:38:09 UTC
List: ruby-core #30960
Bug #3505: URI.join and Kernel::URI should accept URI objects
http://redmine.ruby-lang.org/issues/show/3505

Author: Marc-Andre Lafortune
Status: Open, Priority: Normal
Assigned to: Marc-Andre Lafortune, Category: lib, Target version: 1.9.x
ruby -v: ruby 1.9.3dev (2010-05-12 trunk 27763) [x86_64-darwin10.3.0] 

URI.join accepts strings or URI objects, except for the first parameter which must be a string:

  rubydev -r uri -e 'p URI.join("http://ruby-lang.org", URI("/foo"))'
  #<URI::HTTP:0x0000010109b418 URL:http://ruby-lang.org/foo>

  rubydev -r uri -e 'p URI.join(URI("http://ruby-lang.org"), "/foo")'
  /usr/local/rubydev/lib/ruby/1.9.1/uri/common.rb:156:in `split': bad URI(is not URI?): http://ruby-lang.org (URI::InvalidURIError)

I believe it should accept URI object as first parameter too.

Also, Kernel::URI accept uri strings, but not URI objects:

  rubydev -r uri -e 'URI(URI("http://ruby-lang.org"))'
  /usr/local/rubydev/lib/ruby/1.9.1/uri/common.rb:156:in `split': bad URI(is not URI?): http://ruby-lang.org (URI::InvalidURIError)

This corresponds to the documentation, but it is contrary to Kernel::String, Integer, Float, etc... that all accept their own type. The error message is clearly buggy (an URI object is not an invalid uri!).

I believe that Kernel::URI should accept URI objects (and return them).


The patch below corrects both and has no impact on test-all nor rubyspec.

I plan to commit it unless there is objection.

Yugui: should I commit it in the 1.9.2 branch too?

Thanks



diff --git a/lib/uri/common.rb b/lib/uri/common.rb
index 58fd422..bda6718 100644
--- a/lib/uri/common.rb
+++ b/lib/uri/common.rb
@@ -184,12 +184,16 @@ 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)
+      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
-      u
+      uris.inject :merge
     end
 
     def extract(str, schemes = nil, &block)
@@ -837,11 +841,20 @@ 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)
+    case uri
+    when URI::Generic
+      uri
+    when String
+      URI.parse(uri)
+    else
+      raise ArgumentError,
+        "bad argument (expected URI object or URI string)"
+    end
   end
   module_function :URI
 end


----------------------------------------
http://redmine.ruby-lang.org

In This Thread

Prev Next