前回のエントリで、catlxom のプラグイン機構を plagger っぽくしてみたのですが、
sub register {
my ($class, $c) = @_;
$c->catlxom->register_hook(
$class,
'setup' => 'setup',
'interpolate' => 'interpolate',
);
}
といった感じで、各プラグイン毎にいちいちプラグインを実行する hook ポイントと、その hook ポイントで実行するメソッドを記述するのもちょっと冗長だなぁ、と。
なので、hook ポイント名とメソッド名は同じ、という規約を作ってしまって、Catalxom::Plugins でプラグインロードする際に register_hook してやれば、いちいち register を書く必要がなくなってハッピーだと思ったのでコード書いてみた。
Index: lib/Catlxom/Plugins.pm
===================================================================
--- lib/Catlxom/Plugins.pm (revision 23)
+++ lib/Catlxom/Plugins.pm (working copy)
@@ -51,7 +51,15 @@
( my $plugin = 'Catlxom::Plugin::' . join( '::', @path ) . $file->basename )
=~ s/\.pm$//;
- unshift @Catlxom::Context::ISA, $plugin;
+ for ( qw(setup initialize start update filter sort paginate fixedup
+ interpolate end) ){
+ if ( $plugin->can($_) ){
+ $c->catlxom->register_hook(
+ $plugin,
+ $_ => $_,
+ );
+ }
+ }
}
if ( $c->debug ) {
これでプラグインのコードがちょっとだけすっきりする。本家からの全差分はこちら。