package VS::RuleEngine::Engine; use strict; use warnings; use Carp qw(croak); use Scalar::Util qw(blessed); use VS::RuleEngine::Constants; use VS::RuleEngine::Data; use VS::RuleEngine::Util qw(is_valid_package_name); use VS::RuleEngine::Runloop; use VS::RuleEngine::Engine::Actions; use VS::RuleEngine::Engine::Defaults; use VS::RuleEngine::Engine::Hooks; use VS::RuleEngine::Engine::Inputs; use VS::RuleEngine::Engine::Outputs; use VS::RuleEngine::Engine::Rules; use Object::Tiny qw( _actions _defaults _hooks _inputs _outputs _post_hooks _pre_hooks _rules _rule_actions _rule_order ); sub new { my $pkg = shift; my $self = bless { _actions => VS::RuleEngine::Data->new(), _defaults => VS::RuleEngine::Data->new(), _hooks => VS::RuleEngine::Data->new(), _inputs => VS::RuleEngine::Data->new(), _outputs => VS::RuleEngine::Data->new(), _post_hooks => [], _pre_hooks => [], _rules => VS::RuleEngine::Data->new(), _rule_actions => VS::RuleEngine::Data->new(), _rule_order => [], }, $pkg; return $self; } sub run { my $self = shift; my $global = shift; my $runloop = VS::RuleEngine::Runloop->new(); $runloop->add_engine($self, $global); $runloop->run(); } 1; __END__ =head1 NAME VS::RuleEngine::Engine - Engine declaration =head1 SYNOPSIS use VS::RuleEngine::Engine; my $engine = VS::RuleEngine::Engine->new(); $engine->add_hook(hook1 => "MyApp::GetMoreData"); $engine->add_rule(rule1 => "MyApp::Rule"); $engine->add_action(action1 => "MyApp::Action"); $engine->add_rule_action(rule1 => "action1"); $engine->run(); =head1 DESCRIPTION This class defines a VS::RuleEngine "engine". Altho it is possible using this class directly it is more readable using the declarative interface in L or loading engines using an engine loader class (which is currently not available). =head1 INTERFACE =head2 CLASS METHODS =over 4 =item new Creates a new engine. =back =head2 INSTANCE METHODS =over 4 =item run ( $work_callback ) Runs the engine. =back =head3 Defaults =over 4 =item defaults Returns the names of all default sets. =item has_defaults ( NAME ) Checks if the engine has a default set named I. =item get_defaults ( NAME ) Returns a hash reference with the key/value pairs for the default named I. =item add_defaults ( NAME => DEFAULT ) Registers the hash reference I as I. =back =head3 Actions =over 4 =item actions Returns the names of all registered actions. =item has_action ( NAME ) Checks if the engine has a registered action with the given I. =item add_action ( NAME => ACTION [, DEFAULTS, arguments ... ] ) Registers the I as I in the engine with arguments provided by default argument sets referenced by name in the array reference I and additional arguments. =back =head3 Hooks =over 4 =item hooks Returns the names of all registered hooks. =item has_hook ( NAME ) Checks if the engine has a registered hook with the given I. =item add_hook ( NAME => HOOK [, DEFAULTS, arguments ... ] ) Registers the I as I in the engine with arguments provided by default argument sets referenced by name in the array reference I and additional arguments. =item add_pre_hook ( NAME ) Adds the hook with the given I to the list of hooks to run before each iteration. =item add_post_hook ( NAME ) Adds the hook with the given I to the list of hooks to run after each iteration. =back =head3 Inputs =over 4 =item inputs Returns the names of all registered inputs =item has_input ( NAME ) Checks if the engine has a registered input with the given I. =item add_input ( NAME => INPUT [, DEFAULTS, arguments ... ] ) Registers the I as I in the engine with arguments provided by default argument sets referenced by name in the array reference I and additional arguments. =back =head3 Outputs =over 4 =item outputs Returns the names of all registered outputs =item has_output ( NAME ) Checks if the engine has a registered output with the given I. =item add_output ( NAME => OUTPUT [, DEFAULTS, arguments ... ] ) Registers the I as I in the engine with arguments provided by default argument sets referenced by name in the array reference I and additional arguments. =back =head3 Rules =over 4 =item rules Returns the names of all registered rules =item has_rule ( NAME ) Checks if the engine has a registered rule with the given I. =item add_rule ( NAME => OUTPUT [, DEFAULTS, arguments ... ] ) Registers the I as I in the engine with arguments provided by default argument sets referenced by name in the array reference I and additional arguments. =item add_rule_action ( NAME => ACTION ) Connects the rule I to the action I. =item rule_order Returns a list of names matching the rules in the order they'll be evaluated. =item set_rule_order ( LIST ) Sets which order the rules should be evaluated. The list should be the names of the rules. =back =cut