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