Changeset 78

Show
Ignore:
Timestamp:
02/17/06 16:36:05
Author:
miyagawa
Message:
  • Reverted hooks method on rules.
  • Added rule_hook to Plugin, which is the only point where rule can control. Refs #22
Files:

Legend:

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

    r77 r78  
    112112    my($self, $plugin, @hooks) = @_; 
    113113    while (my($hook, $callback) = splice @hooks, 0, 2) { 
     114        # set default rule_hook $hook to $plugin 
     115        $plugin->rule_hook($hook) unless $plugin->rule_hook; 
     116 
    114117        push @{ $self->{hooks}->{$hook} }, +{ 
    115118            callback  => $callback, 
     
    123126    for my $action (@{ $self->{hooks}->{$hook} }) { 
    124127        my $plugin = $action->{plugin}; 
    125         if ( $plugin->rule->dispatch($hook, $args) ) { 
     128        if ( $plugin->rule->dispatch($plugin, $hook, $args) ) { 
    126129            $action->{callback}->($plugin, $self, $args); 
    127130        } 
  • trunk/plagger/lib/Plagger/Plugin.pm

    r52 r78  
    3131sub rule { $_[0]->{rule} } 
    3232 
     33sub rule_hook { '' } 
     34 
     35sub dispatch_rule_on { 
     36    my($self, $hook) = @_; 
     37    $self->rule_hook eq $hook; 
     38} 
     39 
    33401; 
  • trunk/plagger/lib/Plagger/Rule.pm

    r51 r78  
    1919} 
    2020 
    21 sub 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  
    3521sub init { } 
    3622 
  • trunk/plagger/lib/Plagger/Rule/Always.pm

    r51 r78  
    22use base qw( Plagger::Rule ); 
    33 
    4 sub hooks    { Plagger->context->active_hooks } 
    54sub dispatch { 1 } 
    65 
  • trunk/plagger/lib/Plagger/Rule/DateTimeCron.pm

    r72 r78  
    1919} 
    2020 
    21 sub hooks { Plagger->context->active_hooks } 
    22  
    2321sub dispatch { 
    2422    my($self, $args) = @_; 
  • trunk/plagger/lib/Plagger/Rule/Expression.pm

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

    r74 r78  
    4040    } 
    4141} 
    42  
    43 sub hooks { [ 'update.entry.fixup', 'update.feed.fixup', 'publish.entry.fixup', 'publish.add_feed' ] } 
    4442 
    4543sub dispatch { 
  • trunk/plagger/lib/Plagger/Rule/FeedType.pm

    r55 r78  
    2121} 
    2222 
    23 sub hooks { [ 'publish.add_feed' ] } 
    24  
    2523sub dispatch { 
    2624    my($self, $args) = @_; 
  • trunk/plagger/lib/Plagger/Rule/Rating.pm

    r51 r78  
    2323} 
    2424 
    25 sub hooks { [ 'publish.add_feed' ] } 
    26  
    2725sub dispatch { 
    2826    my($self, $args) = @_; 
  • trunk/plagger/lib/Plagger/Rules.pm

    r54 r78  
    1515 
    1616sub dispatch { 
    17     my($self, $hook, $args) = @_; 
     17    my($self, $plugin, $hook, $args) = @_; 
     18 
     19    return 1 unless $plugin->dispatch_rule_on($hook); 
    1820 
    1921    my @bool; 
    2022    for my $rule (@{ $self->{rules} }) { 
    21         next unless $rule->can_run($hook); 
    2223        push @bool, ($rule->dispatch($args) ? 1 : 0); 
    2324    }