遠藤です。 make test-all の以下のエラーについてです。 1) Error: test_starttls(IMAPTest): IOError: closed stream /home/mame/work/ruby19/ruby/.ext/common/openssl/buffering.rb:240:in `close' /home/mame/work/ruby19/ruby/.ext/common/openssl/buffering.rb:240:in `sysclose' /home/mame/work/ruby19/ruby/.ext/common/openssl/buffering.rb:240:in `close' /home/mame/work/ruby19/ruby/lib/net/imap.rb:296:in `disconnect' /home/mame/work/ruby19/ruby/test/net/imap/test_imap.rb:189:in `ensure in starttls_test' /home/mame/work/ruby19/ruby/test/net/imap/test_imap.rb:189:in `starttls_test' /home/mame/work/ruby19/ruby/test/net/imap/test_imap.rb:72:in `test_starttls' このエラーの原因は、lib/rdoc/ri/driver.rb が Hash に method_missing を 定義していることです。 class Hash # HACK don't add stuff to Hash. def method_missing method, *args self[method.to_s] end このせいで lib/net/imap.rb の starttls の中の begin # for backward compatibility certs = options.to_str options = create_ssl_params(certs, verify) rescue NoMethodError end というコードが想定外の動作をします (options がハッシュ) 。 net/imap.rb 側で対処するのは簡単ですが、できれば method_missing を 取り除いた方がいいと思います。OpenStruct を使うように書き直すか、 hash.foo を hash["foo"] に書き換えればよいと思いますが、動的型付けの Ruby ではいかにも修正漏れが出そうです。rdoc に詳しい人に修正して ほしいです。 Index: lib/net/imap.rb =================================================================== --- lib/net/imap.rb (revision 18104) +++ lib/net/imap.rb (working copy) @@ -333,11 +333,10 @@ def starttls(options = {}, verify = true) send_command("STARTTLS") do |resp| if resp.kind_of?(TaggedResponse) && resp.name == "OK" - begin + if options.respond_to?(:to_str) # for backward compatibility certs = options.to_str options = create_ssl_params(certs, verify) - rescue NoMethodError end start_tls_session(options) end # MVM ができて、ライブラリごとに別の VM を立ててテストを走らせれば # 解決するのかな。 -- Yusuke ENDOH <mame / tsg.ne.jp>