expressive 0.0.13 → 0.0.14

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/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- expressive (0.0.13)
4
+ expressive (0.0.14)
5
5
  awesome_print (~> 1.0.2)
6
6
  json
7
7
  polyglot (~> 0.3.3)
@@ -28,7 +28,7 @@ GEM
28
28
  rb-fsevent (~> 0.9.1)
29
29
  rb-inotify (~> 0.8.8)
30
30
  method_source (0.8)
31
- mime-types (1.19)
31
+ mime-types (1.21)
32
32
  polyglot (0.3.3)
33
33
  pry (0.9.10)
34
34
  coderay (~> 1.0.5)
@@ -1,3 +1,3 @@
1
1
  module Expressive
2
- VERSION = "0.0.13"
2
+ VERSION = "0.0.14"
3
3
  end
data/lib/expressive.rb CHANGED
@@ -24,25 +24,25 @@ module Expressive
24
24
  end
25
25
 
26
26
  module Boolean
27
- def eval(scope)
27
+ def eval(scope = nil)
28
28
  'true' == text_value
29
29
  end
30
30
  end
31
31
 
32
32
  module IntegerValue
33
- def eval(scope)
33
+ def eval(scope = nil)
34
34
  text_value.to_i
35
35
  end
36
36
  end
37
37
 
38
38
  module FloatValue
39
- def eval(scope)
39
+ def eval(scope = nil)
40
40
  text_value.to_f
41
41
  end
42
42
  end
43
43
 
44
44
  module StringValue
45
- def eval(scope)
45
+ def eval(scope = nil)
46
46
  text_value.gsub('"', '')
47
47
  end
48
48
  end
@@ -61,8 +61,12 @@ module Expressive
61
61
  end
62
62
 
63
63
  def eval(scope)
64
- function = statements.first.eval(scope)
65
- function.call(scope, statements[1..-1])
64
+ first_elem = statements.first.eval(scope)
65
+ if first_elem.is_a? Function
66
+ first_elem.call(scope, statements[1..-1])
67
+ else
68
+ statements.map {|stat| stat.eval(scope) }
69
+ end
66
70
  end
67
71
  end
68
72
 
data/lib/scope.rb CHANGED
@@ -14,7 +14,7 @@ module Expressive
14
14
  @lookups[lookup_table_name].merge!(lookups)
15
15
  end
16
16
 
17
- def add_lookup_function(lookup_function_name, passed_in_options, &func_proc)
17
+ def add_lookup_function(lookup_function_name, passed_in_options = {}, &func_proc)
18
18
  @lookups[lookup_function_name] = [passed_in_options, func_proc]
19
19
  end
20
20
 
@@ -22,6 +22,10 @@ module Expressive
22
22
  @lookups.clear
23
23
  end
24
24
 
25
+ def include?(name)
26
+ @symbols.include?(name) or @lookups.include?(name)
27
+ end
28
+
25
29
  def [](name)
26
30
  @symbols[name] || @parent[name]
27
31
  end
@@ -83,7 +87,7 @@ module Expressive
83
87
  elsif lookup_result.is_a?(Array)
84
88
  options = lookup_result.first
85
89
  the_proc = lookup_result.last
86
- the_proc.call(options, key)
90
+ the_proc.call(options, key, *cells[2..-1].map {|cell| cell.eval(scope)})
87
91
  end
88
92
  end
89
93
  end
@@ -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) }
9
+ it { Expressive.all_symbols.should =~ %w(+ - * / = set sum get put post >= > < <= and or if date lookup round) }
10
10
  end
11
11
 
12
12
  describe "understands booleans" do
@@ -151,6 +151,15 @@ describe "Expressive" do
151
151
  end
152
152
  Expressive.run('(lookup account_reverse_login "ijonas")', @scope).should eql "ea-sanoji"
153
153
  end
154
+
155
+ it "should support multiple parameters to a lookup function" do
156
+ @scope.add_lookup_function("related_count") do |options, related_type, query_specs, last|
157
+ [related_type, query_specs.length, last]
158
+ end
159
+
160
+ Expressive.run('(lookup related_count "matters" (1 2 3) 10)', @scope).should eql ['matters', 3, 10]
161
+ end
162
+
154
163
  end
155
164
 
156
165
  describe "understands web-hook 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.13
4
+ version: 0.0.14
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-03-14 00:00:00.000000000 Z
12
+ date: 2013-03-21 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: 3813765804844931706
297
+ hash: 1436366056289508828
298
298
  required_rubygems_version: !ruby/object:Gem::Requirement
299
299
  none: false
300
300
  requirements:
@@ -303,10 +303,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
303
303
  version: '0'
304
304
  segments:
305
305
  - 0
306
- hash: 3813765804844931706
306
+ hash: 1436366056289508828
307
307
  requirements: []
308
308
  rubyforge_project:
309
- rubygems_version: 1.8.24
309
+ rubygems_version: 1.8.23
310
310
  signing_key:
311
311
  specification_version: 3
312
312
  summary: Scheme-like language for manipulating CaseBlocks cases