Plagger::Plugin::Expression
既存のPluginじゃ上手く処理できないんだけど、新しくPlugin書くほどでもないよなーって時に。
package Plagger::Plugin::Expression; use strict; use base qw( Plagger::Plugin ); sub init { my $self = shift; $self->SUPER::init(@_); $self->rule_hook($self->conf->{rule_hook}); my $hooks = $self->conf->{hooks} or return; $hooks = [ $hooks ] unless ref $hooks eq 'ARRAY'; for my $hook (@$hooks) { my $callback = sub { eval $hook->{expression}; Plagger->context->error($@) if ($@); }; push @{$self->{hooks}}, $hook->{hook}, $callback; } } sub register { my ($self, $context) = @_; $context->register_hook( $self, @{$self->{hooks}}, ); } 1; __END__ =head1 SYNOPSIS - module: Expression config: rule_hook: smartfeed.entry hooks: - hook: smartfeed.init expression: Plagger->context->log(debug => 'smartfeed.init') - hook: smartfeed.entry expression: my ($self, $context, $args) = @_; $context->log(debug => $args->{entry}->title) - module: Expression config: hooks: hook: update.feed.fixup expression: Plagger->context->log(debug => 'update.feed.fixup') =cut