class Functio::Expression

Represents a mathematical expression.

Attributes

calculator[R]

The calculator instance used for expression evaluation.

expression[R]

String representation of Expression instance.

Public Class Methods

new(expression) click to toggle source

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

# 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

Public Instance Methods

evaluate(variables = {}) click to toggle source

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.

# File lib/functio/expression.rb, line 50
def evaluate(variables = {})
  calculator.evaluate(expression, variables)
rescue Dentaku::ZeroDivisionError
  raise DivisionByZeroError
end
variables() click to toggle source

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

# File lib/functio/expression.rb, line 57
def variables
  calculator.dependencies(expression)
end