eqn 1.6.4 → 1.6.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/eqn.gemspec +4 -4
- data/lib/eqn.rb +1 -1
- data/lib/eqn.treetop +4 -4
- data/lib/eqn/calculator.rb +5 -1
- data/lib/eqn/expression.rb +4 -2
- data/lib/eqn/function.rb +1 -0
- data/lib/eqn/terminal.rb +1 -0
- data/lib/eqn/version.rb +1 -1
- metadata +16 -17
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 807944d76a7626f0a7772757f110600324c9fa63c12aaad04ad68c07c162ea90
|
4
|
+
data.tar.gz: 8debccddd120f9acc3523e6ca8b5a0835823d1c9240177751103b5a886fc7971
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4b3efde4aa07b6f310bb23085328186253c2874e1cf91d93cc13dc4289d9a8ea903d38052091a3194fedb8e66af2a74945298009fcf436610a011dfadfe84e8c
|
7
|
+
data.tar.gz: 865205a5958a138849e8e254ce3dcf4145fa10f27d8934a2132e710682919f234f0c021ea6b3b43e08a9f1a7172535cca43d6fa9b8b3066bd08cca4befd24d91
|
data/eqn.gemspec
CHANGED
@@ -27,9 +27,9 @@ Gem::Specification.new do |spec|
|
|
27
27
|
spec.add_development_dependency 'appraisal', '~> 2.2.0'
|
28
28
|
spec.add_development_dependency 'bundler', '>= 1.9'
|
29
29
|
spec.add_development_dependency 'codeclimate-test-reporter', '~> 1.0'
|
30
|
-
spec.add_development_dependency 'rake', '~>
|
31
|
-
spec.add_development_dependency 'rubocop', '~> 0.
|
32
|
-
spec.add_development_dependency 'rubocop-rspec', '~> 1.
|
30
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
31
|
+
spec.add_development_dependency 'rubocop', '~> 0.60'
|
32
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 1.30'
|
33
33
|
spec.add_development_dependency 'rspec', '~> 3.5.0'
|
34
|
-
spec.add_development_dependency 'simplecov', '
|
34
|
+
spec.add_development_dependency 'simplecov', '< 0.18'
|
35
35
|
end
|
data/lib/eqn.rb
CHANGED
@@ -7,4 +7,4 @@ Treetop.load(File.join(__dir__, 'eqn.treetop'))
|
|
7
7
|
require File.join(__dir__, 'eqn', 'eqn_node')
|
8
8
|
|
9
9
|
# Load other eqn classes.
|
10
|
-
Dir.glob
|
10
|
+
Dir.glob(File.join(__dir__, 'eqn', '**', '*.rb')).sort.each(&method(:require))
|
data/lib/eqn.treetop
CHANGED
@@ -40,19 +40,19 @@ grammar Eqn
|
|
40
40
|
end
|
41
41
|
|
42
42
|
rule if_func
|
43
|
-
'if' space? '(' comparation ',' expression ',' expression ')' <Eqn::Function::If>
|
43
|
+
('if' / 'IF') space? '(' comparation ',' expression ',' expression ')' <Eqn::Function::If>
|
44
44
|
end
|
45
45
|
|
46
46
|
rule round_func
|
47
|
-
'round' space? '(' expression round_group? ')' <Eqn::Function::Round>
|
47
|
+
('round' / 'ROUND') space? '(' expression round_group? ')' <Eqn::Function::Round>
|
48
48
|
end
|
49
49
|
|
50
50
|
rule roundup_func
|
51
|
-
'roundup' space? '(' expression round_group? ')' <Eqn::Function::RoundUp>
|
51
|
+
('roundup' / 'ROUNDUP') space? '(' expression round_group? ')' <Eqn::Function::RoundUp>
|
52
52
|
end
|
53
53
|
|
54
54
|
rule rounddown_func
|
55
|
-
'rounddown' space? '(' expression round_group? ')' <Eqn::Function::RoundDown>
|
55
|
+
('rounddown' / 'ROUNDDOWN') space? '(' expression round_group? ')' <Eqn::Function::RoundDown>
|
56
56
|
end
|
57
57
|
|
58
58
|
rule round_group
|
data/lib/eqn/calculator.rb
CHANGED
@@ -27,7 +27,7 @@ module Eqn
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def respond_to_missing?(method, _include_private = false)
|
30
|
-
delegated_method?(method) || match_setter?(method) || match_getter?(method)
|
30
|
+
delegated_method?(method) || match_setter?(method) || match_getter?(method) || super
|
31
31
|
end
|
32
32
|
|
33
33
|
private
|
@@ -39,6 +39,7 @@ module Eqn
|
|
39
39
|
def setter_key(method)
|
40
40
|
match = method.to_s.match(/^[A-Za-z]+=$/)
|
41
41
|
return unless match
|
42
|
+
|
42
43
|
match.to_s.delete('=').to_sym
|
43
44
|
end
|
44
45
|
|
@@ -49,8 +50,10 @@ module Eqn
|
|
49
50
|
def getter_key(method)
|
50
51
|
match = method.to_s.match(/^[A-Za-z]+$/)
|
51
52
|
return if match.nil?
|
53
|
+
|
52
54
|
key = match.to_s.to_sym
|
53
55
|
return unless @vars.key?(key)
|
56
|
+
|
54
57
|
key
|
55
58
|
end
|
56
59
|
|
@@ -62,6 +65,7 @@ module Eqn
|
|
62
65
|
def calculate(equation, vars = {})
|
63
66
|
result = Parser.parse(equation).value(vars)
|
64
67
|
raise ZeroDivisionError if result.is_a?(Float) && (result.abs == Float::INFINITY || result.nan?)
|
68
|
+
|
65
69
|
result
|
66
70
|
end
|
67
71
|
alias calc calculate
|
data/lib/eqn/expression.rb
CHANGED
@@ -19,12 +19,14 @@ module Eqn
|
|
19
19
|
|
20
20
|
def consume_while_left_associative(base, vars)
|
21
21
|
return base unless left_associative?
|
22
|
+
|
22
23
|
base = apply_next_operator(base, vars)
|
23
24
|
consume_while_left_associative(base, vars)
|
24
25
|
end
|
25
26
|
|
26
27
|
def apply_next_operator(base, vars)
|
27
28
|
return base if term?
|
29
|
+
|
28
30
|
left_associative = elements.last.left_associative?
|
29
31
|
op, num_expr = elements.shift.value(vars)
|
30
32
|
if left_associative
|
@@ -34,10 +36,10 @@ module Eqn
|
|
34
36
|
end
|
35
37
|
end
|
36
38
|
|
37
|
-
def apply_left_associative(base, vars,
|
39
|
+
def apply_left_associative(base, vars, operator, num_expr)
|
38
40
|
num_expr_operand = num_expr.elements.shift
|
39
41
|
elements.push(num_expr.elements.shift) unless num_expr.term?
|
40
|
-
base.send(
|
42
|
+
base.send(operator, num_expr_operand.value(vars))
|
41
43
|
end
|
42
44
|
|
43
45
|
# Node class for the operator and latter component of an expression.
|
data/lib/eqn/function.rb
CHANGED
data/lib/eqn/terminal.rb
CHANGED
data/lib/eqn/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: eqn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.6.
|
4
|
+
version: 1.6.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Zach Schneider
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: treetop
|
@@ -72,42 +72,42 @@ dependencies:
|
|
72
72
|
requirements:
|
73
73
|
- - "~>"
|
74
74
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
75
|
+
version: '13.0'
|
76
76
|
type: :development
|
77
77
|
prerelease: false
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
79
79
|
requirements:
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
82
|
+
version: '13.0'
|
83
83
|
- !ruby/object:Gem::Dependency
|
84
84
|
name: rubocop
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
86
86
|
requirements:
|
87
87
|
- - "~>"
|
88
88
|
- !ruby/object:Gem::Version
|
89
|
-
version: '0.
|
89
|
+
version: '0.60'
|
90
90
|
type: :development
|
91
91
|
prerelease: false
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
93
93
|
requirements:
|
94
94
|
- - "~>"
|
95
95
|
- !ruby/object:Gem::Version
|
96
|
-
version: '0.
|
96
|
+
version: '0.60'
|
97
97
|
- !ruby/object:Gem::Dependency
|
98
98
|
name: rubocop-rspec
|
99
99
|
requirement: !ruby/object:Gem::Requirement
|
100
100
|
requirements:
|
101
101
|
- - "~>"
|
102
102
|
- !ruby/object:Gem::Version
|
103
|
-
version: '1.
|
103
|
+
version: '1.30'
|
104
104
|
type: :development
|
105
105
|
prerelease: false
|
106
106
|
version_requirements: !ruby/object:Gem::Requirement
|
107
107
|
requirements:
|
108
108
|
- - "~>"
|
109
109
|
- !ruby/object:Gem::Version
|
110
|
-
version: '1.
|
110
|
+
version: '1.30'
|
111
111
|
- !ruby/object:Gem::Dependency
|
112
112
|
name: rspec
|
113
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,16 +126,16 @@ dependencies:
|
|
126
126
|
name: simplecov
|
127
127
|
requirement: !ruby/object:Gem::Requirement
|
128
128
|
requirements:
|
129
|
-
- - "
|
129
|
+
- - "<"
|
130
130
|
- !ruby/object:Gem::Version
|
131
|
-
version: '0.
|
131
|
+
version: '0.18'
|
132
132
|
type: :development
|
133
133
|
prerelease: false
|
134
134
|
version_requirements: !ruby/object:Gem::Requirement
|
135
135
|
requirements:
|
136
|
-
- - "
|
136
|
+
- - "<"
|
137
137
|
- !ruby/object:Gem::Version
|
138
|
-
version: '0.
|
138
|
+
version: '0.18'
|
139
139
|
description: A gem to evaluate mathematical equations. Includes support for variables
|
140
140
|
and functions.
|
141
141
|
email:
|
@@ -168,7 +168,7 @@ homepage: https://github.com/schneidmaster/eqn
|
|
168
168
|
licenses:
|
169
169
|
- MIT
|
170
170
|
metadata: {}
|
171
|
-
post_install_message:
|
171
|
+
post_install_message:
|
172
172
|
rdoc_options: []
|
173
173
|
require_paths:
|
174
174
|
- lib
|
@@ -183,9 +183,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
183
183
|
- !ruby/object:Gem::Version
|
184
184
|
version: '0'
|
185
185
|
requirements: []
|
186
|
-
|
187
|
-
|
188
|
-
signing_key:
|
186
|
+
rubygems_version: 3.0.3
|
187
|
+
signing_key:
|
189
188
|
specification_version: 4
|
190
189
|
summary: A gem to evaluate mathematical equations.
|
191
190
|
test_files: []
|