zundaと申します

tDiaryのweather.rbプラグインをruby-1.9.1で動くようにしようとしていて*1、
ruby-1.9.1-p0のNet::HTTP#getメソッドが第2引数にnilを受け取らなくなってい
ることに気づきました。

具体的には、zlibがrequireできた場合にnet/http.rbの809行目で
  undefined method `keys' for nil:NilClass (NoMethodError)
となります。いっぽう、リファレンスマニュアル
http://www.ruby-lang.org/ja/man/html/Net_HTTP.html#get
では第2引数にnilを許すように見えます。必要でしたらどちらかの変更をお願い
します。

なお、手元では、下記のような変更でリファレンスマニュアルから期待される動
作になったと思います。(svn trunkに対する差分です。)

以上、よろしくお願いします。

*1 http://zunda.freeshell.org/d/20090210.html#p03


Index: lib/net/http.rb
===================================================================
--- lib/net/http.rb	(revision 22249)
+++ lib/net/http.rb	(working copy)
@@ -806,6 +806,7 @@
     def get(path, initheader = {}, dest = nil, &block) # :yield: +body_segment+
       res = nil
       if HAVE_ZLIB
+        initheader ||= {}
         unless  initheader.keys.any?{|k| k.downcase == "accept-encoding"}
           initheader["accept-encoding"] = "gzip;q=1.0,deflate;q=0.6,identity;q=0.3"
           @compression = true
Index: test/net/http/test_http.rb
===================================================================
--- test/net/http/test_http.rb	(revision 22249)
+++ test/net/http/test_http.rb	(working copy)
@@ -24,6 +24,7 @@
   def test_get
     start {|http|
       _test_get__get http
+      _test_get__get_initheader http
       _test_get__iter http
       _test_get__chunked http
     }
@@ -43,6 +44,18 @@
     assert_equal $test_net_http_data, res.body
   end
 
+  def _test_get__get_initheader(http)
+    assert_nothing_raised {
+      res, body = http.get('/')
+    }
+    assert_nothing_raised {
+      res, body = http.get('/', {})
+    }
+    assert_nothing_raised {
+      res, body = http.get('/', nil)
+    }
+  end
+
   def _test_get__iter(http)
     buf = ''
     res, body = http.get('/') {|s| buf << s }


--------------------------------------
Power up the Internet with Yahoo! Toolbar.
http://pr.mail.yahoo.co.jp/toolbar/