class Noteikumi::RuleConditionValidator
This is a class used by {Rule#satisfies_run_condition?} to create a clean room to evaluate the state conditions in and provides helpers to expose named conditions as methods for use by {Rule#run_when}
@api private
Public Class Methods
Creates a new validator
@param rule [Rule] @return [RuleConditionValidator]
# File lib/noteikumi/rule_condition_validator.rb, line 12 def initialize(rule) @__rule = rule end
Public Instance Methods
Retrieves a named condition from the rule
@param condition [Symbol] the condition name @return [Proc,nil]
# File lib/noteikumi/rule_condition_validator.rb, line 57 def __condition(condition) @__rule.conditions[condition] end
Evaluate a named condition
@param condition [Symbol] the condition name @param args [Array<Object>] arguments to pass to the condition @return [Boolean]
# File lib/noteikumi/rule_condition_validator.rb, line 66 def __evaluate_condition(condition, *args) result = !!__condition(condition).call(*args) @__rule.logger.debug("Condition %s returned %s on %s" % [condition, result.inspect, @__rule]) result end
Determines if the rule has a condition by name
@param condition [Symbol] the condition name @return [Boolean]
# File lib/noteikumi/rule_condition_validator.rb, line 49 def __known_condition?(condition) @__rule.has_condition?(condition) end
Runs the rules run condition
@return [Boolean]
# File lib/noteikumi/rule_condition_validator.rb, line 41 def __should_run? instance_eval(&@__rule.run_condition) end
Checks if this is the first time the rule is being ran
@return [Boolean]
# File lib/noteikumi/rule_condition_validator.rb, line 19 def first_run? @__rule.run_count == 0 end
Provide method access to named based conditions
@see {__evaluate_condition} @return [Boolean] @raise [NoMethodError] for unknown conditions
# File lib/noteikumi/rule_condition_validator.rb, line 77 def method_missing(method, *args, &blk) if __known_condition?(method) __evaluate_condition(method, *args) else super end end
Checks if the state had any past failures
@return [Boolean]
# File lib/noteikumi/rule_condition_validator.rb, line 26 def state_had_failures? @__rule.state.had_failures? end
Checks if a rule with a specific name acted on the state
@param rule [Symbol,Rule] @return [Boolean]
# File lib/noteikumi/rule_condition_validator.rb, line 34 def state_processed_by?(rule) @__rule.state.processed_by?(rule) end