2006-11-24
Plagger でまずなにをやりたいか
id:miyagawa [plagger] そういう場合はまずなにをやりたいかをBlogなりIRCなりでつぶやいてみるのがいいかも
すいません。自分一人で抱え込むつもりもなかったんですが日記に書くネタ確保しときたかったんで(笑)。時間ないので来週やりたいことを書きます。
Plagger 0.7.15 の中身
食わず嫌いで Plagger を敬遠していたんですが,ついにインストールしました。しかし自分がやりたいことをやるには既存のプラグインだけでは無理そう。で,とりあえず既存のプラグインのコードを読んでいたらどんどんわからなくなってしまいました。
資料をあさっていたら,Shibuya.Plaggers に Plaggerの中身 - file-glob こと k.daibaの日記 という記事が紹介されているのを発見。そうそうこういう構造説明書がほしかったんですよ。
しかし既存のプラグインのソースを見ているとどうも勝手が違うみたいなので Plagger::run() の中身を読むことにしました。0.7.15 での内部構造を id:kdaiba さん記法で書き下してみます。
autoload_plugin('Bundle::Defaults')
plugin.init
subscription.load
for feed (subscription->feeds)
if (defined feed->aggregator)
feed->aggregator
else
customfeed.handle
if (failed)
subscription->delete_feed(feed)
aggregator.finalize
for feed (update->feeds)
for entry (feed->entries)
update.entry.fixup
update.feed.fixup
update.fixup
smartfeed.init
for feed (update->feeds)
for entry (feed->entries)
smartfeed.entry
smartfeed.feed
smartfeed.finalize
publish.init
for feed (update->feeds)
for entry (feed->entries)
publish.entry.fixup
publish.feed
for entry (feed->entries)
publish.entry
publish.finalize
plugin.finalize
0.5.5 と違う部分を太字にしました。一番大きく違うのが,subscription / aggregator の TYPE がなくなり仕組みも変わっているところです。
たとえば,CustomFeed::PerlMonk は Subscription plugin としては働かず Aggregator として働くのですが,customfeed.handle ハンドラにおいて feed の URL がターゲットのものであるかどうかで aggregate するかどうかを判断しています。
一方,CustomFeed::Mixi は Subscription plugin として生涯が始まるのですが,$context->subscription に feed を追加する際,feed(Plagger::Feed)の aggregate プロパティにアグリゲートハンドラを登録します。このようにすることで,そのフィードは CustomFeed::Mixi のもっているアグリゲートハンドラでのみ処理することになります。
なんか説明があまりうまくなくてすみません。
あと,設定ファイルのなかに Aggregator::* が指定されていない場合に,Bundle::Defaults によって Aggregator::Simple が自動的に読み込まれるところにはまりました。
Test::Base の t/diff_is.t がこける
みんなうまくいってるし(;>_<;)。
どうも Test::Simple が 0.65 (厳密には 0.64_1)でテスト失敗時のメッセージが変わったからみたいです。
* Made the failure diagnostic message file and line reporting portion match Perl's for easier integration with Perl aware editors. (so its "at $file line $line_num." now) [rt.cpan.org #20639] Test-Simple 0.65 Changes
こいつのせいで昔は
# Failed test 'little diff' # in /tmp/test-blocks-321 at line 3.
って出力だったので
# Failed test 'little diff' # at /tmp/test-blocks-321 line 3.
と変わったからみたい。
こんなところにうだうだ書かずに rt に報告すればいいんですけどとりあえず force install で逃げます(:P
追記
うは。sub smooth_output でフィルタかけてますね,なるほど。
