expressive 0.0.23 → 0.0.24
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +1 -1
- data/lib/expressive.rb +1 -1
- data/lib/expressive/version.rb +1 -1
- data/lib/scope.rb +4 -2
- data/spec/expressive_spec.rb +55 -1
- metadata +4 -4
data/Gemfile.lock
CHANGED
data/lib/expressive.rb
CHANGED
@@ -20,7 +20,7 @@ module Expressive
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def self.all_symbols
|
23
|
-
%w(+ - * / = set sum post >= > < <= and or if date get put lookup $lookup $head $tail $reverse round $round $days_ago $hours_ago $minutes_ago $append $id)
|
23
|
+
%w(+ - * / = set sum $sub post >= > < <= and or if date get put lookup $lookup $head $tail $reverse round $round $days_ago $hours_ago $minutes_ago $append $id)
|
24
24
|
end
|
25
25
|
|
26
26
|
module Boolean
|
data/lib/expressive/version.rb
CHANGED
data/lib/scope.rb
CHANGED
@@ -126,8 +126,10 @@ module Expressive
|
|
126
126
|
define('<=') {|a,b| a.to_f <= b.to_f }
|
127
127
|
define('and') {|a,b| !!a && !!b }
|
128
128
|
define('or') {|a,b| !!a || !!b }
|
129
|
-
define('sum') {
|
130
|
-
define('
|
129
|
+
define('sum') {|*args| args.flatten.map(&:to_f).reduce(:+) || 0 }
|
130
|
+
define('$sum') {|*args| args.flatten.map(&:to_f).reduce(:+) || 0 }
|
131
|
+
define('sub') {|*args| result = args.flatten.map(&:to_f).reduce(:-) || 0 }
|
132
|
+
define('if') {|*args| args.compact!; args[0] ? args[1] : args[2] }
|
131
133
|
define('$days_ago'){|*args| Time.now - args[0].to_i * 86400 }
|
132
134
|
define('$hours_ago'){|*args| Time.now - args[0].to_i * 3600 }
|
133
135
|
define('$minutes_ago'){|*args| Time.now - args[0].to_i * 60 }
|
data/spec/expressive_spec.rb
CHANGED
@@ -6,7 +6,7 @@ describe "Expressive" do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
describe "all_symbols" do
|
9
|
-
it { Expressive.all_symbols.should =~ %w(+ - * / = set sum get put post >= > < <= and or if date lookup round $round $days_ago $hours_ago $minutes_ago $append $id $head $lookup $reverse $tail) }
|
9
|
+
it { Expressive.all_symbols.should =~ %w(+ - * / = set sum $sub get put post >= > < <= and or if date lookup round $round $days_ago $hours_ago $minutes_ago $append $id $head $lookup $reverse $tail) }
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "understands booleans" do
|
@@ -37,6 +37,7 @@ describe "Expressive" do
|
|
37
37
|
it { Expressive.run("(* 4 2)").should eql 8.0 }
|
38
38
|
it { Expressive.run("(/ 4 2)").should eql 2.0 }
|
39
39
|
it { Expressive.run("(sum 1 2 3)").should eql 6.0 }
|
40
|
+
it { Expressive.run("(sub 1 2 3)").should eql -4.0 }
|
40
41
|
it { Expressive.run("(sum )").should eql 0 }
|
41
42
|
it { Expressive.run("(- (sum 1 5 7) 3)").should eql 10.0}
|
42
43
|
it { Expressive.run("(round 0.12345 2)").should eql 0.12}
|
@@ -79,6 +80,59 @@ describe "Expressive" do
|
|
79
80
|
it { Expressive.run('(if (<= nil_value 4) "greater" "not so greater")', @scope).should eql "greater" }
|
80
81
|
it { Expressive.run('(if (>= 4 nil_value) "greater" "not so greater")', @scope).should eql "greater" }
|
81
82
|
end
|
83
|
+
|
84
|
+
context "multiple if statements" do
|
85
|
+
before do
|
86
|
+
@scope["depth"] = "4mm"
|
87
|
+
@statement = <<-EOH
|
88
|
+
(if (= depth "8mm") 1
|
89
|
+
(if (= depth "7mm") 0.8
|
90
|
+
(if (= depth "6mm") 0.65
|
91
|
+
(if (= depth "5mm") 0.5
|
92
|
+
(if (= depth "4mm") 0.35
|
93
|
+
(if (= depth "3mm") 0.2
|
94
|
+
(if (= depth "2mm") 0.05 0)
|
95
|
+
)
|
96
|
+
)
|
97
|
+
)
|
98
|
+
)
|
99
|
+
)
|
100
|
+
)
|
101
|
+
EOH
|
102
|
+
end
|
103
|
+
it do
|
104
|
+
@scope["depth"] = "8mm"
|
105
|
+
Expressive.run(@statement, @scope).should eql 1
|
106
|
+
end
|
107
|
+
it do
|
108
|
+
@scope["depth"] = "7mm"
|
109
|
+
Expressive.run(@statement, @scope).should eql 0.8
|
110
|
+
end
|
111
|
+
it do
|
112
|
+
@scope["depth"] = "6mm"
|
113
|
+
Expressive.run(@statement, @scope).should eql 0.65
|
114
|
+
end
|
115
|
+
it do
|
116
|
+
@scope["depth"] = "5mm"
|
117
|
+
Expressive.run(@statement, @scope).should eql 0.5
|
118
|
+
end
|
119
|
+
it do
|
120
|
+
@scope["depth"] = "4mm"
|
121
|
+
Expressive.run(@statement, @scope).should eql 0.35
|
122
|
+
end
|
123
|
+
it do
|
124
|
+
@scope["depth"] = "3mm"
|
125
|
+
Expressive.run(@statement, @scope).should eql 0.2
|
126
|
+
end
|
127
|
+
it do
|
128
|
+
@scope["depth"] = "2mm"
|
129
|
+
Expressive.run(@statement, @scope).should eql 0.05
|
130
|
+
end
|
131
|
+
it do
|
132
|
+
@scope["depth"] = "1.6mm"
|
133
|
+
Expressive.run(@statement, @scope).should eql 0
|
134
|
+
end
|
135
|
+
end
|
82
136
|
end
|
83
137
|
|
84
138
|
describe "understands logical statements" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: expressive
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.24
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-10 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby_gntp
|
@@ -294,7 +294,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
294
294
|
version: '0'
|
295
295
|
segments:
|
296
296
|
- 0
|
297
|
-
hash:
|
297
|
+
hash: 419564563370159517
|
298
298
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
299
299
|
none: false
|
300
300
|
requirements:
|
@@ -303,7 +303,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
303
303
|
version: '0'
|
304
304
|
segments:
|
305
305
|
- 0
|
306
|
-
hash:
|
306
|
+
hash: 419564563370159517
|
307
307
|
requirements: []
|
308
308
|
rubyforge_project:
|
309
309
|
rubygems_version: 1.8.24
|