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.