あおきです。

  In mail "[ruby-list:21649] net-1.1.10"
    TAKAHASHI Masayoshi <maki / inac.co.jp> wrote:

> 高橋征義です。net/http 使いたおし中。
> 
> net/http で302: Moved Temporarily なサイトを見に行くとエラーが
> 起こるんですが、これってバグですよね? headでもgetでも発生する
> ようです。

ああー、またもバグですね。
高橋さんには本当に何度もご迷惑おかけします。


> それと、ついでに質問なんですが、protocol.rb には
> 
> >  class RetryCode < ReplyCode
> >    error_type ProtoRetryError
> >  end
> 
> というのがいくつかありますが、これって何をやっているのでしょうか?
> error_type はインスタンス変数に代入しているだけみたいなんですが、
> クラス定義の中でそれをやるのって意味があるんでしょうか。

意味はあります。クラスはインスタンス変数を持てるので、たとえば

class A
  @a = 'ok'
  def A.print_a
    puts @a
  end
end

A.print_a

は ok を表示します。まずかったのは、継承してるのに @err を
再設定していなかったことです。
再設定してもいいですが、もっと美しい(変更が小さい)方法としては
添付のパッチのような方法があります。


ところで、現在の仕様では 302 とかになると例外になってしまうんですが、
これはどうなるのが妥当だと思われますか?そのような場合でも後に
エンティティボディが続くことがあるので本体も読みこまなければ
いけないんですが、今はそれをさぼっています。可能性としては

1  本体を読みこんだあとに例外
2  本体を要求するメソッド(get post)で本体がない場合のみ例外
3  簡易メソッド(get head post)は例外。get2 post2 などは例外なし
4  例外は一切出さない

くらいかなあ、と思うんですが。(実装はどれも簡単です。)
-------------------------------------------------------------------
あおきみねろう

Index: protocol.rb =================================================================== RCS file: /home/aamine/cvs/maillib/protocol.rb,v retrieving revision 1.2.2.3 diff -u -r1.2.2.3 protocol.rb --- protocol.rb 2000/03/26 16:34:47 1.2.2.3 +++ protocol.rb 2000/03/27 07:50:23 @@ -15,7 +15,7 @@ module Net - Version = '1.1.10' + Version = '1.1.11' =begin @@ -284,11 +284,11 @@ class << self def error_type( err ) - @err = err + type.module_eval "def get_error_type() #{err.name} end" end def error!( mes ) - raise @err, mes + raise get_error_type, mes end end