Class: Benedictus::ExpressionEvaluator

Inherits:
Object
  • Object
show all
Defined in:
lib/benedictus/expression_evaluator.rb

Constant Summary collapse

EVAL_ERRORS =
[NameError, NoMethodError, SyntaxError, LoadError].freeze

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expression) ⇒ ExpressionEvaluator

Returns a new instance of ExpressionEvaluator.



11
12
13
# File 'lib/benedictus/expression_evaluator.rb', line 11

def initialize(expression)
  @expression = expression
end

Class Method Details

.call(expression) ⇒ Object



7
8
9
# File 'lib/benedictus/expression_evaluator.rb', line 7

def self.call(expression)
  new(expression).call
end

Instance Method Details

#callObject



15
16
17
18
19
20
21
22
# File 'lib/benedictus/expression_evaluator.rb', line 15

def call
  raise Benedictus::EvaluationError, "Expression is empty" if @expression.to_s.strip.empty?

  eval(@expression, TOPLEVEL_BINDING, "(benedictus)")
rescue *EVAL_ERRORS => e
  raise Benedictus::EvaluationError,
        "Failed to evaluate expression `#{@expression}`: #{e.class}: #{e.message}"
end