Class: Rules::Rule

Inherits:
ActiveRecord::Base
  • Object
show all
Defined in:
lib/rules/rule.rb

Instance Method Summary collapse

Instance Method Details

#evaluate(attributes = {}) ⇒ Object



20
21
22
23
24
# File 'lib/rules/rule.rb', line 20

def evaluate(attributes = {})
  lhv = lhs_parameter_value(attributes)
  rhv = rhs_parameter_value(attributes) if evaluator.requires_rhs?
  evaluator.evaluate(lhv, rhv)
end

#evaluatorObject



26
27
28
# File 'lib/rules/rule.rb', line 26

def evaluator
  @evaluator ||= evaluator_key ? Evaluators.list[evaluator_key.to_sym] : nil
end

#evaluator_keyObject



38
39
40
# File 'lib/rules/rule.rb', line 38

def evaluator_key
  key_from_store :evaluator_key
end

#lhs_parameterObject



59
60
61
# File 'lib/rules/rule.rb', line 59

def lhs_parameter
  @lhs_parameter ||= lhs_parameter_key ? parameter_from_key(lhs_parameter_key) : nil
end

#lhs_parameter_keyObject



30
31
32
# File 'lib/rules/rule.rb', line 30

def lhs_parameter_key
  key_from_store :lhs_parameter_key
end

#lhs_parameter_value(attributes = {}) ⇒ Object



42
43
44
# File 'lib/rules/rule.rb', line 42

def lhs_parameter_value(attributes = {})
  lhs_parameter.try(:evaluate, attributes)
end

#requires_rhs?Boolean

Returns:

  • (Boolean)


71
72
73
# File 'lib/rules/rule.rb', line 71

def requires_rhs?
  evaluator ? evaluator.requires_rhs? : false
end

#rhs_parameterObject



55
56
57
# File 'lib/rules/rule.rb', line 55

def rhs_parameter
  rhs_parameter_key ? parameter_from_key(rhs_parameter_key) : rhs_parameter_raw
end

#rhs_parameter_keyObject



34
35
36
# File 'lib/rules/rule.rb', line 34

def rhs_parameter_key
  key_from_store :rhs_parameter_key
end

#rhs_parameter_value(attributes = {}) ⇒ Object



46
47
48
49
50
51
52
53
# File 'lib/rules/rule.rb', line 46

def rhs_parameter_value(attributes = {})
  if rhs_parameter.respond_to?(:evaluate)
    rhs_parameter.try(:evaluate, attributes)
  else
    rhv = Parameters::Parameter.cast(rhs_parameter_raw, lhs_parameter.try(:type))
    Parameters::Parameter.cast(rhv, evaluator.try(:type_for_rhs))
  end
end

#rule_setObject



75
76
77
# File 'lib/rules/rule.rb', line 75

def rule_set
  super || ObjectSpace.each_object(RuleSet).detect { |rs| rs.rules.include?(self) }
end

#valid_attributesObject



67
68
69
# File 'lib/rules/rule.rb', line 67

def valid_attributes
  rule_set ? rule_set.attributes : {}
end

#valid_parameter_keysObject



63
64
65
# File 'lib/rules/rule.rb', line 63

def valid_parameter_keys
  Parameters.constants.keys.map(&:to_s) + valid_attributes.keys.map(&:to_s)
end