Changeset 54

Show
Ignore:
Timestamp:
02/08/06 19:41:08
Author:
miyagawa
Message:
  • Added update.fixup phase to do splicing across updates
  • Added Splice::Tag sample to aggregate entries based on specific tags
  • Added Plagger::Operator utility module (refs #23)
  • Added $feed->id stub (refs #16)
  • Added $entry->has_tag method
Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/plagger/config.yaml.sample

    r44 r54  
    2323      url: http://example.com/mySubscription.opml 
    2424 
    25 - module: Subscription::Config 
     25  - module: Subscription::Config 
    2626    config: 
    2727      feed: 
     
    3030 
    3131  - module: Aggregator::Simple 
     32 
     33  - module: Splice::Tag 
     34    config: 
     35      tag: perl tech 
     36      op: OR 
     37      id: perl-tech 
    3238 
    3339  - module: Filter::URLBL 
  • trunk/plagger/lib/Plagger.pm

    r51 r54  
    108108    } 
    109109 
     110    $self->run_hook('update.fixup'); 
     111 
    110112    for my $feed ($self->update->feeds) { 
    111113        for my $entry ($feed->entries) { 
  • trunk/plagger/lib/Plagger/Entry.pm

    r7 r54  
    1010    my $class = shift; 
    1111    bless { 
    12         rate   => 0, 
     12        rate    => 0, 
    1313        widgets => [], 
     14        tags    => [], 
    1415    }, $class; 
    1516} 
     
    3536} 
    3637 
     38sub has_tag { 
     39    my($self, $want_tag) = @_; 
     40    for my $tag (@{$self->tags}) { 
     41        return 1 if $tag eq $want_tag; 
     42    } 
     43    return 0; 
     44} 
     45 
    37461; 
    3847 
  • trunk/plagger/lib/Plagger/Feed.pm

    r20 r54  
    44use base qw( Class::Accessor::Fast ); 
    55__PACKAGE__->mk_accessors(qw( link url image description language author updated tags stash type )); 
     6 
     7use Digest::MD5 qw(md5_hex); 
    68 
    79sub new { 
     
    4042} 
    4143 
     44sub id { 
     45    my $self = shift; 
     46    $self->{id} = shift if @_; 
     47    $self->{id} || Digest::MD5::md5_hex($self->url); 
     48} 
     49 
    42501; 
  • trunk/plagger/lib/Plagger/Rules.pm

    r52 r54  
    11package Plagger::Rules; 
    22use strict; 
    3  
    4 use List::Util qw(reduce); 
    5  
    6 our %Ops = ( 
    7     AND  => [ sub { $_[0] && $_[1] } ], 
    8     OR   => [ sub { $_[0] || $_[1] } ], 
    9     XOR  => [ sub { $_[0] xor $_[1] } ], 
    10     NAND => [ sub { $_[0] && $_[1] }, 1 ], 
    11     NOR  => [ sub { $_[0] || $_[1] }, 1 ], 
    12 ); 
     3use Plagger::Operator; 
    134 
    145sub new { 
    156    my($class, $op, @rules) = @_; 
    16     my $ops_sub = $Ops{uc($op)} 
     7    Plagger::Operator->is_valid_op(uc($op)) 
    178        or Plagger->context->error("operator $op not supported"); 
    189 
    1910    bless { 
    20         ops_sub => $ops_sub->[0], 
    21         ops_not => $ops_sub->[1], 
     11        op => uc($op), 
    2212        rules => [ map Plagger::Rule->new($_), @rules ], 
    2313    }, $class; 
     
    3626    return 1 unless @bool; 
    3727 
    38     my $bool = reduce { $self->{ops_sub}->($a, $b) } @bool; 
    39     $bool = !$bool if $self->{ops_not}; 
    40     $bool; 
     28    Plagger::Operator->call($self->{op}, @bool); 
    4129} 
    4230