Changeset 46
- Timestamp:
- 02/08/06 16:14:17
- Files:
-
- trunk/plagger/lib/Plagger/Plugin.pm (modified) (2 diffs)
- trunk/plagger/lib/Plagger/Rule/Compound.pm (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/plagger/lib/Plagger/Plugin.pm
r7 r46 10 10 conf => $opt->{config} || {}, 11 11 rule => $opt->{rule}, 12 rule_op => $opt->{rule_op} || 'AND', 12 13 stash => {}, 13 14 }, $class; … … 20 21 if (my $rule = $self->{rule}) { 21 22 $rule = [ $rule ] if ref($rule) eq 'HASH'; 22 $self->{rule} = Plagger::Rule::Compound->new(@$rule); 23 my $op = $self->{rule_op}; 24 $self->{rule} = Plagger::Rule::Compound->new($op, @$rule); 23 25 } else { 24 26 $self->{rule} = Plagger::Rule->new({ module => 'Always' }); trunk/plagger/lib/Plagger/Rule/Compound.pm
r36 r46 2 2 use strict; 3 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] }, 0 ], 10 NAND => [ sub { $_[0] && $_[1] }, 1 ], 11 NOR => [ sub { $_[0] || $_[1] }, 1 ], 12 ); 13 4 14 sub new { 5 my($class, @rules) = @_; 15 my($class, $op, @rules) = @_; 16 my $ops_sub = $Ops{uc($op)} 17 or Plagger->context->error("operator $op not supported"); 18 6 19 bless { 20 ops_sub => $ops_sub->[0], 21 ops_not => $ops_sub->[1], 7 22 rules => [ map Plagger::Rule->new($_), @rules ], 8 23 }, $class; … … 12 27 my($self, $args) = @_; 13 28 14 my $bool = 1;29 my @bool; 15 30 for my $rule (@{ $self->{rules} }) { 16 $bool = 0 unless $rule->dispatch($args); # AND mode31 push @bool, ($rule->dispatch($args) ? 1 : 0); 17 32 } 18 33 34 my $bool = reduce { $self->{ops_sub}->($a, $b) } @bool; 35 $bool = !$bool if $self->{ops_not}; 19 36 $bool; 20 37 }
