Class: Swarm::ExpressionEvaluator

Inherits:
Object
  • Object
show all
Extended by:
Forwardable
Defined in:
lib/swarm/evaluation/expression_evaluator.rb

Defined Under Namespace

Classes: InvalidExpressionError, UndefinedExpressionVariableError

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expression) ⇒ ExpressionEvaluator

Returns a new instance of ExpressionEvaluator.



16
17
18
# File 'lib/swarm/evaluation/expression_evaluator.rb', line 16

def initialize(expression)
  @expression = expression
end

Instance Attribute Details

#expressionObject (readonly)

Returns the value of attribute expression.



12
13
14
# File 'lib/swarm/evaluation/expression_evaluator.rb', line 12

def expression
  @expression
end

Instance Method Details

#all_conditions_met?Boolean

Returns:

  • (Boolean)


28
29
30
31
32
# File 'lib/swarm/evaluation/expression_evaluator.rb', line 28

def all_conditions_met?
  conditions.all? { |type, condition|
    check_condition(type, condition)
  }
end

#check_condition(type, condition) ⇒ Object



34
35
36
37
38
39
40
41
# File 'lib/swarm/evaluation/expression_evaluator.rb', line 34

def check_condition(type, condition)
  unless %w[if unless].include?(type)
    raise ArgumentError, "Not a conditional"
  end

  result = evaluate_condition(condition)
  type == "if" ? result : !result
end

#conditionsObject



43
44
45
# File 'lib/swarm/evaluation/expression_evaluator.rb', line 43

def conditions
  arguments.slice("if", "unless")
end

#evaluate_condition(string) ⇒ Object



20
21
22
23
24
25
26
# File 'lib/swarm/evaluation/expression_evaluator.rb', line 20

def evaluate_condition(string)
  Dentaku.evaluate!(string, workitem)
rescue Dentaku::UnboundVariableError => e
  raise UndefinedExpressionVariableError, e
rescue Dentaku::Error => e
  raise InvalidExpressionError, e
end