るびべん です:

えっと、大雑把にいうと、「他人のスクリプト(1248行)を利用して改造したい
のですが、どういう方針がいいでしょう」というご相談です。

1.やりたいこと
高林さんの作っている「quickmlサーバ」 (http://quickml.com/quickml/)と
いう素晴らしいスクリプトがあるのですが、残念ながらroot権限が必要です(だ
いたいrootさんならMLくらい自分でドンドン立てるワイ、との陰の声(笑))。

ということで、.qmail(もしくは、.forward)から呼び出す方式(fmlちっくに)
に上記のスクリプトに上記を書き換えようという作戦。

2.スクリプト自体http://quickml.com/quickml/quickml-0.3.tar.gz は、えい
やっと読めば、キモはわかります。

ただ、オリジナルは末尾が:
  server  = QuickMLServer.new(config)
  sweeper = QuickMLSweeper.new(config)
  trap(:TERM) { server.shutdown; sweeper.shutdown }
  trap(:INT)  { server.shutdown; sweeper.shutdown }
  trap(:HUP)  { config.logger.reopen }
  t = Thread.new { sweeper.start }
  t.abort_on_exception = true
  server.start
end

てな形式の「コテコテ」のデーモン君ですので、STDIN→入力→各種処理(ここ
でコードの再利用すべきや?)→出力→sendmail -t 方式に大改造・・・・

3.上記行数のとおり、さほど長いもんじゃないんですが、クラス継承、モジュー
ルのinclude があって、スパゲッティをほどくのがめんどくさそう(泣)。
正直なところ、クラスを使う部分は本質的ではない。

4.作者である 高林さとる さんにもquickml-server-MLで相談したりしてるん
ですが、スキーに行ったきり帰ってきません(笑)。##おーーーい、骨折とか
してないかぁ〜(^^ /~
#ruby-list のほうがおせっかいな方が多そうだし・・・

===でもって考えられる案。
(案の1)ちょこまかと、mail処理部分を呼ぶところだけいじくって、できるだ
けオリジナルはいじらない(「running code は触るな」の原則)。
##だけど、そもそもオリジナルは、SMTP処理まで入ってるスクリプトであっ
て、これじゃあまりに無駄な部分が多いような。

(案の2)まず、クラスの依存関係をきっちり整理してよけいな依存関係を削除
し、クラスらいぶらりを呼び出すメインルーチンだけを書く。
##まぁ、「教科書」にはこう書いてありますけど、世の中これで済めば・・・

(案の3)オリジナルスクリプトから「アイディア」だけを拝借して、1から書
き直す。そもそも、STDIN を TEXT処理して、sendmail -tなんていうのは、「上
から下に抜ける」スクリプトであって、かぷせる化なんか不要なはず。スクラッ
チから書け!


===
プロ的には、やっぱ(案の3)なんでしょっかねぇ(悩)。



るびべん@あまグラマー。