daily dayflower

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

追記

id:miyagawa 対応した http://svn.kwiki.org/ingy/Test-Base/

うは。sub smooth_output でフィルタかけてますね,なるほど。