Plugin::PhaseNotifier
なんとなく作ってみた。
現在のフェーズとそのフェーズで使われるPluginを教えてくれるPlugin。
こういう風にconfig.yaml書くと、
- module: Subscription::Config config: feed: - url: http://d.hatena.ne.jp/tayaya/rss - module: Publish::Gmail - module: Notify::YahooMessenger - module: PhaseNotifier
下のようにフェーズとPlugin名が表示される。
Plagger [info] plugin Plagger::Plugin::Subscription::Config loaded. Plagger [info] plugin Plagger::Plugin::Publish::Gmail loaded. Plagger [info] plugin Plagger::Plugin::Notify::YahooMessenger loaded. Plagger [info] plugin Plagger::Plugin::PhaseNotifier loaded. Plagger::Plugin::PhaseNotifier [info] Phase: subscription.load / Plugins: Subscription::Config Plagger [info] plugin Plagger::Plugin::Aggregator::Simple loaded. ・ ・ ・ Plagger::Plugin::Publish::Gmail [info] Sending qw/Perる 日誌/ to xxx@example.com Plagger::Plugin::Notify::YahooMessenger [info] Notifying qw/Perる 日誌/ to Yahoo Messenger Plagger::Plugin::PhaseNotifier [info] Phase: publish.feed / Plugins: Publish::Gmail, Notify::YahooMessenger
ソースはこんな感じ。
package Plagger::Plugin::PhaseNotifier; use strict; use base qw( Plagger::Plugin ); sub register { my($self, $context) = @_; my @hooks; for my $hook ( keys %{ $context->{hooks} } ) { my @plugins = map { my $plugin = ref $_->{plugin}; $plugin =~ s/^Plagger::Plugin:://; $plugin; } @{ $context->{hooks}->{$hook} }; push @{ $self->{hooks}->{$hook} }, @plugins; push @hooks, $hook => \&$hook; } $context->register_hook( $self, @hooks, ); } sub AUTOLOAD { my($self, $context, $args) = @_; (my $phase = our $AUTOLOAD) =~ s/^Plagger::Plugin::PhaseNotifier:://; my @plugins = @{ $self->{hooks}->{$phase} }; $context->log( info => "Phase: $phase / Plugins: " . (join ', ', @plugins) ); $context->dumper($context) if $self->conf->{context}; $context->dumper($args) if $self->conf->{args}; } 1;