root/trunk/plagger/lib/Plagger/Rule/Rating.pm

Revision 78 (checked in by miyagawa, 3 years ago)
  • Reverted hooks method on rules.
  • Added rule_hook to Plugin, which is the only point where rule can control. Refs #22
  • Property svn:keywords set to Id Revision
Line 
1 package Plagger::Rule::Rating;
2 use strict;
3 use base qw( Plagger::Rule );
4
5 my %ops = (
6     '<'  => sub { $_[0] < $_[1] },
7     '>'  => sub { $_[0] > $_[1] },
8     '<=' => sub { $_[0] <= $_[1] },
9     '>=' => sub { $_[0] >= $_[1] },
10     '!=' => sub { $_[0] != $_[1] },
11     '==' => sub { $_[0] == $_[1] },
12 );
13
14 sub init {
15     my $self = shift;
16
17     my $re = join("|", map quotemeta, keys %ops);
18     $self->{rate} =~ /^($re)\s+(\-?[\d\.]+)\s*$/
19         or Plagger->context->error("Can't parse rate: $self->{rate}");
20
21     my($op, $value) = ($1, $2);
22     $self->{dispatcher} = sub { $ops{$op}->($_[0], $value) };
23 }
24
25 sub dispatch {
26     my($self, $args) = @_;
27
28     my $feed = $args->{feed}
29         or Plagger->context->error("No feed object in this plugin phase");
30
31     my $rate = 0;
32     $rate += $_->rate for $feed->entries;
33
34     Plagger->context->log(debug => "dispatch rate $rate against $self->{rate}");
35     $self->{dispatcher}->($rate);
36 }
37
38 1;
Note: See TracBrowser for help on using the browser.