opener-webservice 1.2.0 → 2.0.0
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.
- checksums.yaml +4 -4
- data/lib/opener/webservice/version.rb +1 -1
- data/lib/opener/webservice.rb +113 -53
- data/opener-webservice.gemspec +6 -5
- metadata +76 -55
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 02a6433aa01c06b1251256710c706a59e45586b2
|
4
|
+
data.tar.gz: 6dc2b0270835171445461234f8123fb13e267d36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 733000a6cd389bcfbdfd0865432cc45c4896d4564a653fa7ad5a14a123d1cf5eb28ab0202e13fa47daa4e5f2b4a64f88f753abf3046d71fc11d7198329468c02
|
7
|
+
data.tar.gz: cfd032408fe8d59f391577d029eb96880684eb93ff61f4920f6264ac9ac214bed9d869b52b81d612c95ac386f552e43d8c5055e2024aa82e52a4597a778285fc
|
data/lib/opener/webservice.rb
CHANGED
@@ -25,7 +25,7 @@ module Opener
|
|
25
25
|
set :raise_errors, true
|
26
26
|
set :dump_errors, true
|
27
27
|
end
|
28
|
-
|
28
|
+
|
29
29
|
before %r{^((?!.css|.jpg|.png|.js|.ico).)+$} do
|
30
30
|
extract_params
|
31
31
|
authenticate! if Sinatra::Application.respond_to?(:authentication)
|
@@ -40,44 +40,49 @@ module Opener
|
|
40
40
|
end
|
41
41
|
|
42
42
|
##
|
43
|
-
# Puts the text through the primary processor
|
43
|
+
# Puts the text through the primary processor. This route either accepts
|
44
|
+
# regular POST fields or a JSON payload.
|
44
45
|
#
|
45
46
|
# @param [Hash] params The POST parameters.
|
46
47
|
#
|
47
48
|
# @option params [String] :input the input to send to the processor
|
49
|
+
#
|
48
50
|
# @option params [Array<String>] :callbacks A collection of callback URLs
|
49
51
|
# that act as a chain. The results are posted to the first URL which is
|
50
52
|
# then shifted of the list.
|
53
|
+
#
|
51
54
|
# @option params [String] :error_callback Callback URL to send errors to
|
52
55
|
# when using the asynchronous setup.
|
53
56
|
#
|
54
57
|
post '/' do
|
55
|
-
|
56
|
-
|
58
|
+
input_params = get_input_params
|
59
|
+
input = get_input(input_params)
|
60
|
+
|
57
61
|
if !input or input.strip.empty?
|
58
62
|
logger.error('Failed to process the request: no input specified')
|
59
63
|
|
60
64
|
halt(400, 'No input specified')
|
61
65
|
end
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
+
|
67
|
+
input_params[:input] = input
|
68
|
+
|
69
|
+
callbacks = extract_callbacks(input_params[:callbacks])
|
70
|
+
error_callback = input_params[:error_callback]
|
66
71
|
|
67
72
|
if callbacks.empty?
|
68
|
-
process_sync
|
73
|
+
process_sync(input_params)
|
69
74
|
else
|
70
|
-
process_async(callbacks, error_callback)
|
75
|
+
process_async(input_params, callbacks, error_callback)
|
71
76
|
end
|
72
77
|
end
|
73
|
-
|
78
|
+
|
74
79
|
##
|
75
80
|
# @return [HTTPClient]
|
76
81
|
#
|
77
82
|
def self.http_client
|
78
83
|
return @http_client || new_http_client
|
79
84
|
end
|
80
|
-
|
85
|
+
|
81
86
|
##
|
82
87
|
# @return [Opener::CallbackHandler]
|
83
88
|
#
|
@@ -94,7 +99,7 @@ module Opener
|
|
94
99
|
|
95
100
|
return client
|
96
101
|
end
|
97
|
-
|
102
|
+
|
98
103
|
##
|
99
104
|
# @return [Opener::CallbackHandler]
|
100
105
|
#
|
@@ -150,23 +155,29 @@ module Opener
|
|
150
155
|
##
|
151
156
|
# Processes the request synchronously.
|
152
157
|
#
|
153
|
-
|
154
|
-
|
158
|
+
# @param [Hash] input_params
|
159
|
+
#
|
160
|
+
def process_sync(input_params)
|
161
|
+
output, type = analyze(filtered_params(input_params))
|
155
162
|
content_type(type)
|
163
|
+
|
156
164
|
body(output)
|
157
165
|
end
|
158
166
|
|
159
167
|
##
|
160
168
|
# Filter the params hash based on the accepted_params
|
161
169
|
#
|
162
|
-
# @
|
170
|
+
# @param [Hash] input_params
|
171
|
+
# @return [Hash]
|
163
172
|
#
|
164
|
-
def filtered_params
|
165
|
-
options =
|
173
|
+
def filtered_params(input_params)
|
174
|
+
options = input_params.select{|k,v| accepted_params.include?(k.to_sym)}
|
166
175
|
cleaned = {}
|
167
|
-
|
176
|
+
|
177
|
+
options.each do |k, v|
|
168
178
|
v = true if v == "true"
|
169
179
|
v = false if v == "false"
|
180
|
+
|
170
181
|
cleaned[k.to_sym] = v
|
171
182
|
end
|
172
183
|
|
@@ -176,13 +187,21 @@ module Opener
|
|
176
187
|
##
|
177
188
|
# Processes the request asynchronously.
|
178
189
|
#
|
190
|
+
# @param [Hash] input_params
|
179
191
|
# @param [Array] callbacks The callback URLs to use.
|
192
|
+
# @param [String] error_callback
|
180
193
|
#
|
181
|
-
def process_async(callbacks, error_callback)
|
194
|
+
def process_async(input_params, callbacks, error_callback)
|
182
195
|
request_id = get_request_id
|
183
196
|
output_url = callbacks.last
|
197
|
+
|
184
198
|
Thread.new do
|
185
|
-
analyze_async(
|
199
|
+
analyze_async(
|
200
|
+
filtered_params(input_params),
|
201
|
+
request_id,
|
202
|
+
callbacks,
|
203
|
+
error_callback
|
204
|
+
)
|
186
205
|
end
|
187
206
|
|
188
207
|
content_type :json
|
@@ -220,7 +239,7 @@ module Opener
|
|
220
239
|
##
|
221
240
|
# Gets the NER of a KAF document and submits it to a callback URL.
|
222
241
|
#
|
223
|
-
# @param [
|
242
|
+
# @param [Hash] options
|
224
243
|
# @param [String] request_id
|
225
244
|
# @param [Array] callbacks
|
226
245
|
# @param [String] error_callback
|
@@ -239,7 +258,7 @@ module Opener
|
|
239
258
|
logger.info("Submitting results to #{url}")
|
240
259
|
|
241
260
|
begin
|
242
|
-
process_callback(url, output, request_id, callbacks, error_callback)
|
261
|
+
process_callback(options, url, output, request_id, callbacks, error_callback)
|
243
262
|
rescue => error
|
244
263
|
logger.error("Failed to submit the results: #{error.inspect}")
|
245
264
|
|
@@ -248,30 +267,36 @@ module Opener
|
|
248
267
|
end
|
249
268
|
|
250
269
|
##
|
270
|
+
# @param [Hash] options
|
251
271
|
# @param [String] url
|
252
272
|
# @param [String] text
|
253
273
|
# @param [String] request_id
|
254
274
|
# @param [Array] callbacks
|
255
275
|
#
|
256
|
-
def process_callback(url, text, request_id, callbacks, error_callback)
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
262
|
-
|
263
|
-
|
264
|
-
|
265
|
-
|
266
|
-
|
267
|
-
|
268
|
-
|
276
|
+
def process_callback(options, url, text, request_id, callbacks, error_callback)
|
277
|
+
if request.content_type == 'application/json'
|
278
|
+
headers = {'Content-Type' => 'application/json'}
|
279
|
+
output = JSON.dump(
|
280
|
+
filtered_params(options).merge(
|
281
|
+
:input => text,
|
282
|
+
:request_id => request_id,
|
283
|
+
:callbacks => callbacks,
|
284
|
+
:error_callback => error_callback
|
285
|
+
)
|
286
|
+
)
|
287
|
+
else
|
288
|
+
headers = {}
|
289
|
+
output = filtered_params(options).merge(
|
290
|
+
:input => text,
|
291
|
+
:request_id => request_id,
|
292
|
+
:'callbacks[]' => callbacks,
|
293
|
+
:error_callback => error_callback
|
294
|
+
)
|
295
|
+
end
|
296
|
+
|
269
297
|
extract_params
|
270
|
-
|
271
|
-
callback_handler.post(
|
272
|
-
url,
|
273
|
-
:body => filtered_params.merge(output)
|
274
|
-
)
|
298
|
+
|
299
|
+
callback_handler.post(url, :body => output, :header => headers)
|
275
300
|
end
|
276
301
|
|
277
302
|
##
|
@@ -309,14 +334,14 @@ module Opener
|
|
309
334
|
def http_client
|
310
335
|
return self.class.http_client
|
311
336
|
end
|
312
|
-
|
337
|
+
|
313
338
|
##
|
314
339
|
# @see Opener::Webservice.callback_handler
|
315
340
|
#
|
316
341
|
def callback_handler
|
317
342
|
return self.class.callback_handler
|
318
343
|
end
|
319
|
-
|
344
|
+
|
320
345
|
def authenticate!
|
321
346
|
credentials = {
|
322
347
|
secret_symbol => params[secret_symbol.to_s],
|
@@ -325,7 +350,27 @@ module Opener
|
|
325
350
|
response = http_client.get(Sinatra::Application.authentication, credentials)
|
326
351
|
halt response.body unless response.ok?
|
327
352
|
end
|
328
|
-
|
353
|
+
|
354
|
+
##
|
355
|
+
# Returns a Hash containing the input parameters to use. If a JSON payload
|
356
|
+
# is submitted the parameters will be based on the payload.
|
357
|
+
#
|
358
|
+
# @return [Hash]
|
359
|
+
#
|
360
|
+
def get_input_params
|
361
|
+
input = {}
|
362
|
+
|
363
|
+
if request.content_type == 'application/json'
|
364
|
+
JSON.load(request.body).each do |key, value|
|
365
|
+
input[key.to_sym] = value
|
366
|
+
end
|
367
|
+
else
|
368
|
+
input = params
|
369
|
+
end
|
370
|
+
|
371
|
+
return input
|
372
|
+
end
|
373
|
+
|
329
374
|
def extract_params
|
330
375
|
if request.referrer
|
331
376
|
uri = URI.parse(request.referrer)
|
@@ -333,26 +378,41 @@ module Opener
|
|
333
378
|
params.merge!(extracted)
|
334
379
|
end
|
335
380
|
end
|
336
|
-
|
381
|
+
|
337
382
|
def self.secret_symbol
|
338
|
-
Sinatra::Application.respond_to?(:secret)? Sinatra::Application.secret.to_sym : :secret
|
383
|
+
Sinatra::Application.respond_to?(:secret)? Sinatra::Application.secret.to_sym : :secret
|
339
384
|
end
|
340
|
-
|
385
|
+
|
341
386
|
def self.token_symbol
|
342
|
-
Sinatra::Application.respond_to?(:token)? Sinatra::Application.token.to_sym : :token
|
387
|
+
Sinatra::Application.respond_to?(:token)? Sinatra::Application.token.to_sym : :token
|
343
388
|
end
|
344
|
-
|
389
|
+
|
345
390
|
def secret_symbol
|
346
391
|
return self.class.secret_symbol
|
347
392
|
end
|
348
|
-
|
393
|
+
|
349
394
|
def token_symbol
|
350
395
|
return self.class.token_symbol
|
351
396
|
end
|
352
|
-
|
397
|
+
|
398
|
+
##
|
399
|
+
# Returns the KAF/text input as a String.
|
400
|
+
#
|
401
|
+
# @param [Hash] params
|
402
|
+
# @return [String]
|
403
|
+
#
|
353
404
|
def get_input(params)
|
354
|
-
|
355
|
-
|
405
|
+
input = nil
|
406
|
+
|
407
|
+
if params[:input]
|
408
|
+
input = params[:input]
|
409
|
+
|
410
|
+
elsif params[:input_url]
|
411
|
+
resp = HTTPClient.get(params[:input_url], :follow_redirect => true)
|
412
|
+
input = resp.body if resp.ok?
|
413
|
+
end
|
414
|
+
|
415
|
+
return input
|
356
416
|
end
|
357
417
|
end
|
358
418
|
end
|
data/opener-webservice.gemspec
CHANGED
@@ -16,12 +16,13 @@ Gem::Specification.new do |spec|
|
|
16
16
|
'LICENSE.txt'
|
17
17
|
]).select { |file| File.file?(file) }
|
18
18
|
|
19
|
-
spec.add_development_dependency "bundler", "~> 1.3"
|
20
|
-
spec.add_development_dependency "rake"
|
21
|
-
spec.add_development_dependency "pry"
|
22
|
-
|
23
19
|
spec.add_dependency "sinatra", "~> 1.4.3"
|
24
20
|
spec.add_dependency "uuidtools"
|
25
21
|
spec.add_dependency "json"
|
26
|
-
spec.add_dependency "opener-callback-handler"
|
22
|
+
spec.add_dependency "opener-callback-handler", '~> 1.0'
|
23
|
+
spec.add_dependency 'httpclient', ['~> 2.0', '>= 2.5.3.3']
|
24
|
+
|
25
|
+
spec.add_development_dependency "bundler", "~> 1.3"
|
26
|
+
spec.add_development_dependency "rake"
|
27
|
+
spec.add_development_dependency "pry"
|
27
28
|
end
|
metadata
CHANGED
@@ -1,147 +1,168 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: opener-webservice
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- development@olery.com
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: sinatra
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 1.4.3
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
15
22
|
version_requirements: !ruby/object:Gem::Requirement
|
16
23
|
requirements:
|
17
|
-
- - ~>
|
24
|
+
- - "~>"
|
18
25
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
26
|
+
version: 1.4.3
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: uuidtools
|
20
29
|
requirement: !ruby/object:Gem::Requirement
|
21
30
|
requirements:
|
22
|
-
- -
|
31
|
+
- - ">="
|
23
32
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
33
|
+
version: '0'
|
34
|
+
type: :runtime
|
25
35
|
prerelease: false
|
26
|
-
type: :development
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: rake
|
29
36
|
version_requirements: !ruby/object:Gem::Requirement
|
30
37
|
requirements:
|
31
|
-
- -
|
38
|
+
- - ">="
|
32
39
|
- !ruby/object:Gem::Version
|
33
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: json
|
34
43
|
requirement: !ruby/object:Gem::Requirement
|
35
44
|
requirements:
|
36
|
-
- -
|
45
|
+
- - ">="
|
37
46
|
- !ruby/object:Gem::Version
|
38
47
|
version: '0'
|
48
|
+
type: :runtime
|
39
49
|
prerelease: false
|
40
|
-
type: :development
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: pry
|
43
50
|
version_requirements: !ruby/object:Gem::Requirement
|
44
51
|
requirements:
|
45
|
-
- -
|
52
|
+
- - ">="
|
46
53
|
- !ruby/object:Gem::Version
|
47
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: opener-callback-handler
|
48
57
|
requirement: !ruby/object:Gem::Requirement
|
49
58
|
requirements:
|
50
|
-
- -
|
59
|
+
- - "~>"
|
51
60
|
- !ruby/object:Gem::Version
|
52
|
-
version: '0'
|
61
|
+
version: '1.0'
|
62
|
+
type: :runtime
|
53
63
|
prerelease: false
|
54
|
-
type: :development
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: sinatra
|
57
64
|
version_requirements: !ruby/object:Gem::Requirement
|
58
65
|
requirements:
|
59
|
-
- - ~>
|
66
|
+
- - "~>"
|
60
67
|
- !ruby/object:Gem::Version
|
61
|
-
version: 1.
|
68
|
+
version: '1.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: httpclient
|
62
71
|
requirement: !ruby/object:Gem::Requirement
|
63
72
|
requirements:
|
64
|
-
- - ~>
|
73
|
+
- - "~>"
|
65
74
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
67
|
-
|
75
|
+
version: '2.0'
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: 2.5.3.3
|
68
79
|
type: :runtime
|
69
|
-
|
70
|
-
name: uuidtools
|
80
|
+
prerelease: false
|
71
81
|
version_requirements: !ruby/object:Gem::Requirement
|
72
82
|
requirements:
|
73
|
-
- -
|
83
|
+
- - "~>"
|
74
84
|
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
85
|
+
version: '2.0'
|
86
|
+
- - ">="
|
87
|
+
- !ruby/object:Gem::Version
|
88
|
+
version: 2.5.3.3
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: bundler
|
76
91
|
requirement: !ruby/object:Gem::Requirement
|
77
92
|
requirements:
|
78
|
-
- -
|
93
|
+
- - "~>"
|
79
94
|
- !ruby/object:Gem::Version
|
80
|
-
version: '
|
95
|
+
version: '1.3'
|
96
|
+
type: :development
|
81
97
|
prerelease: false
|
82
|
-
type: :runtime
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: json
|
85
98
|
version_requirements: !ruby/object:Gem::Requirement
|
86
99
|
requirements:
|
87
|
-
- -
|
100
|
+
- - "~>"
|
88
101
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
102
|
+
version: '1.3'
|
103
|
+
- !ruby/object:Gem::Dependency
|
104
|
+
name: rake
|
90
105
|
requirement: !ruby/object:Gem::Requirement
|
91
106
|
requirements:
|
92
|
-
- -
|
107
|
+
- - ">="
|
93
108
|
- !ruby/object:Gem::Version
|
94
109
|
version: '0'
|
110
|
+
type: :development
|
95
111
|
prerelease: false
|
96
|
-
type: :runtime
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: opener-callback-handler
|
99
112
|
version_requirements: !ruby/object:Gem::Requirement
|
100
113
|
requirements:
|
101
|
-
- -
|
114
|
+
- - ">="
|
102
115
|
- !ruby/object:Gem::Version
|
103
116
|
version: '0'
|
117
|
+
- !ruby/object:Gem::Dependency
|
118
|
+
name: pry
|
104
119
|
requirement: !ruby/object:Gem::Requirement
|
105
120
|
requirements:
|
106
|
-
- -
|
121
|
+
- - ">="
|
107
122
|
- !ruby/object:Gem::Version
|
108
123
|
version: '0'
|
124
|
+
type: :development
|
109
125
|
prerelease: false
|
110
|
-
|
126
|
+
version_requirements: !ruby/object:Gem::Requirement
|
127
|
+
requirements:
|
128
|
+
- - ">="
|
129
|
+
- !ruby/object:Gem::Version
|
130
|
+
version: '0'
|
111
131
|
description: Basic webservice hooks for the opener toolchain
|
112
|
-
email:
|
132
|
+
email:
|
113
133
|
executables: []
|
114
134
|
extensions: []
|
115
135
|
extra_rdoc_files: []
|
116
136
|
files:
|
137
|
+
- LICENSE.txt
|
138
|
+
- README.md
|
117
139
|
- lib/opener/webservice.rb
|
118
140
|
- lib/opener/webservice/opt_parser.rb
|
119
141
|
- lib/opener/webservice/version.rb
|
120
142
|
- opener-webservice.gemspec
|
121
|
-
|
122
|
-
- LICENSE.txt
|
123
|
-
homepage:
|
143
|
+
homepage:
|
124
144
|
licenses:
|
125
145
|
- Apache 2.0
|
126
146
|
metadata: {}
|
127
|
-
post_install_message:
|
147
|
+
post_install_message:
|
128
148
|
rdoc_options: []
|
129
149
|
require_paths:
|
130
150
|
- lib
|
131
151
|
required_ruby_version: !ruby/object:Gem::Requirement
|
132
152
|
requirements:
|
133
|
-
- -
|
153
|
+
- - ">="
|
134
154
|
- !ruby/object:Gem::Version
|
135
155
|
version: '0'
|
136
156
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
157
|
requirements:
|
138
|
-
- -
|
158
|
+
- - ">="
|
139
159
|
- !ruby/object:Gem::Version
|
140
160
|
version: '0'
|
141
161
|
requirements: []
|
142
|
-
rubyforge_project:
|
143
|
-
rubygems_version: 2.
|
144
|
-
signing_key:
|
162
|
+
rubyforge_project:
|
163
|
+
rubygems_version: 2.2.2
|
164
|
+
signing_key:
|
145
165
|
specification_version: 4
|
146
166
|
summary: Basic webservice hooks for the opener toolchain
|
147
167
|
test_files: []
|
168
|
+
has_rdoc:
|