Class: Functio::Expression
- Inherits:
-
Object
- Object
- Functio::Expression
- Defined in:
- lib/functio/expression.rb
Overview
Represents a mathematical expression.
Instance Attribute Summary collapse
-
#calculator ⇒ Object
readonly
The calculator instance used for expression evaluation.
-
#expression ⇒ Object
readonly
String representation of Expression instance.
Instance Method Summary collapse
-
#evaluate(variables = {}) ⇒ Object
Evaluates the expression passing in its
variablesin a Hash which keys are the variables names and values the variables values. -
#initialize(expression) ⇒ Expression
constructor
Constructs an Expression instance passing in an
expressionString. -
#variables ⇒ Object
Returns the variables of the expression in an Array of Strings.
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
#calculator ⇒ Object (readonly)
The calculator instance used for expression evaluation.
30 31 32 |
# File 'lib/functio/expression.rb', line 30 def calculator @calculator end |
#expression ⇒ Object (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 |
#variables ⇒ Object
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 |