dentaku 0.1.1 → 0.1.2
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.
- data/README.md +17 -0
- data/lib/dentaku/evaluator.rb +4 -4
- data/lib/dentaku/version.rb +1 -1
- data/spec/calculator_spec.rb +2 -1
- metadata +33 -54
data/README.md
CHANGED
@@ -36,6 +36,23 @@ evaluate expressions against those stored values:
|
|
36
36
|
|
37
37
|
For maximum CS geekery, `bind` is an alias of `store`.
|
38
38
|
|
39
|
+
Dentaku understands precedence order and using parentheses to group expressions
|
40
|
+
to ensure proper evaluation:
|
41
|
+
|
42
|
+
calculator.evaluate('5 + 3 * 2')
|
43
|
+
=> 11
|
44
|
+
calculator.evaluate('(5 + 3) * 2')
|
45
|
+
=> 16
|
46
|
+
|
47
|
+
A number of functions are also supported. Okay, the number is currently one,
|
48
|
+
but more will be added soon. The current function is `if`, which works like
|
49
|
+
Excel's `if`:
|
50
|
+
|
51
|
+
calculator.evaluate('if (pears < 10, 10, 20)', :pears => 5)
|
52
|
+
=> 10
|
53
|
+
calculator.evaluate('if (pears < 10, 10, 20)', :pears => 15)
|
54
|
+
=> 20
|
55
|
+
|
39
56
|
If you're too lazy to be building calculator objects, there's a shortcut just
|
40
57
|
for you:
|
41
58
|
|
data/lib/dentaku/evaluator.rb
CHANGED
@@ -100,12 +100,12 @@ module Dentaku
|
|
100
100
|
end
|
101
101
|
|
102
102
|
def if(*args)
|
103
|
-
_, open,
|
103
|
+
_, open, condition, _, true_value, _, false_value, close = args
|
104
104
|
|
105
|
-
if
|
106
|
-
|
105
|
+
if condition.value
|
106
|
+
true_value
|
107
107
|
else
|
108
|
-
|
108
|
+
false_value
|
109
109
|
end
|
110
110
|
end
|
111
111
|
end
|
data/lib/dentaku/version.rb
CHANGED
data/spec/calculator_spec.rb
CHANGED
@@ -52,7 +52,8 @@ describe Dentaku::Calculator do
|
|
52
52
|
|
53
53
|
describe 'functions' do
|
54
54
|
it 'should include IF' do
|
55
|
-
calculator.evaluate('if (foo <
|
55
|
+
calculator.evaluate('if (foo < 8, 10, 20)', :foo => 2).should eq(10)
|
56
|
+
calculator.evaluate('if (foo < 8, 10, 20)', :foo => 9).should eq(20)
|
56
57
|
end
|
57
58
|
end
|
58
59
|
end
|
metadata
CHANGED
@@ -1,47 +1,36 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: dentaku
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 1
|
10
|
-
version: 0.1.1
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.2
|
5
|
+
prerelease:
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Solomon White
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-01-25 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
22
15
|
name: rspec
|
23
|
-
|
24
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70323614305400 !ruby/object:Gem::Requirement
|
25
17
|
none: false
|
26
|
-
requirements:
|
27
|
-
- -
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
|
30
|
-
segments:
|
31
|
-
- 0
|
32
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
33
22
|
type: :development
|
34
|
-
|
35
|
-
|
36
|
-
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70323614305400
|
25
|
+
description: ! ' Dentaku is a parser and evaluator for mathematical formulas
|
26
|
+
|
27
|
+
'
|
28
|
+
email:
|
37
29
|
- rubysolo@gmail.com
|
38
30
|
executables: []
|
39
|
-
|
40
31
|
extensions: []
|
41
|
-
|
42
32
|
extra_rdoc_files: []
|
43
|
-
|
44
|
-
files:
|
33
|
+
files:
|
45
34
|
- .gitignore
|
46
35
|
- Gemfile
|
47
36
|
- README.md
|
@@ -62,41 +51,31 @@ files:
|
|
62
51
|
- spec/token_scanner_spec.rb
|
63
52
|
- spec/token_spec.rb
|
64
53
|
- spec/tokenizer_spec.rb
|
65
|
-
has_rdoc: true
|
66
54
|
homepage: http://github.com/rubysolo/dentaku
|
67
55
|
licenses: []
|
68
|
-
|
69
56
|
post_install_message:
|
70
57
|
rdoc_options: []
|
71
|
-
|
72
|
-
require_paths:
|
58
|
+
require_paths:
|
73
59
|
- lib
|
74
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
75
61
|
none: false
|
76
|
-
requirements:
|
77
|
-
- -
|
78
|
-
- !ruby/object:Gem::Version
|
79
|
-
|
80
|
-
|
81
|
-
- 0
|
82
|
-
version: "0"
|
83
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
66
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
84
67
|
none: false
|
85
|
-
requirements:
|
86
|
-
- -
|
87
|
-
- !ruby/object:Gem::Version
|
88
|
-
|
89
|
-
segments:
|
90
|
-
- 0
|
91
|
-
version: "0"
|
68
|
+
requirements:
|
69
|
+
- - ! '>='
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: '0'
|
92
72
|
requirements: []
|
93
|
-
|
94
73
|
rubyforge_project: dentaku
|
95
|
-
rubygems_version: 1.
|
74
|
+
rubygems_version: 1.8.10
|
96
75
|
signing_key:
|
97
76
|
specification_version: 3
|
98
77
|
summary: A formula language parser and evaluator
|
99
|
-
test_files:
|
78
|
+
test_files:
|
100
79
|
- spec/calculator_spec.rb
|
101
80
|
- spec/dentaku_spec.rb
|
102
81
|
- spec/evaluator_spec.rb
|