|
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; |
|---|