expressive 0.0.30 → 0.0.31
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +8 -8
- data/Gemfile.lock +1 -1
- data/lib/expressive.rb +1 -1
- data/lib/expressive/version.rb +1 -1
- data/lib/scope.rb +18 -0
- data/spec/expressive_spec.rb +79 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
M2NkNDAxY2NhMmU4NjU2ZDAwNGYxZDQwYzExMWNkZDVjNTIxZTRjMw==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
MWY3NzkwOGYyNTc2ZWQ3ODU3ZjdmOTY2OTQ0ZDliMWFlMTc0ZTMxZA==
|
7
7
|
!binary "U0hBNTEy":
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
MGI4MTUwNjcwMDk4OTI4OWYxNDhmMDE5OTg0OWU1NmRjOWVjMjI5MDQ2NDE5
|
10
|
+
NTc0NjgwYWNlZWQxNjVhMzljMzY1MDI3YjBiNTcwMTdiODY1YWQ2NzUyNDI0
|
11
|
+
NDViNTc5MzFkMjc0MDQ2OWYwYzY4MDQ4MWZhZTVhNDNmYjY4MGQ=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
ZmE0Yjc5NTFmOTI3NTA1YjU1NjcyYjNkOThhOTZmZDZlZWQ0YzBjOTVhMzlj
|
14
|
+
M2FiZDY0OGRiNTQ3NTA5OTEwNGNiOWVjMjQ0ZDE3NzdlYTZlN2Q1NDJjM2Jh
|
15
|
+
ZjIxNDQ5ODUzNjM5ZDlkMGZjZGFhYWI4MWMxMzVlNTRmNTM2OTg=
|
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 $sub post >= > < <= and or if date datetime get put lookup $lookup $head $tail $reverse round $round $days_ago $hours_ago $minutes_ago $append $id $hash $concat $split $sms $hval $index)
|
23
|
+
%w(+ - * / = set sum $sub post >= > < <= and or if date datetime get put lookup $lookup $head $tail $reverse round $round $days_ago $hours_ago $minutes_ago $append $id $hash $concat $split $sms $hval $index $random $join)
|
24
24
|
end
|
25
25
|
|
26
26
|
module Boolean
|
data/lib/expressive/version.rb
CHANGED
data/lib/scope.rb
CHANGED
@@ -126,10 +126,18 @@ module Expressive
|
|
126
126
|
perform_concat(scope, cells)
|
127
127
|
end
|
128
128
|
|
129
|
+
syntax('$join') do |scope, cells|
|
130
|
+
perform_join(scope, cells)
|
131
|
+
end
|
132
|
+
|
129
133
|
syntax('$sms') do |scope, cells|
|
130
134
|
perform_sms(scope, cells)
|
131
135
|
end
|
132
136
|
|
137
|
+
syntax('$random') do |scope, cells|
|
138
|
+
perform_random(scope, cells)
|
139
|
+
end
|
140
|
+
|
133
141
|
syntax('$split') do |scope, cells|
|
134
142
|
perform_split(scope, cells)
|
135
143
|
end
|
@@ -198,6 +206,10 @@ module Expressive
|
|
198
206
|
return cells[0].eval(scope).to_s + cells[1].eval(scope).to_s
|
199
207
|
end
|
200
208
|
|
209
|
+
def perform_join(scope, cells)
|
210
|
+
return cells[0].eval(scope).to_s + " " + cells[1].eval(scope).to_s
|
211
|
+
end
|
212
|
+
|
201
213
|
def perform_sms(scope, cells)
|
202
214
|
uri = URI.parse("http://api.clickatell.com/http/sendmsg")
|
203
215
|
|
@@ -223,6 +235,12 @@ module Expressive
|
|
223
235
|
|
224
236
|
end
|
225
237
|
|
238
|
+
def perform_random(scope, cells)
|
239
|
+
evaluated_cells = cells.map{|cell| cell.eval(scope)}
|
240
|
+
chosen_cell = rand(Range.new(0,evaluated_cells.count-1))
|
241
|
+
evaluated_cells[chosen_cell]
|
242
|
+
end
|
243
|
+
|
226
244
|
def perform_split(scope, cells)
|
227
245
|
return cells[0].elements[1].text_value.split(cells[1].elements[1].text_value)
|
228
246
|
end
|
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 $sub get put post >= > < <= and or if date datetime lookup round $round $days_ago $hours_ago $minutes_ago $append $id $head $lookup $reverse $tail $hash $concat $split $sms $hval $index) }
|
9
|
+
it { Expressive.all_symbols.should =~ %w(+ - * / = set sum $sub get put post >= > < <= and or if date datetime lookup round $round $days_ago $hours_ago $minutes_ago $append $id $head $lookup $reverse $tail $hash $concat $split $sms $hval $index $random $join) }
|
10
10
|
end
|
11
11
|
|
12
12
|
describe "understands booleans" do
|
@@ -27,6 +27,7 @@ describe "Expressive" do
|
|
27
27
|
|
28
28
|
context "string manipulation" do
|
29
29
|
it {Expressive.run('($concat "hello" " world")').should eql "hello world" }
|
30
|
+
it {Expressive.run('($join "hello" "world")').should eql "hello world" }
|
30
31
|
it {
|
31
32
|
@scope["scope_value"] = "world"
|
32
33
|
Expressive.run('($concat "hello " scope_value)', @scope).should eql "hello world"
|
@@ -251,6 +252,34 @@ EOH
|
|
251
252
|
it { Expressive.run('(or true true)').should eql true }
|
252
253
|
it { Expressive.run('(or true false)').should eql true }
|
253
254
|
it { Expressive.run('(or false false)').should eql false }
|
255
|
+
it { Expressive.run('(or false (or false false))').should eql false }
|
256
|
+
it { Expressive.run('(or false (or false true))').should eql true }
|
257
|
+
it { Expressive.run('(or false (or true false))').should eql true }
|
258
|
+
it { Expressive.run('(or true (or false false))').should eql true }
|
259
|
+
|
260
|
+
it "handles compound ors" do
|
261
|
+
expressive = "(if (or (= answer_2 \"Unemployed\") (or (= answer_2 \"Self-employed\") (or (= answer_2 \"Retired\") (= answer_2 \"Student\")))) 2 \"\")"
|
262
|
+
|
263
|
+
@scope["answer_2"] = "asdf"
|
264
|
+
result = Expressive.run(expressive, @scope)
|
265
|
+
result.should == ""
|
266
|
+
|
267
|
+
@scope["answer_2"] = "Unemployed"
|
268
|
+
result = Expressive.run(expressive, @scope)
|
269
|
+
result.should == 2
|
270
|
+
|
271
|
+
@scope["answer_2"] = "Self-employed"
|
272
|
+
result = Expressive.run(expressive, @scope)
|
273
|
+
result.should == 2
|
274
|
+
|
275
|
+
@scope["answer_2"] = "Retired"
|
276
|
+
result = Expressive.run(expressive, @scope)
|
277
|
+
result.should == 2
|
278
|
+
|
279
|
+
@scope["answer_2"] = "Student"
|
280
|
+
result = Expressive.run(expressive, @scope)
|
281
|
+
result.should == 2
|
282
|
+
end
|
254
283
|
|
255
284
|
context "nil values" do
|
256
285
|
it { Expressive.run('(and true nil_value)', @scope).should eql false }
|
@@ -260,6 +289,19 @@ EOH
|
|
260
289
|
end
|
261
290
|
end
|
262
291
|
|
292
|
+
describe "generates random values" do
|
293
|
+
it "generates random literal values" do
|
294
|
+
[1, 2, 3, 4].include?(Expressive.run('($random 1 2 3 4)', @scope)).should be_true
|
295
|
+
end
|
296
|
+
it "generates random values from scope" do
|
297
|
+
@scope["field1"] = "value1"
|
298
|
+
@scope["field2"] = "value2"
|
299
|
+
@scope["field3"] = "value3"
|
300
|
+
@scope["field4"] = "value4"
|
301
|
+
%W(value1 value2 value3 value4).include?(Expressive.run('($random field1 field2 field3 field4)', @scope)).should be_true
|
302
|
+
end
|
303
|
+
end
|
304
|
+
|
263
305
|
describe "understands the modification of scope" do
|
264
306
|
|
265
307
|
it "sets scope based off rounded equality calculation" do
|
@@ -279,11 +321,46 @@ EOH
|
|
279
321
|
Expressive.run('(if (= ($round total_payment_amount 2) ($round refund_amount 2)) true, false)', @scope).should eql false
|
280
322
|
Expressive.run('(= (- ($round total_payment_amount 2) ($round refund_amount 2)) 0)', @scope).should eql false
|
281
323
|
Expressive.run('(set payment_reconciled (if (= ($round total_payment_amount 2) ($round refund_amount 2)) true false))', @scope)
|
282
|
-
puts @scope['payment_reconciled']
|
283
324
|
@scope['payment_reconciled'].should eql false
|
284
325
|
|
285
326
|
end
|
286
327
|
|
328
|
+
describe "set field only if value of other fields equate" do
|
329
|
+
before(:each) do
|
330
|
+
@scope.add_lookup_function("state_by_name") do |options, name, additional_query_specs = []|
|
331
|
+
if name == "Reconciled"
|
332
|
+
2
|
333
|
+
else
|
334
|
+
3
|
335
|
+
end
|
336
|
+
end
|
337
|
+
|
338
|
+
@scope["number_of_related_matters"] = "asdf"
|
339
|
+
@scope["x_current_state"] = 3
|
340
|
+
end
|
341
|
+
|
342
|
+
it "when value matches" do
|
343
|
+
@scope.add_lookup_function("related_matters_count") do |options, additional_query_specs = []|
|
344
|
+
1
|
345
|
+
end
|
346
|
+
result = Expressive.run("(set x_current_state (if (= (lookup related_matters_count) 1) (lookup state_by_name 'Reconciled') x_current_state)) (lookup related_matters_count)", @scope)
|
347
|
+
|
348
|
+
result.should eql 1
|
349
|
+
@scope["x_current_state"].should eql 2
|
350
|
+
end
|
351
|
+
|
352
|
+
it "when value does not match" do
|
353
|
+
@scope.add_lookup_function("related_matters_count") do |options, additional_query_specs = []|
|
354
|
+
0
|
355
|
+
end
|
356
|
+
result = Expressive.run("(set x_current_state (if (= (lookup related_matters_count) 1) (lookup state_by_name 'Reconciled') x_current_state)) (lookup related_matters_count)", @scope)
|
357
|
+
|
358
|
+
result.should eql 0
|
359
|
+
@scope["x_current_state"].should eql 3
|
360
|
+
end
|
361
|
+
|
362
|
+
end
|
363
|
+
|
287
364
|
it "using single set commands" do
|
288
365
|
@scope['vsi'] = 'oldvalue'
|
289
366
|
Expressive.run('(set vsi "vsi1234")', @scope).should eql "vsi1234"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
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.31
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ijonas Kisselbach
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-03-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby_gntp
|