NAME
Rule::Engine - A Rule Engine
SYNOPSIS
use Rule::Engine::Filter;
use Rule::Engine::Rule;
use Rule::Engine::RuleSet;
use Rule::Engine::Session;
my $sess = Rule::Engine::Session->new;
$sess->set_environment('temperature', 65);
# Make a ruleset
my $rs = Rule::Engine::RuleSet->new(
name => 'some-rule',
filter => Rule::Engine::Filter->new(
condition => sub {
# Check something here. Any object that returns true will
# be kept.
shift->happy ? 1 : 0
}
)
);
# Make a rule to add to the set. This rule's condition will be executed
# for each object. If it returns a true value then the action will be
# executed for each object.
my $rule = Rule::Engine::Rule->new(
name => 'temperature',
action => sub {
my ($env, $obj) = @_;
$obj->happy(1);
},
condition => sub {
my ($env, $obj) = @_;
return $foo->favorite_temp == $env->get_environment('temperature');
}
);
# Add the rule
$rs->add_rule($rule);
# Add the ruleset to the session
$sess->add_ruleset($rs->name, $rs);
# Execute the rule, getting back an arrayref of objects that passed the
# filter after running through all the rules whose conditions were met
my $results = $sess->execute('some-rule', \@list_of_objects);
AUTHOR
Cory G Watson, "<gphat at cpan.org>"
ACKNOWLEDGEMENTS
COPYRIGHT & LICENSE
Copyright 2010 Cory G Watson.
This program is free software; you can redistribute it and/or modify it
under the terms of either: the GNU General Public License as published
by the Free Software Foundation; or the Artistic License.
See http://dev.perl.org/licenses/ for more information.