1package Plagger::Rule::EntryTag; 2use strict; 3use base qw( Plagger::Rule ); 4 5use Plagger::Operator; 6use Plagger::Tag; 7 8sub init { 9 my $self = shift; 10 11 unless (ref($self->{tag})) { 12 $self->{tag} = [ Plagger::Tag->parse($self->{tag}) ]; 13 } 14 15 $self->{op} ||= 'AND'; 16 17 unless (Plagger::Operator->is_valid_op($self->{op})) { 18 Plagger->context->error("Unsupported operator $self->{op}"); 19 } 20} 21 22sub id { 23 my $self = shift; 24 return "tag:" . join '+', @{$self->{tag}}; 25} 26 27sub as_title { 28 my $self = shift; 29 return "tagged with " . join(" $self->{op} ", map "'$_'", @{$self->{tag}}); 30} 31 32sub dispatch { 33 my($self, $args) = @_; 34 35 my $entry = $args->{entry} 36 or Plagger->context->error("No entry object in this plugin phase"); 37 38 my @bool; 39 for my $want (@{$self->{tag}}) { 40 push @bool, $entry->has_tag($want); 41 } 42 43 Plagger::Operator->call($self->{op}, @bool); 44} 45 461; 47