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



18
19
20
21
22
# File 'lib/rules/rule.rb', line 18

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

#evaluatorObject



24
25
26
# File 'lib/rules/rule.rb', line 24

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

#evaluator_keyObject



36
37
38
# File 'lib/rules/rule.rb', line 36

def evaluator_key
  key_from_store :evaluator_key
end

#lhs_parameterObject



57
58
59
# File 'lib/rules/rule.rb', line 57

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

#lhs_parameter_keyObject



28
29
30
# File 'lib/rules/rule.rb', line 28

def lhs_parameter_key
  key_from_store :lhs_parameter_key
end

#lhs_parameter_value(attributes = {}) ⇒ Object



40
41
42
# File 'lib/rules/rule.rb', line 40

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

#requires_rhs?Boolean

Returns:

  • (Boolean)


69
70
71
# File 'lib/rules/rule.rb', line 69

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

#rhs_parameterObject



53
54
55
# File 'lib/rules/rule.rb', line 53

def rhs_parameter
  rhs_parameter_key ? parameter_from_key(rhs_parameter_key) : rhs_parameter_raw
end

#rhs_parameter_keyObject



32
33
34
# File 'lib/rules/rule.rb', line 32

def rhs_parameter_key
  key_from_store :rhs_parameter_key
end

#rhs_parameter_value(attributes = {}) ⇒ Object



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

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



73
74
75
# File 'lib/rules/rule.rb', line 73

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

#valid_attributesObject



65
66
67
# File 'lib/rules/rule.rb', line 65

def valid_attributes
  rule_set ? rule_set.attributes : {}
end

#valid_parameter_keysObject



61
62
63
# File 'lib/rules/rule.rb', line 61

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