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/