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を使わないからなのであった(笑)。
でもなー。なんかスマートじゃないんだよ。もっといい方法が思いついたら、この実装はさくっとやめちゃうかも。
うひー.
完成度向上目指して頑張ります.