Class: Functio::Expression

Inherits:
Object
  • Object
show all
Defined in:
lib/functio/expression.rb

Overview

Represents a mathematical expression.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(expression) ⇒ Expression

Constructs an Expression instance passing in an expression String. Raises InvalidExpressionError if expression is invalid. Raises DivisionByZeroError if expression contains a division by zero.



35
36
37
38
39
40
41
42
43
44
# File 'lib/functio/expression.rb', line 35

def initialize(expression)
  raise RuntimeError if expression.strip.empty?
  @calculator = Dentaku::Calculator.new
  calculator.evaluate(expression)
  @expression = expression
rescue Dentaku::ParseError, RuntimeError
  raise InvalidExpressionError, 'invalid expression'
rescue Dentaku::ZeroDivisionError
  raise DivisionByZeroError
end

Instance Attribute Details

#calculatorObject (readonly)

The calculator instance used for expression evaluation.



30
31
32
# File 'lib/functio/expression.rb', line 30

def calculator
  @calculator
end

#expressionObject (readonly)

String representation of Expression instance.



27
28
29
# File 'lib/functio/expression.rb', line 27

def expression
  @expression
end

Instance Method Details

#evaluate(variables = {}) ⇒ Object

Evaluates the expression passing in its variables in a Hash which keys are the variables names and values the variables values. Raises DivisionByZeroError if a division by zero occurs. Returns nil if no value is provided in variables for some of the expression variables.



50
51
52
53
54
# File 'lib/functio/expression.rb', line 50

def evaluate(variables = {})
  calculator.evaluate(expression, variables)
rescue Dentaku::ZeroDivisionError
  raise DivisionByZeroError
end

#variablesObject

Returns the variables of the expression in an Array of Strings.



57
58
59
# File 'lib/functio/expression.rb', line 57

def variables
  calculator.dependencies(expression)
end