Changeset 51

Show
Ignore:
Timestamp:
02/08/06 18:12:51
Author:
miyagawa
Message:

Added Rule->hooks and $context->active_hooks to specify which phase the rule can run on. Fixes #21

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/lib/Plagger.pm

    r39 r51  
    1818use Plagger::Template; 
    1919use Plagger::Update; 
     20 
     21sub active_hooks { 
     22    my $self = shift; 
     23    my @hooks= keys %{$self->{hooks}}; 
     24    wantarray ? @hooks : \@hooks; 
     25} 
    2026 
    2127sub context { undef } 
     
    8591    for my $action (@{ $self->{hooks}->{$hook} }) { 
    8692        my $plugin = $action->{plugin}; 
    87         if ( $plugin->rule->dispatch($args) ) { 
     93        if ( $plugin->rule->dispatch($hook, $args) ) { 
    8894            $action->{callback}->($plugin, $self, $args); 
    8995        } 
  • trunk/plagger/lib/Plagger/Rule.pm

    r30 r51  
    1919} 
    2020 
     21sub can_run { 
     22    my($self, $hook) = @_; 
     23    $self->{__hooks} ||= { map { $_ => 1 } @{ $self->hooks } }; 
     24 
     25    my @phase = split /\./, $hook; 
     26    my @try   = reverse map join(".", @phase[0..$_]), 0..$#phase; 
     27 
     28    for my $try (@try) { 
     29        return 1 if $self->{__hooks}->{$try} || $self->{__hooks}->{"$try.*"}; 
     30    } 
     31 
     32    return 0; 
     33} 
     34 
    2135sub init { } 
    2236 
  • trunk/plagger/lib/Plagger/Rule/Always.pm

    r7 r51  
    22use base qw( Plagger::Rule ); 
    33 
     4sub hooks    { Plagger->context->active_hooks } 
    45sub dispatch { 1 } 
    56 
  • trunk/plagger/lib/Plagger/Rule/Compound.pm

    r47 r51  
    2525 
    2626sub dispatch { 
    27     my($self, $args) = @_; 
     27    my($self, $hook, $args) = @_; 
    2828 
    2929    my @bool; 
    3030    for my $rule (@{ $self->{rules} }) { 
     31        next unless $rule->can_run($hook); 
    3132        push @bool, ($rule->dispatch($args) ? 1 : 0); 
    3233    } 
  • trunk/plagger/lib/Plagger/Rule/Expression.pm

    r36 r51  
    22use strict; 
    33use base qw( Plagger::Rule ); 
     4 
     5sub hooks { 
     6    my $self = shift; 
     7    $self->{hooks} || Plagger->context->active_hooks; 
     8} 
    49 
    510sub dispatch { 
  • trunk/plagger/lib/Plagger/Rule/Rating.pm

    r36 r51  
    2323} 
    2424 
     25sub hooks { [ 'publish.add_feed' ] } 
     26 
    2527sub dispatch { 
    2628    my($self, $args) = @_;