expressive 0.0.3 → 0.0.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.
- data/.rspec +2 -0
- data/Gemfile.lock +2 -2
- data/expressive.gemspec +1 -1
- data/lib/expressive.rb +53 -59
- data/lib/expressive/version.rb +1 -1
- data/lib/scope.rb +110 -51
- data/spec/expressive_spec.rb +44 -84
- data/spec/scope_spec.rb +12 -0
- data/spec/spec_helper.rb +1 -0
- data/spec/webhook_examples.rb +28 -0
- metadata +35 -90
data/.rspec
ADDED
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
expressive (0.0.
|
4
|
+
expressive (0.0.5)
|
5
5
|
awesome_print (~> 1.0.2)
|
6
6
|
polyglot (~> 0.3.3)
|
7
7
|
rest-client (~> 1.6.7)
|
@@ -64,7 +64,7 @@ PLATFORMS
|
|
64
64
|
ruby
|
65
65
|
|
66
66
|
DEPENDENCIES
|
67
|
-
bundler (~> 1.
|
67
|
+
bundler (~> 1.0)
|
68
68
|
expressive!
|
69
69
|
guard (~> 1.3.2)
|
70
70
|
guard-rspec (~> 1.2.1)
|
data/expressive.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |gem|
|
|
19
19
|
gem.add_development_dependency "ruby_gntp", "~> 0.3.4"
|
20
20
|
gem.add_development_dependency "rspec", "~> 2.11.0"
|
21
21
|
gem.add_development_dependency "rdoc", "~> 3.12"
|
22
|
-
gem.add_development_dependency "bundler", "~> 1.
|
22
|
+
gem.add_development_dependency "bundler", "~> 1.0"
|
23
23
|
gem.add_development_dependency "guard", "~> 1.3.2"
|
24
24
|
gem.add_development_dependency "guard-rspec", "~> 1.2.1"
|
25
25
|
gem.add_development_dependency "webmock", "~> 1.8.11"
|
data/lib/expressive.rb
CHANGED
@@ -20,86 +20,80 @@ module Expressive
|
|
20
20
|
def self.all_symbols
|
21
21
|
%w(+ - * / = set sum post >= > < <= and or if)
|
22
22
|
end
|
23
|
-
end
|
24
23
|
|
25
|
-
module Boolean
|
26
|
-
|
27
|
-
|
24
|
+
module Boolean
|
25
|
+
def eval(scope)
|
26
|
+
'true' == text_value
|
27
|
+
end
|
28
28
|
end
|
29
|
-
end
|
30
29
|
|
31
|
-
module IntegerValue
|
32
|
-
|
33
|
-
|
30
|
+
module IntegerValue
|
31
|
+
def eval(scope)
|
32
|
+
text_value.to_i
|
33
|
+
end
|
34
34
|
end
|
35
|
-
end
|
36
35
|
|
37
|
-
module FloatValue
|
38
|
-
|
39
|
-
|
36
|
+
module FloatValue
|
37
|
+
def eval(scope)
|
38
|
+
text_value.to_f
|
39
|
+
end
|
40
40
|
end
|
41
|
-
end
|
42
41
|
|
43
|
-
module StringValue
|
44
|
-
|
45
|
-
|
42
|
+
module StringValue
|
43
|
+
def eval(scope)
|
44
|
+
text_value.gsub('"', '')
|
45
|
+
end
|
46
46
|
end
|
47
|
-
end
|
48
47
|
|
49
|
-
class Program < Treetop::Runtime::SyntaxNode
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
48
|
+
class Program < Treetop::Runtime::SyntaxNode
|
49
|
+
def eval(scope)
|
50
|
+
elements.map {|e|
|
51
|
+
e.eval(scope)
|
52
|
+
}.last
|
53
|
+
end
|
54
54
|
end
|
55
|
-
end
|
56
55
|
|
57
|
-
class List < Treetop::Runtime::SyntaxNode
|
58
|
-
|
59
|
-
|
60
|
-
|
56
|
+
class List < Treetop::Runtime::SyntaxNode
|
57
|
+
def statements
|
58
|
+
elements[1].elements.map {|e| e.data }
|
59
|
+
end
|
61
60
|
|
62
|
-
|
63
|
-
|
64
|
-
|
61
|
+
def eval(scope)
|
62
|
+
function = statements.first.eval(scope)
|
63
|
+
function.call(scope, statements[1..-1])
|
64
|
+
end
|
65
65
|
end
|
66
|
-
end
|
67
66
|
|
68
|
-
class Statement < Treetop::Runtime::SyntaxNode
|
69
|
-
|
70
|
-
|
71
|
-
|
67
|
+
class Statement < Treetop::Runtime::SyntaxNode
|
68
|
+
def data
|
69
|
+
elements[1]
|
70
|
+
end
|
72
71
|
|
73
|
-
|
74
|
-
|
72
|
+
def eval(scope)
|
73
|
+
data.eval(scope)
|
74
|
+
end
|
75
75
|
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# class SetNode < Treetop::Runtime::SyntaxNode
|
79
|
-
# def pieces
|
80
|
-
# [ :set, fieldname.text_value, value.text_value ]
|
81
|
-
# end
|
82
|
-
# end
|
83
76
|
|
84
|
-
class Identifier < Treetop::Runtime::SyntaxNode
|
85
|
-
|
86
|
-
|
77
|
+
class Identifier < Treetop::Runtime::SyntaxNode
|
78
|
+
def eval(scope)
|
79
|
+
scope[text_value]
|
80
|
+
end
|
87
81
|
end
|
88
|
-
end
|
89
82
|
|
90
|
-
class Function
|
91
|
-
|
92
|
-
|
93
|
-
|
83
|
+
class Function
|
84
|
+
def initialize(&block)
|
85
|
+
@block = block
|
86
|
+
end
|
94
87
|
|
95
|
-
|
96
|
-
|
97
|
-
|
88
|
+
def call(scope, statements)
|
89
|
+
parameters = statements.map {|c| c.eval(scope)}
|
90
|
+
@block.call(*parameters)
|
91
|
+
end
|
98
92
|
end
|
99
|
-
end
|
100
93
|
|
101
|
-
class Syntax < Function
|
102
|
-
|
103
|
-
|
94
|
+
class Syntax < Function
|
95
|
+
def call(scope, statements)
|
96
|
+
@block.call(scope, statements)
|
97
|
+
end
|
104
98
|
end
|
105
99
|
end
|
data/lib/expressive/version.rb
CHANGED
data/lib/scope.rb
CHANGED
@@ -1,55 +1,117 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
1
|
+
module Expressive
|
2
|
+
class Scope
|
3
|
+
def initialize(parent = {})
|
4
|
+
@parent = parent
|
5
|
+
@symbols = {}
|
6
|
+
end
|
6
7
|
|
7
|
-
|
8
|
-
|
9
|
-
|
8
|
+
def [](name)
|
9
|
+
@symbols[name] || @parent[name]
|
10
|
+
end
|
10
11
|
|
11
|
-
|
12
|
-
|
13
|
-
|
12
|
+
def []=(name, value)
|
13
|
+
@symbols[name] = value
|
14
|
+
end
|
14
15
|
|
15
|
-
|
16
|
-
|
17
|
-
|
16
|
+
def merge(scope)
|
17
|
+
@symbols.merge!(scope)
|
18
|
+
end
|
18
19
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
20
|
+
def override_scope(scope)
|
21
|
+
scope.merge!(@symbols)
|
22
|
+
@symbols = scope
|
23
|
+
end
|
23
24
|
|
24
|
-
|
25
|
-
|
26
|
-
|
25
|
+
def retrieve_scope
|
26
|
+
@symbols
|
27
|
+
end
|
27
28
|
|
28
|
-
|
29
|
-
|
30
|
-
|
29
|
+
def define(name, &block)
|
30
|
+
self[name] = Function.new(&block)
|
31
|
+
end
|
31
32
|
|
32
|
-
|
33
|
-
|
33
|
+
def syntax(name, &block)
|
34
|
+
self[name] = Syntax.new(&block)
|
35
|
+
end
|
34
36
|
end
|
35
|
-
end
|
36
37
|
|
37
|
-
class
|
38
|
-
def initialize
|
39
|
-
super
|
38
|
+
class Webhook
|
40
39
|
|
41
|
-
|
42
|
-
|
40
|
+
def initialize(verb, url, params)
|
41
|
+
@verb, @url, @params = verb, url, params
|
43
42
|
end
|
44
43
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
44
|
+
def execute
|
45
|
+
self.send(@verb)
|
46
|
+
end
|
47
|
+
|
48
|
+
private
|
49
|
+
|
50
|
+
def post
|
51
|
+
RestClient.post(@url, @params)
|
52
|
+
end
|
53
|
+
|
54
|
+
def get
|
55
|
+
RestClient.get(@url, {params: @params})
|
56
|
+
end
|
57
|
+
|
58
|
+
def put
|
59
|
+
RestClient.put(@url, @params)
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
class TopLevel < Scope
|
65
|
+
|
66
|
+
def initialize
|
67
|
+
super
|
68
|
+
|
69
|
+
syntax('set') do |scope, cells|
|
70
|
+
scope[cells.first.text_value] = cells[1].eval(scope)
|
71
|
+
end
|
72
|
+
|
73
|
+
syntax('post') do |scope, cells|
|
74
|
+
perform_webhook(:post, scope, cells)
|
75
|
+
end
|
76
|
+
|
77
|
+
syntax('put') do |scope, cells|
|
78
|
+
perform_webhook(:put, scope, cells)
|
50
79
|
end
|
80
|
+
|
81
|
+
syntax('get') do |scope, cells|
|
82
|
+
perform_webhook(:get, scope, cells)
|
83
|
+
end
|
84
|
+
|
85
|
+
define('+') {|a,b| a.to_f + b.to_f }
|
86
|
+
define('-') {|a,b| a.to_f - b.to_f }
|
87
|
+
define('*') {|a,b| a.to_f * b.to_f }
|
88
|
+
define('/') {|a,b| a.to_f / b.to_f }
|
89
|
+
define('=') {|a,b| a == b }
|
90
|
+
define('>') {|a,b| a.to_f > b.to_f }
|
91
|
+
define('<') {|a,b| a.to_f < b.to_f }
|
92
|
+
define('>=') {|a,b| a.to_f >= b.to_f }
|
93
|
+
define('<=') {|a,b| a.to_f <= b.to_f }
|
94
|
+
define('and') {|a,b| !!a && !!b }
|
95
|
+
define('or') {|a,b| !!a || !!b }
|
96
|
+
define('sum') { |*args| args.flatten.map(&:to_f).reduce(:+) }
|
97
|
+
define('if') { |*args| args.compact!; args[0] ? args[1] : args[2] }
|
98
|
+
end
|
99
|
+
|
100
|
+
def to_hash
|
101
|
+
h = self.retrieve_scope.dup
|
102
|
+
h.delete_if{|k, v| v.kind_of?(Expressive::Function)}
|
103
|
+
end
|
104
|
+
|
105
|
+
private
|
106
|
+
|
107
|
+
#(post "http://example.com" name age other)
|
108
|
+
#(get "http://example.com" "*")
|
109
|
+
|
110
|
+
def perform_webhook(verb, scope, cells)
|
111
|
+
url = cells.shift.text_value.gsub('"', '')
|
112
|
+
params = create_webhook_parameters(scope, cells)
|
51
113
|
begin
|
52
|
-
response =
|
114
|
+
response = Webhook.new(verb, url, params).execute
|
53
115
|
scope = scope.merge(response) if response.is_a?(Hash)
|
54
116
|
rescue RestClient::Exception => e
|
55
117
|
scope['_errors'] = e.message
|
@@ -57,18 +119,15 @@ class TopLevel < Scope
|
|
57
119
|
scope
|
58
120
|
end
|
59
121
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
define('or') {|a,b| !!a || !!b }
|
71
|
-
define('sum') { |*args| args.flatten.map(&:to_f).reduce(:+) }
|
72
|
-
define('if') { |*args| args.compact!; args[0] ? args[1] : args[2] }
|
122
|
+
def create_webhook_parameters(scope, cells)
|
123
|
+
if cells.first && cells.first.text_value.gsub('"', '') == '*'
|
124
|
+
scope.to_hash
|
125
|
+
else
|
126
|
+
cells.inject({}) do |params, key|
|
127
|
+
params[key.text_value] = scope[key.text_value]
|
128
|
+
params
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
73
132
|
end
|
74
133
|
end
|
data/spec/expressive_spec.rb
CHANGED
@@ -1,8 +1,9 @@
|
|
1
|
+
|
1
2
|
require "spec_helper"
|
2
3
|
|
3
4
|
describe "Expressive" do
|
4
5
|
before(:each) do
|
5
|
-
@scope = TopLevel.new
|
6
|
+
@scope = Expressive::TopLevel.new
|
6
7
|
end
|
7
8
|
|
8
9
|
describe "all_symbols" do
|
@@ -88,105 +89,64 @@ describe "Expressive" do
|
|
88
89
|
end
|
89
90
|
|
90
91
|
describe "understands web-hook statements" do
|
91
|
-
context "
|
92
|
-
|
93
|
-
|
94
|
-
|
92
|
+
context "put" do
|
93
|
+
it_should_behave_like "a webhook", :put
|
94
|
+
it "should put the cope parameters if given" do
|
95
|
+
@scope['ohai'] = "world"
|
96
|
+
request = stub_request(:put, "www.example.com").with(body: {'ohai' => 'world'}).to_return(body: {'goodbye' => 'srsly'})
|
97
|
+
Expressive.run('(put "http://www.example.com" ohai)', @scope)
|
95
98
|
assert_requested(request)
|
99
|
+
@scope['goodbye'].should eql 'srsly'
|
96
100
|
end
|
97
101
|
|
98
|
-
it "should
|
102
|
+
it "should put all parameters if wild card is given" do
|
99
103
|
@scope['ohai'] = "world"
|
100
|
-
|
101
|
-
|
104
|
+
@scope['monty'] = "python"
|
105
|
+
request = stub_request(:put, "www.example.com").with(body: {'monty' => 'python', 'ohai' => 'world'}).to_return(body: {'goodbye' => 'srsly'})
|
106
|
+
Expressive.run('(put "http://www.example.com" "*")', @scope)
|
102
107
|
assert_requested(request)
|
108
|
+
@scope['goodbye'].should eql 'srsly'
|
103
109
|
end
|
110
|
+
end
|
104
111
|
|
105
|
-
|
112
|
+
context "get" do
|
113
|
+
it_should_behave_like "a webhook", :get
|
114
|
+
it "should get with parameters if given" do
|
106
115
|
@scope['ohai'] = "world"
|
107
|
-
request = stub_request(:
|
108
|
-
Expressive.run('(
|
116
|
+
request = stub_request(:get, "www.example.com/?ohai=world").to_return(body: {'goodbye' => 'srsly'})
|
117
|
+
Expressive.run('(get "http://www.example.com" ohai)', @scope)
|
118
|
+
assert_requested(request)
|
109
119
|
@scope['goodbye'].should eql 'srsly'
|
110
120
|
end
|
111
|
-
end
|
112
121
|
|
113
|
-
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
Expressive.run('(post "http://www.example.com")', @scope)
|
121
|
-
@scope['_errors'].should eql message
|
122
|
-
end
|
122
|
+
it "should get with all parameters if wild card is given" do
|
123
|
+
@scope['ohai'] = "world"
|
124
|
+
@scope["monty"] = "python"
|
125
|
+
request = stub_request(:get, "www.example.com/?ohai=world&monty=python").to_return(body: {'goodbye' => 'srsly'})
|
126
|
+
Expressive.run('(get "http://www.example.com" "*")', @scope)
|
127
|
+
assert_requested(request)
|
128
|
+
@scope['goodbye'].should eql 'srsly'
|
123
129
|
end
|
130
|
+
end
|
124
131
|
|
125
|
-
|
126
|
-
|
127
|
-
|
128
|
-
|
129
|
-
|
130
|
-
|
132
|
+
context "post" do
|
133
|
+
it_should_behave_like "a webhook", :post
|
134
|
+
it "should post the cope parameters if given" do
|
135
|
+
@scope['ohai'] = "world"
|
136
|
+
request = stub_request(:post, "www.example.com").with(body: {'ohai' => 'world'}).to_return(body: {'goodbye' => 'srsly'})
|
137
|
+
Expressive.run('(post "http://www.example.com" ohai)', @scope)
|
138
|
+
assert_requested(request)
|
139
|
+
@scope['goodbye'].should eql 'srsly'
|
131
140
|
end
|
132
141
|
|
133
|
-
|
134
|
-
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
142
|
+
it "should get with all parameters if wild card is given" do
|
143
|
+
@scope['ohai'] = "world"
|
144
|
+
@scope["monty"] = "python"
|
145
|
+
request = stub_request(:post, "www.example.com").with(body: {'monty' => 'python', 'ohai' => 'world'}).to_return(body: {'goodbye' => 'srsly'})
|
146
|
+
Expressive.run('(post "http://www.example.com" "*")', @scope)
|
147
|
+
assert_requested(request)
|
148
|
+
@scope['goodbye'].should eql 'srsly'
|
139
149
|
end
|
140
150
|
end
|
141
151
|
end
|
142
|
-
|
143
|
-
context "looking up an id based on a value" do
|
144
|
-
it "should use the lookup method, find an id based on value" do
|
145
|
-
#Expressive.run("lookup_case_state 'not_started'", @scope)
|
146
|
-
#@payload[:_].should eql 1
|
147
|
-
end
|
148
|
-
end
|
149
|
-
|
150
|
-
context "when setting simple properties" do
|
151
|
-
it "should set order_no to 1234" do
|
152
|
-
Expressive.run("(set order_no 1234)", @scope).should eql 1234
|
153
|
-
@scope["order_no"].should eql 1234
|
154
|
-
end
|
155
|
-
it "should reuse set properties" do
|
156
|
-
Expressive.run("(set order_no 1234)(+ order_no 11)", @scope).should eql 1245.0
|
157
|
-
end
|
158
|
-
it "should sum scoped arrays" do
|
159
|
-
@scope["sub_totals"] = [100, 200, 300]
|
160
|
-
Expressive.run("(sum sub_totals)", @scope).should eql 600.0
|
161
|
-
end
|
162
|
-
end
|
163
|
-
|
164
|
-
context "when setting complex properties" do
|
165
|
-
context "e.g. current_state" do
|
166
|
-
before(:each) { Expressive.run("(set current_state (lookup_case_state, 'not started'))", @scope) }
|
167
|
-
it "should set current_state to 'started'"
|
168
|
-
it "should set current_state_id to 2"
|
169
|
-
end
|
170
|
-
context "e.g. owned_by" do
|
171
|
-
it "should set owned_by_id to 1"
|
172
|
-
it "should set owned_by_type to 'CaseBlocks::User'"
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
context "when setting multiple properties" do
|
177
|
-
# it {
|
178
|
-
|
179
|
-
# Expressive.apply_to @scope do |scope|
|
180
|
-
# apply "set order_no 1234"
|
181
|
-
# apply "set current_state (lookup case_state 'not started')"
|
182
|
-
# apply "set owned_by (lookup_user_by_email 'ijonas@ijonas.com')"
|
183
|
-
# end
|
184
|
-
# @scope["order_no"].should eql "1234"
|
185
|
-
# }
|
186
|
-
end
|
187
|
-
|
188
|
-
|
189
|
-
context "register external lookup functions" do
|
190
|
-
|
191
|
-
end
|
192
152
|
end
|
data/spec/scope_spec.rb
ADDED
data/spec/spec_helper.rb
CHANGED
@@ -0,0 +1,28 @@
|
|
1
|
+
shared_examples_for "a webhook" do |verb|
|
2
|
+
it "should #{verb} to the given uri" do
|
3
|
+
request = stub_request(verb, "www.example.com")
|
4
|
+
Expressive.run("(#{verb} \"http://www.example.com\")")
|
5
|
+
assert_requested(request)
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should add an entry in the errors element of the scope" do
|
9
|
+
message = 'Something went Pete Tong'
|
10
|
+
exception = RestClient::Exception.new
|
11
|
+
exception.message = message
|
12
|
+
stub_request(verb, 'www.example.com').to_raise(exception)
|
13
|
+
Expressive.run("(#{verb} \"http://www.example.com\")", @scope)
|
14
|
+
@scope['_errors'].should eql message
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should add an entry in the errors element of the scope" do
|
18
|
+
stub_request(verb, "badexample.com").to_raise(RestClient::ResourceNotFound.new)
|
19
|
+
Expressive.run("(#{verb} \"badexample.com\")", @scope)
|
20
|
+
@scope['_errors'].should eql 'Resource Not Found'
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should add an entry in the errors element of the scope" do
|
24
|
+
stub_request(verb, 'www.example.com').to_timeout
|
25
|
+
Expressive.run("(#{verb} \"http://www.example.com\")", @scope)
|
26
|
+
@scope['_errors'].should eql 'Request Timeout'
|
27
|
+
end
|
28
|
+
end
|
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.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,11 +9,11 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: ruby_gntp
|
16
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirement: &70261240748780 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
@@ -21,15 +21,10 @@ dependencies:
|
|
21
21
|
version: 0.3.4
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements:
|
25
|
-
none: false
|
26
|
-
requirements:
|
27
|
-
- - ~>
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: 0.3.4
|
24
|
+
version_requirements: *70261240748780
|
30
25
|
- !ruby/object:Gem::Dependency
|
31
26
|
name: rspec
|
32
|
-
requirement: !ruby/object:Gem::Requirement
|
27
|
+
requirement: &70261240748260 !ruby/object:Gem::Requirement
|
33
28
|
none: false
|
34
29
|
requirements:
|
35
30
|
- - ~>
|
@@ -37,15 +32,10 @@ dependencies:
|
|
37
32
|
version: 2.11.0
|
38
33
|
type: :development
|
39
34
|
prerelease: false
|
40
|
-
version_requirements:
|
41
|
-
none: false
|
42
|
-
requirements:
|
43
|
-
- - ~>
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: 2.11.0
|
35
|
+
version_requirements: *70261240748260
|
46
36
|
- !ruby/object:Gem::Dependency
|
47
37
|
name: rdoc
|
48
|
-
requirement: !ruby/object:Gem::Requirement
|
38
|
+
requirement: &70261240747780 !ruby/object:Gem::Requirement
|
49
39
|
none: false
|
50
40
|
requirements:
|
51
41
|
- - ~>
|
@@ -53,31 +43,21 @@ dependencies:
|
|
53
43
|
version: '3.12'
|
54
44
|
type: :development
|
55
45
|
prerelease: false
|
56
|
-
version_requirements:
|
57
|
-
none: false
|
58
|
-
requirements:
|
59
|
-
- - ~>
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '3.12'
|
46
|
+
version_requirements: *70261240747780
|
62
47
|
- !ruby/object:Gem::Dependency
|
63
48
|
name: bundler
|
64
|
-
requirement: !ruby/object:Gem::Requirement
|
49
|
+
requirement: &70261240747100 !ruby/object:Gem::Requirement
|
65
50
|
none: false
|
66
51
|
requirements:
|
67
52
|
- - ~>
|
68
53
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
54
|
+
version: '1.0'
|
70
55
|
type: :development
|
71
56
|
prerelease: false
|
72
|
-
version_requirements:
|
73
|
-
none: false
|
74
|
-
requirements:
|
75
|
-
- - ~>
|
76
|
-
- !ruby/object:Gem::Version
|
77
|
-
version: 1.1.4
|
57
|
+
version_requirements: *70261240747100
|
78
58
|
- !ruby/object:Gem::Dependency
|
79
59
|
name: guard
|
80
|
-
requirement: !ruby/object:Gem::Requirement
|
60
|
+
requirement: &70261240746320 !ruby/object:Gem::Requirement
|
81
61
|
none: false
|
82
62
|
requirements:
|
83
63
|
- - ~>
|
@@ -85,15 +65,10 @@ dependencies:
|
|
85
65
|
version: 1.3.2
|
86
66
|
type: :development
|
87
67
|
prerelease: false
|
88
|
-
version_requirements:
|
89
|
-
none: false
|
90
|
-
requirements:
|
91
|
-
- - ~>
|
92
|
-
- !ruby/object:Gem::Version
|
93
|
-
version: 1.3.2
|
68
|
+
version_requirements: *70261240746320
|
94
69
|
- !ruby/object:Gem::Dependency
|
95
70
|
name: guard-rspec
|
96
|
-
requirement: !ruby/object:Gem::Requirement
|
71
|
+
requirement: &70261240745320 !ruby/object:Gem::Requirement
|
97
72
|
none: false
|
98
73
|
requirements:
|
99
74
|
- - ~>
|
@@ -101,15 +76,10 @@ dependencies:
|
|
101
76
|
version: 1.2.1
|
102
77
|
type: :development
|
103
78
|
prerelease: false
|
104
|
-
version_requirements:
|
105
|
-
none: false
|
106
|
-
requirements:
|
107
|
-
- - ~>
|
108
|
-
- !ruby/object:Gem::Version
|
109
|
-
version: 1.2.1
|
79
|
+
version_requirements: *70261240745320
|
110
80
|
- !ruby/object:Gem::Dependency
|
111
81
|
name: webmock
|
112
|
-
requirement: !ruby/object:Gem::Requirement
|
82
|
+
requirement: &70261240744640 !ruby/object:Gem::Requirement
|
113
83
|
none: false
|
114
84
|
requirements:
|
115
85
|
- - ~>
|
@@ -117,15 +87,10 @@ dependencies:
|
|
117
87
|
version: 1.8.11
|
118
88
|
type: :development
|
119
89
|
prerelease: false
|
120
|
-
version_requirements:
|
121
|
-
none: false
|
122
|
-
requirements:
|
123
|
-
- - ~>
|
124
|
-
- !ruby/object:Gem::Version
|
125
|
-
version: 1.8.11
|
90
|
+
version_requirements: *70261240744640
|
126
91
|
- !ruby/object:Gem::Dependency
|
127
92
|
name: pry
|
128
|
-
requirement: !ruby/object:Gem::Requirement
|
93
|
+
requirement: &70261240743580 !ruby/object:Gem::Requirement
|
129
94
|
none: false
|
130
95
|
requirements:
|
131
96
|
- - ~>
|
@@ -133,15 +98,10 @@ dependencies:
|
|
133
98
|
version: 0.9.10
|
134
99
|
type: :development
|
135
100
|
prerelease: false
|
136
|
-
version_requirements:
|
137
|
-
none: false
|
138
|
-
requirements:
|
139
|
-
- - ~>
|
140
|
-
- !ruby/object:Gem::Version
|
141
|
-
version: 0.9.10
|
101
|
+
version_requirements: *70261240743580
|
142
102
|
- !ruby/object:Gem::Dependency
|
143
103
|
name: polyglot
|
144
|
-
requirement: !ruby/object:Gem::Requirement
|
104
|
+
requirement: &70261240742840 !ruby/object:Gem::Requirement
|
145
105
|
none: false
|
146
106
|
requirements:
|
147
107
|
- - ~>
|
@@ -149,15 +109,10 @@ dependencies:
|
|
149
109
|
version: 0.3.3
|
150
110
|
type: :runtime
|
151
111
|
prerelease: false
|
152
|
-
version_requirements:
|
153
|
-
none: false
|
154
|
-
requirements:
|
155
|
-
- - ~>
|
156
|
-
- !ruby/object:Gem::Version
|
157
|
-
version: 0.3.3
|
112
|
+
version_requirements: *70261240742840
|
158
113
|
- !ruby/object:Gem::Dependency
|
159
114
|
name: treetop
|
160
|
-
requirement: !ruby/object:Gem::Requirement
|
115
|
+
requirement: &70261240543280 !ruby/object:Gem::Requirement
|
161
116
|
none: false
|
162
117
|
requirements:
|
163
118
|
- - ~>
|
@@ -165,15 +120,10 @@ dependencies:
|
|
165
120
|
version: 1.4.10
|
166
121
|
type: :runtime
|
167
122
|
prerelease: false
|
168
|
-
version_requirements:
|
169
|
-
none: false
|
170
|
-
requirements:
|
171
|
-
- - ~>
|
172
|
-
- !ruby/object:Gem::Version
|
173
|
-
version: 1.4.10
|
123
|
+
version_requirements: *70261240543280
|
174
124
|
- !ruby/object:Gem::Dependency
|
175
125
|
name: awesome_print
|
176
|
-
requirement: !ruby/object:Gem::Requirement
|
126
|
+
requirement: &70261240541560 !ruby/object:Gem::Requirement
|
177
127
|
none: false
|
178
128
|
requirements:
|
179
129
|
- - ~>
|
@@ -181,15 +131,10 @@ dependencies:
|
|
181
131
|
version: 1.0.2
|
182
132
|
type: :runtime
|
183
133
|
prerelease: false
|
184
|
-
version_requirements:
|
185
|
-
none: false
|
186
|
-
requirements:
|
187
|
-
- - ~>
|
188
|
-
- !ruby/object:Gem::Version
|
189
|
-
version: 1.0.2
|
134
|
+
version_requirements: *70261240541560
|
190
135
|
- !ruby/object:Gem::Dependency
|
191
136
|
name: rest-client
|
192
|
-
requirement: !ruby/object:Gem::Requirement
|
137
|
+
requirement: &70261240540720 !ruby/object:Gem::Requirement
|
193
138
|
none: false
|
194
139
|
requirements:
|
195
140
|
- - ~>
|
@@ -197,12 +142,7 @@ dependencies:
|
|
197
142
|
version: 1.6.7
|
198
143
|
type: :runtime
|
199
144
|
prerelease: false
|
200
|
-
version_requirements:
|
201
|
-
none: false
|
202
|
-
requirements:
|
203
|
-
- - ~>
|
204
|
-
- !ruby/object:Gem::Version
|
205
|
-
version: 1.6.7
|
145
|
+
version_requirements: *70261240540720
|
206
146
|
description: Scheme-like language for manipulating CaseBlocks cases
|
207
147
|
email:
|
208
148
|
- ijonas@emergeadapt.com
|
@@ -212,6 +152,7 @@ extra_rdoc_files: []
|
|
212
152
|
files:
|
213
153
|
- .document
|
214
154
|
- .gitignore
|
155
|
+
- .rspec
|
215
156
|
- Gemfile
|
216
157
|
- Gemfile.lock
|
217
158
|
- Guardfile
|
@@ -226,7 +167,9 @@ files:
|
|
226
167
|
- lib/expressive_grammar.treetop
|
227
168
|
- lib/scope.rb
|
228
169
|
- spec/expressive_spec.rb
|
170
|
+
- spec/scope_spec.rb
|
229
171
|
- spec/spec_helper.rb
|
172
|
+
- spec/webhook_examples.rb
|
230
173
|
homepage: http://github.com/emergeadapt/expressive
|
231
174
|
licenses: []
|
232
175
|
post_install_message:
|
@@ -241,7 +184,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
241
184
|
version: '0'
|
242
185
|
segments:
|
243
186
|
- 0
|
244
|
-
hash: -
|
187
|
+
hash: -3178828988294476295
|
245
188
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
246
189
|
none: false
|
247
190
|
requirements:
|
@@ -250,13 +193,15 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
250
193
|
version: '0'
|
251
194
|
segments:
|
252
195
|
- 0
|
253
|
-
hash: -
|
196
|
+
hash: -3178828988294476295
|
254
197
|
requirements: []
|
255
198
|
rubyforge_project:
|
256
|
-
rubygems_version: 1.8.
|
199
|
+
rubygems_version: 1.8.15
|
257
200
|
signing_key:
|
258
201
|
specification_version: 3
|
259
202
|
summary: Scheme-like language for manipulating CaseBlocks cases
|
260
203
|
test_files:
|
261
204
|
- spec/expressive_spec.rb
|
205
|
+
- spec/scope_spec.rb
|
262
206
|
- spec/spec_helper.rb
|
207
|
+
- spec/webhook_examples.rb
|