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

new(rule) click to toggle source

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

__condition(condition) click to toggle source

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_condition(condition, *args) click to toggle source

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
__known_condition?(condition) click to toggle source

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
__should_run?() click to toggle source

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
first_run?() click to toggle source

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
method_missing(method, *args, &blk) click to toggle source

Provide method access to named based conditions

@see {__evaluate_condition} @return [Boolean] @raise [NoMethodError] for unknown conditions

Calls superclass method
# 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
state_had_failures?() click to toggle source

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
state_processed_by?(rule) click to toggle source

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