ただのにっき
2001-12-26(水) 8958歩 [長年日記]
■ tDiary 1.3.2
リリースしました。夕べ出そうと思ってたけど、Ruby 1.6.6が出たのでちょっと動作確認などしておりました。問題なかったけど(たぶん)。今年はおそらくこれで最後。
1.3.1からの変更点は以下の通り(スナップショットでの変更点を含む)。
- プラグインの実装
 - プラグインのサンプル提供(misc/plugin)
 - 最新表示で月をまたぐ
 - ツッコミサマリの表示長を2倍に
 - ツッコミサマリは新しい方を優先して表示
 - ツッコミフォームを、リンク元表示の上に移動
 - セクションを囲む<div class="section">を追加
 - symlinkで複数日記を運用する場合の負担軽減
 - mod_rubyで動かないバグをFIX
 - 更新時に呼ばれるプラグインのテスト実装
 
詳しくはChangeLogを参照。プラグインに関する文書をmisc/plugin/README.htmlとして書いたのでどうぞよろしく。
■ 最後の「更新時に呼ばれるプラグイン」についてちょっと解説。
通常のプラグインは実装者が好きな名前をつけられるんだけど、それを日記記述者がどこかで明示しなくてはならない。何かのイベントをきっかけに呼ばれるコールバックのような仕組みはこれではダメなので、名前を固定する必要がある(もちろんあらかじめ名前を登録するという方法もあるけど、複雑すぎる気がする)。そこで、updateという固定名称のプラグイン呼び出しをshow.rhtmlに埋め込んだ。
じゃあプラグイン実装者はこのupdateを上書きしちゃえばいいかというとそれでは困る。競合するとどれかひとつしか呼ばれなくなってしまうので。そこで、updateはそのままで、@@update_procというArraryなクラス変数にProcオブジェクトを追加してもらうことにしてみた。例えば、きたさんのrecent_listを外部ファイルに出力したいなんて場合はこう書く:
@@update_proc << Proc::new do
   open( 'recent_list.html', 'w' ) do |f|
      f.write( recent_list )
   end
end
 このサンプルのままだとHTML的に完結してないとか問題はあるけど、基本的にはこんな感じ。これを応用すると更新情報をrdfで出したり……なんて真似もできるはず。なお、updateは文字列を返しても意味ないので、空文字列を返すように実装されております。
 あと、ツッコミがあった時にはupdateは呼ばれない。ツッコミも引っかけたかったら、@modeが'comment'の場合にだけ動作するプラグインを書いて、@headerか@footerに埋め込めばいいので。じゃあなんて更新時は同じやり方ができないんだ、というと、更新時には@headerや@footerを使わないからなのであった(笑)。
でもなー。なんかスマートじゃないんだよ。もっといい方法が思いついたら、この実装はさくっとやめちゃうかも。