From: TAKAHASHI Masayoshi Date: 2000-06-13T00:11:18+09:00 Subject: [ruby-list:23181] Re: http.rb will change 高橋征義です。 Minero Aoki さん: > > > > また、HTTPResponse オブジェクトに body を含めれば、例外発生時には、こ > > > > の HTTPResponse オブジェクトを利用できるような方法を考えれば、ヘッダ情 > > > > 報、ボディともに利用できて、便利そうな気もします。 > > > > > > それはもはや無理でしょう。 > > > これは無理でも、$!.body とかで取り出す、ということはできないん > > でしょうか? > > $!.data.body でいいですか? それなら簡単です。 えーと、混乱させてしまってとっても申し訳ないんですが、今さらながら 青山さん提案の、 「HTTPResponseそのものにBodyの内容を入れる」、 というのが良いような気がしています。もちろん互換性は気にしては いるのですが、あまりこだわりすぎて、改善を躊躇しすぎるのもまずい んじゃないかと。 # 週末から「リファクタリング」を読んでるんで、リファクタ猿と # 化してるような気もしますが(汗;>自分 青山さん提案の利点としては、 ・「GETが返すもの」が一つにまとまっていて分かりやすい。 ・PerlのLWPでもUserAgentが返すResponseはhead、body込みに なっているなど、似たような前例もある。 ・$!で渡すときにも便利。 ・res, data = hoge()、という多重代入のメソッドはRubyの標準 ライブラリにもさほどあるわけではなく、さほど分かりやすい とは言えない。 といったことが挙げられます。 で、懸念材料である「APIの変更」ですが、いきなり今までの やり方ができなくなるのはさすがに問題だと思います。ので、 移行期間を設けて、それまでは res, dataの形での取得を残した まま、res.body という形でも取得、ということにするのは どうでしょう。 ということでパッチまで書いてみました。あ、いや、さすがに いきなりこれを取り込んでほしい、ということではなく、こういう 風にした方がいいんじゃないかと思うんだけどどうでしょう、 という提案・説明の資料のつもりです(_o_) net/http.rb を使っている他の方の意見もぜひ聞いてみたいです。 --- http.rb.org Mon Jun 12 23:33:03 2000 +++ http.rb Mon Jun 12 23:35:10 2000 @@ -171,6 +171,7 @@ def get( path, u_header = nil, dest = nil, &block ) resp = get2( path, u_header ) {|f| dest = f.body( dest, &block ) } + resp.body = dest resp.value return resp, dest end @@ -352,9 +353,11 @@ super( code_type, code, msg ) @data = {} @http_body_exist = bexist + @body = nil end attr_reader :http_body_exist + attr_reader :body def []( key ) @data[ key.downcase ] 高橋征義 (TAKAHASHI Masayoshi) Email:maki@inac.co.jp