[前][次][番号順一覧][スレッド一覧]

ruby-changes:23641

From: naruse <ko1@a...>
Date: Fri, 18 May 2012 16:32:24 +0900 (JST)
Subject: [ruby-changes:23641] naruse:r35692 (trunk): * lib/uri/generic.rb (URI::Generic.build): duplicate args before adding

naruse	2012-05-18 16:32:08 +0900 (Fri, 18 May 2012)

  New Revision: 35692

  http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=35692

  Log:
    * lib/uri/generic.rb (URI::Generic.build): duplicate args before adding
      new items. (don't change arguments)
    
    * lib/uri/generic.rb (URI::Generic.build): use URI::Generic::COMPONENT
      if this method is called from URI::Generic.
    
    * lib/uri/generic.rb (URI::Generic.build2): escape only if the item is
      a String.
    
    * lib/uri/generic.rb (URI::Generic.build2): use DEFAULT_PARSER because
      it doesn't have parser method. [Bug #6420]

  Modified files:
    trunk/ChangeLog
    trunk/lib/uri/generic.rb
    trunk/test/uri/test_generic.rb

Index: ChangeLog
===================================================================
--- ChangeLog	(revision 35691)
+++ ChangeLog	(revision 35692)
@@ -1,3 +1,17 @@
+Fri May 18 15:20:56 2012  NARUSE, Yui  <naruse@r...>
+
+	* lib/uri/generic.rb (URI::Generic.build): duplicate args before adding
+	  new items. (don't change arguments)
+
+	* lib/uri/generic.rb (URI::Generic.build): use URI::Generic::COMPONENT
+	  if this method is called from URI::Generic.
+
+	* lib/uri/generic.rb (URI::Generic.build2): escape only if the item is
+	  a String.
+
+	* lib/uri/generic.rb (URI::Generic.build2): use DEFAULT_PARSER because
+	  it doesn't have parser method. [Bug #6420]
+
 Fri May 18 15:54:07 2012  KOSAKI Motohiro  <kosaki.motohiro@g...>
 
 	* ext/zlib/extconf.rb: Use an exception instaed of bare puts.
Index: lib/uri/generic.rb
===================================================================
--- lib/uri/generic.rb	(revision 35691)
+++ lib/uri/generic.rb	(revision 35692)
@@ -86,8 +86,8 @@
       rescue InvalidComponentError
         if args.kind_of?(Array)
           return self.build(args.collect{|x|
-            if x
-              parser.escape(x)
+            if x.is_a?(String)
+              DEFAULT_PARSER.escape(x)
             else
               x
             end
@@ -96,7 +96,7 @@
           tmp = {}
           args.each do |key, value|
             tmp[key] = if value
-                parser.escape(value)
+                DEFAULT_PARSER.escape(value)
               else
                 value
               end
@@ -121,7 +121,7 @@
     def self.build(args)
       if args.kind_of?(Array) &&
           args.size == ::URI::Generic::COMPONENT.size
-        tmp = args
+        tmp = args.dup
       elsif args.kind_of?(Hash)
         tmp = ::URI::Generic::COMPONENT.collect do |c|
           if args.include?(c)
@@ -131,8 +131,9 @@
           end
         end
       else
+        component = self.class.component rescue ::URI::Generic::COMPONENT
         raise ArgumentError,
-        "expected Array of or Hash of components of #{self.class} (#{self.class.component.join(', ')})"
+        "expected Array of or Hash of components of #{self.class} (#{component.join(', ')})"
       end
 
       tmp << nil
Index: test/uri/test_generic.rb
===================================================================
--- test/uri/test_generic.rb	(revision 35691)
+++ test/uri/test_generic.rb	(revision 35692)
@@ -723,4 +723,13 @@
     u.hostname = "::1"
     assert_equal("http://[::1]/bar", u.to_s)
   end
+
+  def test_build
+    URI::Generic.build(['http', nil, 'example.com', 80, nil, '/foo', nil, nil, nil])
+  end
+
+  def test_build2
+    URI::Generic.build2(path: "/foo bar/baz")
+    URI::Generic.build2(['http', nil, 'example.com', 80, nil, '/foo bar' , nil, nil, nil])
+  end
 end

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]