Class: Eqn::Calculator
- Inherits:
-
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, *args) ⇒ Object
16
17
18
19
20
21
22
23
24
25
26
|
# File 'lib/eqn/calculator.rb', line 16
def method_missing(method, *args)
if %i(calculate calc valid?).include?(method)
self.class.send(method, @eqn, @vars)
elsif (match = method.to_s.match(/^[A-Za-z]+=$/))
@vars[match.to_s.delete('=').intern] = args.first
elsif (var = method.to_s.match(/^[A-Za-z]+$/).to_s.intern) && @vars.key?(var)
@vars[var]
else
super
end
end
|
Class Method Details
.calculate(data, vars = {}) ⇒ Object
Also known as:
calc
29
30
31
32
33
34
35
36
37
38
|
# File 'lib/eqn/calculator.rb', line 29
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
41
42
43
44
45
46
|
# File 'lib/eqn/calculator.rb', line 41
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
|