Class: Eqn::Calculator

Inherits:
Object
  • Object
show all
Defined in:
lib/eqn/calculator.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(eqn, vars = {}) ⇒ Calculator

Returns a new instance of Calculator.



3
4
5
6
# File 'lib/eqn/calculator.rb', line 3

def initialize(eqn, vars = {})
  @eqn = eqn
  @vars = vars
end

Dynamic Method Handling

This class handles dynamic methods through the method_missing method

#method_missing(method) ⇒ Object



16
17
18
19
# File 'lib/eqn/calculator.rb', line 16

def method_missing(method)
  super unless i(calculate calc valid?).include?(method)
  self.class.send(method, @eqn, @vars)
end

Class Method Details

.calculate(data, vars = {}) ⇒ Object Also known as: calc



22
23
24
25
26
27
28
29
30
31
# File 'lib/eqn/calculator.rb', line 22

def calculate(data, vars = {})
  @@vars = vars
  begin
    result = Parser.parse(data).value
    raise ZeroDivisionError if result.is_a?(Float) && (result.abs == Float::INFINITY || result.nan?)
    result
  ensure
    @@vars = nil
  end
end

.valid?(data, vars = {}) ⇒ Boolean

Returns:

  • (Boolean)


34
35
36
37
38
39
# File 'lib/eqn/calculator.rb', line 34

def valid?(data, vars = {})
  calc(data, vars)
  true
rescue EqnError
  false
end

Instance Method Details

#set(key_or_hash, value = nil) ⇒ Object



8
9
10
11
12
13
14
# File 'lib/eqn/calculator.rb', line 8

def set(key_or_hash, value = nil)
  if key_or_hash.is_a?(Hash)
    @vars.merge!(key_or_hash)
  else
    @vars[key_or_hash.intern] = value
  end
end