あおきです。

  In Mail "[ruby-list:15275] Re: mail library"
    matz / netlab.co.jp (Yukihiro Matsumoto) wrote:

> まつもと ゆきひろです

> ふむふむ。ちょっと見てみました。機能についてはそれほど言うこ
> とはないのですが、Mail::とMail/についてはもうちょっと考えた
> 方が良い気がしてきました。

> 単純に考えても

> などが考えられます。Perl5式はクラス名とファイル名が一致して
> なかなかよろしいのですが、現状のRubyでは対応できない部分があ
> りそうです(useがないし)。

> いろいろ考えたんですが、拡張ライブラリはすくなくとも現状では
> 階層ディレクトリに対応してませんから、Python式に近いのがよろ
> しいのではないでしょうかねえ。

> ということで、いまさらですが以下の2案を提案します。
>
> (1) ディレクトリを使わないもの

> (1) 使うもの

> どんなでしょう?

意見と疑問がいくつかあります。

1  ファイル構造に関しては、ディレクトリに分けるのがいいと思います。
ファイル名空間を独立させられるのがなによりうれしいです。
(現在そうなっていないものの対策は、ディレクトリを分けたうえで
リンクを張るか、ロードパスに入れておくか、または後述の案)

2  まつもとさんの提案では「ファイル名 = メインクラス名.downcase」が
成立していますが、これはルールに入りますか?それとも偶然でしょうか?

3  将来POP4がでても'pop'で参照できるほうがいいかと思ってPOPSessionと
pop.rbにしたのですが、「3」はあるほうがいいでしょうか?
POP4になったときに今のインターフェイスを保てるかどうかはあやしいので
数字を書かないことが逆に統一を乱す可能性も確かにあります。
しかし少なくともファイル名に関しては'pop'のほうがいいと思います。

4  メインクラスはSMTPSessionでなくSMTPのほうがいいでしょうか。
もしそうするのなら、SessionはProtocolに、現在のProtocolを
Command(など)にしたほうがいいのではないでしょうか。


それからこれは追加提案ですが、ファイルが複数あるライブラリを使う
ときには将来の拡張に備えて、次のようなメソッドを介することにしたら
どうでしょうか。ポイントはコメントアウトしてあるところで、
ディレクトリをつくらないライブラリもロードできます。

-------------------------------------------------------------------
def use_lib( libname, *fnames )
  if fnames.empty? then
    raise ArgumentError, "filenames required"
  end
  return if $:.find{|dname| File.basename( dname ) == libname }

  # ライブラリに対応するディレクトリを探す
  targ = nil
  $:.each do |dname|
    Dir.foreach( dname ) do |fname|
      if File.directory? fname and
         File.basename( fname ) == libname then
        targ = File.expand_path( dname ) + File::Separator + packname
        break
      end
    end
    break if targ
  end

  # みつからなくても(いまのところ)無視する
  # unless targ then
  #   raise LoadError, "library #{libname} not exist"
  # end

  # ライブラリのファイルをロード
  $:.unshift targ
  fnames.each{|f| require f }
  $:.delete! targ
end
-------------------------------------------------------------------

第二引数以降はこの実装ではファイル名ですが、将来にはモジュール側が
スクリプトの中で指定できる「feature」として扱うようにすることも
可能でしょう。



> |# どなたか英語ドキュメントの校正をしていただけるとうれしいです。
> |# 今のままだと絶対に意味が通らない自信があります ^^;;
> 
> えーと、ちらと見てみた限りではあまり問題はなさそうに思ったの
> ですが、ruby-talk当たりで添削してもらいますか?

いえ、それならいいです。読めなければ文句言ってくれるでしょう。
-------------------------------------------------------------------
あおきみねろう     site: http://www1.u-netsurf.ne.jp/~brew/mine/jp/