expressive 0.0.5 → 0.0.6
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 +2 -1
- data/expressive.gemspec +1 -0
- data/lib/expressive/version.rb +1 -1
- data/lib/scope.rb +32 -11
- data/spec/expressive_spec.rb +11 -1
- metadata +39 -28
data/Gemfile.lock
CHANGED
data/expressive.gemspec
CHANGED
|
@@ -26,6 +26,7 @@ Gem::Specification.new do |gem|
|
|
|
26
26
|
gem.add_development_dependency "pry", "~> 0.9.10"
|
|
27
27
|
|
|
28
28
|
gem.add_dependency "polyglot", "~> 0.3.3"
|
|
29
|
+
gem.add_dependency "json"
|
|
29
30
|
gem.add_dependency "treetop", "~> 1.4.10"
|
|
30
31
|
gem.add_dependency "awesome_print", "~> 1.0.2"
|
|
31
32
|
gem.add_dependency "rest-client", "~> 1.6.7"
|
data/lib/expressive/version.rb
CHANGED
data/lib/scope.rb
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
module Expressive
|
|
2
|
+
require 'json'
|
|
2
3
|
class Scope
|
|
3
4
|
def initialize(parent = {})
|
|
4
5
|
@parent = parent
|
|
@@ -37,8 +38,8 @@ module Expressive
|
|
|
37
38
|
|
|
38
39
|
class Webhook
|
|
39
40
|
|
|
40
|
-
def initialize(verb, url, params)
|
|
41
|
-
@verb, @url, @params = verb, url, params
|
|
41
|
+
def initialize(verb, url, params, headers)
|
|
42
|
+
@verb, @url, @params, @headers = verb, url, params, headers
|
|
42
43
|
end
|
|
43
44
|
|
|
44
45
|
def execute
|
|
@@ -48,11 +49,15 @@ module Expressive
|
|
|
48
49
|
private
|
|
49
50
|
|
|
50
51
|
def post
|
|
51
|
-
|
|
52
|
+
headers = {:content_type => :json, :accept => :json}
|
|
53
|
+
headers = headers.merge(@headers) if @headers
|
|
54
|
+
RestClient.post(@url, @params.to_json, headers)
|
|
52
55
|
end
|
|
53
56
|
|
|
54
57
|
def get
|
|
55
|
-
|
|
58
|
+
headers = {:params => @params}
|
|
59
|
+
headers = headers.merge(@headers) if @headers
|
|
60
|
+
RestClient.get(@url, headers)
|
|
56
61
|
end
|
|
57
62
|
|
|
58
63
|
def put
|
|
@@ -104,14 +109,17 @@ module Expressive
|
|
|
104
109
|
|
|
105
110
|
private
|
|
106
111
|
|
|
107
|
-
#(post "http://example.com"
|
|
108
|
-
#(
|
|
112
|
+
#(post "http://example.com" "*" (headers "AUTH-TOKEN=13415") )
|
|
113
|
+
#(post "http://example.com" name email john smith (headers "AUTH-TOKEN=13415") )
|
|
109
114
|
|
|
110
115
|
def perform_webhook(verb, scope, cells)
|
|
111
|
-
|
|
112
|
-
|
|
116
|
+
#convert cells to array so it can manipulated easily
|
|
117
|
+
cells_array = cells.map{|c| c.text_value.gsub('"', '')}
|
|
118
|
+
url = cells_array.shift
|
|
119
|
+
headers = create_webhook_headers(cells_array)
|
|
120
|
+
params = create_webhook_parameters(scope, cells_array)
|
|
113
121
|
begin
|
|
114
|
-
response = Webhook.new(verb, url, params).execute
|
|
122
|
+
response = Webhook.new(verb, url, params, headers).execute
|
|
115
123
|
scope = scope.merge(response) if response.is_a?(Hash)
|
|
116
124
|
rescue RestClient::Exception => e
|
|
117
125
|
scope['_errors'] = e.message
|
|
@@ -119,12 +127,25 @@ module Expressive
|
|
|
119
127
|
scope
|
|
120
128
|
end
|
|
121
129
|
|
|
130
|
+
def create_webhook_headers(cells)
|
|
131
|
+
header_position = cells.index("headers")
|
|
132
|
+
return if header_position.nil?
|
|
133
|
+
headers = cells[header_position + 1..-1]
|
|
134
|
+
cells.delete("headers")
|
|
135
|
+
headers.each{|h| cells.delete(h)}
|
|
136
|
+
headers.inject({}) do |header, h|
|
|
137
|
+
idx = h.index("=")
|
|
138
|
+
header[h[0..(idx-1)]] = h[(idx+1)..-1]
|
|
139
|
+
header
|
|
140
|
+
end
|
|
141
|
+
end
|
|
142
|
+
|
|
122
143
|
def create_webhook_parameters(scope, cells)
|
|
123
|
-
if cells.first && cells.first
|
|
144
|
+
if cells.first && cells.first == '*'
|
|
124
145
|
scope.to_hash
|
|
125
146
|
else
|
|
126
147
|
cells.inject({}) do |params, key|
|
|
127
|
-
params[key
|
|
148
|
+
params[key] = scope[key]
|
|
128
149
|
params
|
|
129
150
|
end
|
|
130
151
|
end
|
data/spec/expressive_spec.rb
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
|
|
2
1
|
require "spec_helper"
|
|
3
2
|
|
|
4
3
|
describe "Expressive" do
|
|
@@ -127,6 +126,17 @@ describe "Expressive" do
|
|
|
127
126
|
assert_requested(request)
|
|
128
127
|
@scope['goodbye'].should eql 'srsly'
|
|
129
128
|
end
|
|
129
|
+
|
|
130
|
+
it "should get with headers" do
|
|
131
|
+
@scope['ohai'] = "world"
|
|
132
|
+
@scope["monty"] = "python"
|
|
133
|
+
request = stub_request(:get, "www.example.com/?ohai=world&monty=python")
|
|
134
|
+
.with(:headers => {'Accept'=>'*/*; q=0.5, application/xml', 'Accept-Encoding'=>'gzip, deflate', 'User-Agent'=>'Ruby', "AUTH-TOKEN" => "123456"})
|
|
135
|
+
.to_return(body: {'goodbye' => 'srsly'})
|
|
136
|
+
Expressive.run('(get "http://www.example.com" "*" headers "AUTH-TOKEN=123456")', @scope)
|
|
137
|
+
assert_requested(request)
|
|
138
|
+
@scope['goodbye'].should eql 'srsly'
|
|
139
|
+
end
|
|
130
140
|
end
|
|
131
141
|
|
|
132
142
|
context "post" 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.6
|
|
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-30 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: ruby_gntp
|
|
16
|
-
requirement: &
|
|
16
|
+
requirement: &70342459798500 !ruby/object:Gem::Requirement
|
|
17
17
|
none: false
|
|
18
18
|
requirements:
|
|
19
19
|
- - ~>
|
|
@@ -21,10 +21,10 @@ dependencies:
|
|
|
21
21
|
version: 0.3.4
|
|
22
22
|
type: :development
|
|
23
23
|
prerelease: false
|
|
24
|
-
version_requirements: *
|
|
24
|
+
version_requirements: *70342459798500
|
|
25
25
|
- !ruby/object:Gem::Dependency
|
|
26
26
|
name: rspec
|
|
27
|
-
requirement: &
|
|
27
|
+
requirement: &70342459798000 !ruby/object:Gem::Requirement
|
|
28
28
|
none: false
|
|
29
29
|
requirements:
|
|
30
30
|
- - ~>
|
|
@@ -32,10 +32,10 @@ dependencies:
|
|
|
32
32
|
version: 2.11.0
|
|
33
33
|
type: :development
|
|
34
34
|
prerelease: false
|
|
35
|
-
version_requirements: *
|
|
35
|
+
version_requirements: *70342459798000
|
|
36
36
|
- !ruby/object:Gem::Dependency
|
|
37
37
|
name: rdoc
|
|
38
|
-
requirement: &
|
|
38
|
+
requirement: &70342459797500 !ruby/object:Gem::Requirement
|
|
39
39
|
none: false
|
|
40
40
|
requirements:
|
|
41
41
|
- - ~>
|
|
@@ -43,10 +43,10 @@ dependencies:
|
|
|
43
43
|
version: '3.12'
|
|
44
44
|
type: :development
|
|
45
45
|
prerelease: false
|
|
46
|
-
version_requirements: *
|
|
46
|
+
version_requirements: *70342459797500
|
|
47
47
|
- !ruby/object:Gem::Dependency
|
|
48
48
|
name: bundler
|
|
49
|
-
requirement: &
|
|
49
|
+
requirement: &70342459796940 !ruby/object:Gem::Requirement
|
|
50
50
|
none: false
|
|
51
51
|
requirements:
|
|
52
52
|
- - ~>
|
|
@@ -54,10 +54,10 @@ dependencies:
|
|
|
54
54
|
version: '1.0'
|
|
55
55
|
type: :development
|
|
56
56
|
prerelease: false
|
|
57
|
-
version_requirements: *
|
|
57
|
+
version_requirements: *70342459796940
|
|
58
58
|
- !ruby/object:Gem::Dependency
|
|
59
59
|
name: guard
|
|
60
|
-
requirement: &
|
|
60
|
+
requirement: &70342459796300 !ruby/object:Gem::Requirement
|
|
61
61
|
none: false
|
|
62
62
|
requirements:
|
|
63
63
|
- - ~>
|
|
@@ -65,10 +65,10 @@ dependencies:
|
|
|
65
65
|
version: 1.3.2
|
|
66
66
|
type: :development
|
|
67
67
|
prerelease: false
|
|
68
|
-
version_requirements: *
|
|
68
|
+
version_requirements: *70342459796300
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
70
|
name: guard-rspec
|
|
71
|
-
requirement: &
|
|
71
|
+
requirement: &70342459795840 !ruby/object:Gem::Requirement
|
|
72
72
|
none: false
|
|
73
73
|
requirements:
|
|
74
74
|
- - ~>
|
|
@@ -76,10 +76,10 @@ dependencies:
|
|
|
76
76
|
version: 1.2.1
|
|
77
77
|
type: :development
|
|
78
78
|
prerelease: false
|
|
79
|
-
version_requirements: *
|
|
79
|
+
version_requirements: *70342459795840
|
|
80
80
|
- !ruby/object:Gem::Dependency
|
|
81
81
|
name: webmock
|
|
82
|
-
requirement: &
|
|
82
|
+
requirement: &70342459795380 !ruby/object:Gem::Requirement
|
|
83
83
|
none: false
|
|
84
84
|
requirements:
|
|
85
85
|
- - ~>
|
|
@@ -87,10 +87,10 @@ dependencies:
|
|
|
87
87
|
version: 1.8.11
|
|
88
88
|
type: :development
|
|
89
89
|
prerelease: false
|
|
90
|
-
version_requirements: *
|
|
90
|
+
version_requirements: *70342459795380
|
|
91
91
|
- !ruby/object:Gem::Dependency
|
|
92
92
|
name: pry
|
|
93
|
-
requirement: &
|
|
93
|
+
requirement: &70342459794860 !ruby/object:Gem::Requirement
|
|
94
94
|
none: false
|
|
95
95
|
requirements:
|
|
96
96
|
- - ~>
|
|
@@ -98,10 +98,10 @@ dependencies:
|
|
|
98
98
|
version: 0.9.10
|
|
99
99
|
type: :development
|
|
100
100
|
prerelease: false
|
|
101
|
-
version_requirements: *
|
|
101
|
+
version_requirements: *70342459794860
|
|
102
102
|
- !ruby/object:Gem::Dependency
|
|
103
103
|
name: polyglot
|
|
104
|
-
requirement: &
|
|
104
|
+
requirement: &70342459794300 !ruby/object:Gem::Requirement
|
|
105
105
|
none: false
|
|
106
106
|
requirements:
|
|
107
107
|
- - ~>
|
|
@@ -109,10 +109,21 @@ dependencies:
|
|
|
109
109
|
version: 0.3.3
|
|
110
110
|
type: :runtime
|
|
111
111
|
prerelease: false
|
|
112
|
-
version_requirements: *
|
|
112
|
+
version_requirements: *70342459794300
|
|
113
|
+
- !ruby/object:Gem::Dependency
|
|
114
|
+
name: json
|
|
115
|
+
requirement: &70342459793820 !ruby/object:Gem::Requirement
|
|
116
|
+
none: false
|
|
117
|
+
requirements:
|
|
118
|
+
- - ! '>='
|
|
119
|
+
- !ruby/object:Gem::Version
|
|
120
|
+
version: '0'
|
|
121
|
+
type: :runtime
|
|
122
|
+
prerelease: false
|
|
123
|
+
version_requirements: *70342459793820
|
|
113
124
|
- !ruby/object:Gem::Dependency
|
|
114
125
|
name: treetop
|
|
115
|
-
requirement: &
|
|
126
|
+
requirement: &70342459792980 !ruby/object:Gem::Requirement
|
|
116
127
|
none: false
|
|
117
128
|
requirements:
|
|
118
129
|
- - ~>
|
|
@@ -120,10 +131,10 @@ dependencies:
|
|
|
120
131
|
version: 1.4.10
|
|
121
132
|
type: :runtime
|
|
122
133
|
prerelease: false
|
|
123
|
-
version_requirements: *
|
|
134
|
+
version_requirements: *70342459792980
|
|
124
135
|
- !ruby/object:Gem::Dependency
|
|
125
136
|
name: awesome_print
|
|
126
|
-
requirement: &
|
|
137
|
+
requirement: &70342459792000 !ruby/object:Gem::Requirement
|
|
127
138
|
none: false
|
|
128
139
|
requirements:
|
|
129
140
|
- - ~>
|
|
@@ -131,10 +142,10 @@ dependencies:
|
|
|
131
142
|
version: 1.0.2
|
|
132
143
|
type: :runtime
|
|
133
144
|
prerelease: false
|
|
134
|
-
version_requirements: *
|
|
145
|
+
version_requirements: *70342459792000
|
|
135
146
|
- !ruby/object:Gem::Dependency
|
|
136
147
|
name: rest-client
|
|
137
|
-
requirement: &
|
|
148
|
+
requirement: &70342459791520 !ruby/object:Gem::Requirement
|
|
138
149
|
none: false
|
|
139
150
|
requirements:
|
|
140
151
|
- - ~>
|
|
@@ -142,7 +153,7 @@ dependencies:
|
|
|
142
153
|
version: 1.6.7
|
|
143
154
|
type: :runtime
|
|
144
155
|
prerelease: false
|
|
145
|
-
version_requirements: *
|
|
156
|
+
version_requirements: *70342459791520
|
|
146
157
|
description: Scheme-like language for manipulating CaseBlocks cases
|
|
147
158
|
email:
|
|
148
159
|
- ijonas@emergeadapt.com
|
|
@@ -184,7 +195,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
184
195
|
version: '0'
|
|
185
196
|
segments:
|
|
186
197
|
- 0
|
|
187
|
-
hash:
|
|
198
|
+
hash: 1097799900527536520
|
|
188
199
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
189
200
|
none: false
|
|
190
201
|
requirements:
|
|
@@ -193,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
193
204
|
version: '0'
|
|
194
205
|
segments:
|
|
195
206
|
- 0
|
|
196
|
-
hash:
|
|
207
|
+
hash: 1097799900527536520
|
|
197
208
|
requirements: []
|
|
198
209
|
rubyforge_project:
|
|
199
210
|
rubygems_version: 1.8.15
|