| VS-RuleEngine documentation | Contained in the VS-RuleEngine distribution. |
VS::RuleEngine::Rule::InputOverThreshold - Generic rule for checking input thresholds
use VS::RuleEngine::Declare;
my $engine = engine {
rule 'valid_name' => instanceof "VS::RuleEngine::Rule::InputOverThreshold" => with_args {
'input_1' => 5,
'input_2' => -5,
}
}
This is a generic rule that checks if the value from an input is equal or passes a threshold relative to 0. This can be used to model change matrices where a row represets a rule.
The following table shows the conditions when it matches
Input | Threshold | Result ------+-----------+------- x | 0 | match >= y | y > 0 | match >= y | y < 0 | no match <= y | y < 0 | match <= y | y > 0 | no match
This rule expects a hash reference as its argument, which is what with_args provides,
where the key is the name of an input and the value is the expected threshold value.
| VS-RuleEngine documentation | Contained in the VS-RuleEngine distribution. |
package VS::RuleEngine::Rule::InputOverThreshold; use strict; use warnings; use VS::RuleEngine::Constants; use base qw(VS::RuleEngine::Rule); sub new { my ($pkg, %args) = @_; my $self = bless { %args }, $pkg; return $self; } sub evaluate { my ($self, $input) = @_; # If we have nothing to match aginst it's a no match return KV_NO_MATCH unless %{$self}; # The order we evaulate each change in is not relevant for my $key (keys %{$self}) { my $v1 = $input->get($key) || 0; if (!$v1) { return KV_NO_MATCH; } my $change = $self->{$key}; if ($change && ($v1 / $change) < 1) { return KV_NO_MATCH; } } # All thresholds passed therefore we have a match return KV_MATCH; } 1;