turbot-runner-morph 0.0.2 → 0.0.3
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 +8 -8
- data/lib/turbot_runner/runner.rb +31 -9
- data/lib/turbot_runner/version.rb +1 -1
- data/spec/lib/runner_spec.rb +73 -34
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MzEwODljYjAwYTk0OTJmYjBlNGE4M2Y2MjU1YWMyZGQ3Yjg4N2U5MQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
OTFiYmEwN2U1NjdhYzE0Zjc0MTU2YWNiYWExMzdjNmM4NTdjZDI0ZA==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YmZlNDk4NDhkNWIwMTUwNjNlNzJjZDQ1MGFhYTg4ODQwMmJlYTFjMDJhYWYz
|
10
|
+
MWIwZmI2ZDk0NjcxNmNhZjJlYjllYjVkZTBmN2M0YTNmNzRhNjI0MDFkNTlh
|
11
|
+
MmMwMmU3OTcxZjk1NWMzZGRjY2QxNTI1N2M0MThlMjU3MjBlNDA=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
YmRmODk5YTQyOGRkMTVmYzcwMjVhYmFmZTA4Y2Q1NDE5ZmVhOTkzYTc5ZDhh
|
14
|
+
NDBjNTYwYzc2ODQzNGQ5ZjJmMTQ0Y2Y0MDA5YTYyOWE2NWI2NDI2ZDIxY2Jl
|
15
|
+
ZTRiYmY3ZTc4M2ExZTk1MTViMGZjZmJiYzU4MjU2ODJkMWE2YWM=
|
data/lib/turbot_runner/runner.rb
CHANGED
@@ -4,6 +4,10 @@ require 'pathname'
|
|
4
4
|
|
5
5
|
module TurbotRunner
|
6
6
|
class Runner
|
7
|
+
RC_OK = 0
|
8
|
+
RC_SCRAPER_FAILED = 1
|
9
|
+
RC_TRANSFORMER_FAILED = 2
|
10
|
+
|
7
11
|
attr_reader :base_directory
|
8
12
|
|
9
13
|
def initialize(directory, options={})
|
@@ -19,29 +23,47 @@ module TurbotRunner
|
|
19
23
|
else
|
20
24
|
@output_directory = File.join(@base_directory, 'output')
|
21
25
|
end
|
26
|
+
@scraper_provided = options[:scraper_provided]
|
22
27
|
end
|
23
28
|
|
24
29
|
def run
|
25
30
|
set_up_output_directory
|
26
31
|
|
27
|
-
|
32
|
+
if @scraper_provided
|
33
|
+
scraper_succeeded = true
|
34
|
+
else
|
35
|
+
scraper_succeeded = run_script(scraper_config)
|
36
|
+
end
|
37
|
+
|
28
38
|
# Run the transformers even if the scraper fails
|
39
|
+
transformers_succeeded = true
|
29
40
|
transformers.each do |transformer_config|
|
30
|
-
|
31
|
-
|
32
|
-
|
41
|
+
config = transformer_config.merge(
|
42
|
+
:base_directory => @base_directory,
|
43
|
+
)
|
44
|
+
transformers_succeeded = run_script(config, input_file=scraper_output_file) && transformers_succeeded
|
45
|
+
end
|
46
|
+
|
47
|
+
if !scraper_succeeded
|
48
|
+
RC_SCRAPER_FAILED
|
49
|
+
elsif !transformers_succeeded
|
50
|
+
RC_TRANSFORMER_FAILED
|
51
|
+
else
|
52
|
+
RC_OK
|
33
53
|
end
|
34
|
-
succeeded
|
35
54
|
end
|
36
55
|
|
37
56
|
def set_up_output_directory
|
38
57
|
FileUtils.mkdir_p(@output_directory)
|
39
|
-
|
40
|
-
|
58
|
+
|
59
|
+
if !@scraper_provided
|
60
|
+
FileUtils.rm_f(output_file('scraper', '.out'))
|
61
|
+
FileUtils.rm_f(output_file('scraper', '.err'))
|
62
|
+
end
|
41
63
|
|
42
64
|
transformers.each do |transformer_config|
|
43
|
-
FileUtils.rm_f(
|
44
|
-
FileUtils.rm_f(
|
65
|
+
FileUtils.rm_f(output_file(transformer_config[:file], '.out'))
|
66
|
+
FileUtils.rm_f(output_file(transformer_config[:file], '.err'))
|
45
67
|
end
|
46
68
|
end
|
47
69
|
|
data/spec/lib/runner_spec.rb
CHANGED
@@ -2,10 +2,6 @@ require 'json'
|
|
2
2
|
require 'turbot_runner'
|
3
3
|
|
4
4
|
describe TurbotRunner::Runner do
|
5
|
-
before(:each) do
|
6
|
-
Dir.glob('spec/bots/**/output/*').each {|f| File.delete(f)}
|
7
|
-
end
|
8
|
-
|
9
5
|
after(:all) do
|
10
6
|
puts
|
11
7
|
puts 'If all specs passed, you should now run `ruby spec/manual_spec.rb`'
|
@@ -19,11 +15,11 @@ describe TurbotRunner::Runner do
|
|
19
15
|
|
20
16
|
it 'produces expected output' do
|
21
17
|
@runner.run
|
22
|
-
expect(
|
18
|
+
expect(@runner).to have_output('scraper', 'full-scraper.out')
|
23
19
|
end
|
24
20
|
|
25
21
|
it 'returns true' do
|
26
|
-
expect(@runner
|
22
|
+
expect(@runner).to succeed
|
27
23
|
end
|
28
24
|
end
|
29
25
|
|
@@ -34,7 +30,7 @@ describe TurbotRunner::Runner do
|
|
34
30
|
|
35
31
|
it 'produces expected output' do
|
36
32
|
@runner.run
|
37
|
-
expect(
|
33
|
+
expect(@runner).to have_output('scraper', 'full-scraper.out')
|
38
34
|
end
|
39
35
|
end
|
40
36
|
|
@@ -45,12 +41,12 @@ describe TurbotRunner::Runner do
|
|
45
41
|
|
46
42
|
it 'produces expected outputs' do
|
47
43
|
@runner.run
|
48
|
-
expect(
|
49
|
-
expect(
|
44
|
+
expect(@runner).to have_output('scraper', 'full-scraper.out')
|
45
|
+
expect(@runner).to have_output('transformer', 'full-transformer.out')
|
50
46
|
end
|
51
47
|
|
52
48
|
it 'returns true' do
|
53
|
-
expect(@runner
|
49
|
+
expect(@runner).to succeed
|
54
50
|
end
|
55
51
|
end
|
56
52
|
|
@@ -61,13 +57,13 @@ describe TurbotRunner::Runner do
|
|
61
57
|
|
62
58
|
it 'produces expected outputs' do
|
63
59
|
@runner.run
|
64
|
-
expect(
|
65
|
-
expect(
|
66
|
-
expect(
|
60
|
+
expect(@runner).to have_output('scraper', 'full-scraper.out')
|
61
|
+
expect(@runner).to have_output('transformer1', 'full-transformer.out')
|
62
|
+
expect(@runner).to have_output('transformer2', 'full-transformer.out')
|
67
63
|
end
|
68
64
|
|
69
65
|
it 'returns true' do
|
70
|
-
expect(@runner
|
66
|
+
expect(@runner).to succeed
|
71
67
|
end
|
72
68
|
end
|
73
69
|
|
@@ -77,7 +73,7 @@ describe TurbotRunner::Runner do
|
|
77
73
|
expected_log = "doing...\ndone\n"
|
78
74
|
runner = test_runner('logging-bot', :log_to_file => true)
|
79
75
|
runner.run
|
80
|
-
expect(
|
76
|
+
expect(runner).to have_error_output_matching('scraper', expected_log)
|
81
77
|
end
|
82
78
|
end
|
83
79
|
|
@@ -110,12 +106,12 @@ describe TurbotRunner::Runner do
|
|
110
106
|
end
|
111
107
|
|
112
108
|
it 'returns false' do
|
113
|
-
expect(@runner
|
109
|
+
expect(@runner).to fail_in_scraper
|
114
110
|
end
|
115
111
|
|
116
112
|
it 'writes error to stderr' do
|
117
113
|
@runner.run
|
118
|
-
expect(
|
114
|
+
expect(@runner).to have_error_output_matching('scraper', /Oh no/)
|
119
115
|
end
|
120
116
|
|
121
117
|
it 'still runs the transformers' do
|
@@ -133,7 +129,7 @@ describe TurbotRunner::Runner do
|
|
133
129
|
end
|
134
130
|
|
135
131
|
it 'returns true' do
|
136
|
-
expect(@runner
|
132
|
+
expect(@runner).to succeed
|
137
133
|
end
|
138
134
|
end
|
139
135
|
|
@@ -143,12 +139,12 @@ describe TurbotRunner::Runner do
|
|
143
139
|
end
|
144
140
|
|
145
141
|
it 'returns false' do
|
146
|
-
expect(@runner
|
142
|
+
expect(@runner).to fail_in_transformer
|
147
143
|
end
|
148
144
|
|
149
145
|
it 'writes error to stderr' do
|
150
146
|
@runner.run
|
151
|
-
expect(
|
147
|
+
expect(@runner).to have_error_output_matching('transformer2', /Oh no/)
|
152
148
|
end
|
153
149
|
end
|
154
150
|
|
@@ -180,25 +176,25 @@ describe TurbotRunner::Runner do
|
|
180
176
|
|
181
177
|
it 'produces expected output' do
|
182
178
|
@runner.run
|
183
|
-
expect(
|
179
|
+
expect(@runner).to have_output('scraper', 'truncated-scraper.out')
|
184
180
|
end
|
185
181
|
|
186
182
|
it 'returns true' do
|
187
|
-
expect(@runner
|
183
|
+
expect(@runner).to succeed
|
188
184
|
end
|
189
185
|
end
|
190
186
|
|
191
187
|
context 'with a scraper that produces an invalid record' do
|
192
188
|
it 'returns false' do
|
193
189
|
@runner = test_runner('invalid-record-bot')
|
194
|
-
expect(@runner
|
190
|
+
expect(@runner).to fail_in_scraper
|
195
191
|
end
|
196
192
|
end
|
197
193
|
|
198
194
|
context 'with a scraper that produces invalid JSON' do
|
199
195
|
it 'returns false' do
|
200
196
|
@runner = test_runner('invalid-json-bot')
|
201
|
-
expect(@runner
|
197
|
+
expect(@runner).to fail_in_scraper
|
202
198
|
end
|
203
199
|
end
|
204
200
|
|
@@ -213,7 +209,7 @@ describe TurbotRunner::Runner do
|
|
213
209
|
:timeout => 1,
|
214
210
|
:log_to_file => true
|
215
211
|
)
|
216
|
-
expect(@runner
|
212
|
+
expect(@runner).to fail_in_scraper
|
217
213
|
end
|
218
214
|
end
|
219
215
|
|
@@ -223,7 +219,7 @@ describe TurbotRunner::Runner do
|
|
223
219
|
end
|
224
220
|
|
225
221
|
it 'returns false' do
|
226
|
-
expect(@runner
|
222
|
+
expect(@runner).to fail_in_scraper
|
227
223
|
end
|
228
224
|
end
|
229
225
|
|
@@ -236,6 +232,32 @@ describe TurbotRunner::Runner do
|
|
236
232
|
expect{@runner.run}.to raise_error(TurbotRunner::InvalidDataType)
|
237
233
|
end
|
238
234
|
end
|
235
|
+
|
236
|
+
context 'when the scraped data is provided' do
|
237
|
+
before do
|
238
|
+
FileUtils.cp(
|
239
|
+
File.join('spec', 'outputs', 'full-scraper.out'),
|
240
|
+
File.join(File.dirname(__FILE__), '../bots', 'bot-with-transformer', 'output', 'scraper.out')
|
241
|
+
)
|
242
|
+
@runner = test_runner('bot-with-transformer', :scraper_provided => true)
|
243
|
+
end
|
244
|
+
|
245
|
+
it 'does not run scraper' do
|
246
|
+
expect(@runner).to receive(:run_script).once.with(
|
247
|
+
hash_including(:file => 'transformer.rb'), anything
|
248
|
+
)
|
249
|
+
@runner.run
|
250
|
+
end
|
251
|
+
|
252
|
+
it 'succeeds' do
|
253
|
+
expect(@runner).to succeed
|
254
|
+
end
|
255
|
+
|
256
|
+
it 'produces expected transformed output' do
|
257
|
+
@runner.run
|
258
|
+
expect(@runner).to have_output('transformer', 'full-transformer.out')
|
259
|
+
end
|
260
|
+
end
|
239
261
|
end
|
240
262
|
|
241
263
|
describe '#process_output' do
|
@@ -301,10 +323,8 @@ describe TurbotRunner::Runner do
|
|
301
323
|
end
|
302
324
|
|
303
325
|
|
304
|
-
RSpec::Matchers.define
|
305
|
-
match do |
|
306
|
-
runner, script = actual
|
307
|
-
|
326
|
+
RSpec::Matchers.define(:have_output) do |script, expected|
|
327
|
+
match do |runner|
|
308
328
|
expected_path = File.join('spec', 'outputs', expected)
|
309
329
|
expected_output = File.readlines(expected_path).map {|line| JSON.parse(line)}
|
310
330
|
actual_path = File.join(runner.base_directory, 'output', "#{script}.out")
|
@@ -314,16 +334,35 @@ RSpec::Matchers.define :have_output do |expected|
|
|
314
334
|
end
|
315
335
|
|
316
336
|
|
317
|
-
RSpec::Matchers.define
|
318
|
-
match do |
|
319
|
-
runner, script = actual
|
320
|
-
|
337
|
+
RSpec::Matchers.define(:have_error_output_matching) do |script, expected|
|
338
|
+
match do |runner|
|
321
339
|
actual_path = File.join(runner.base_directory, 'output', "#{script}.err")
|
322
340
|
actual_output = File.read(actual_path)
|
323
341
|
expect(actual_output).to match(expected)
|
324
342
|
end
|
325
343
|
end
|
326
344
|
|
345
|
+
|
346
|
+
RSpec::Matchers.define(:succeed) do
|
347
|
+
match do |runner|
|
348
|
+
expect(runner.run).to eq(TurbotRunner::Runner::RC_OK)
|
349
|
+
end
|
350
|
+
end
|
351
|
+
|
352
|
+
|
353
|
+
RSpec::Matchers.define(:fail_in_scraper) do
|
354
|
+
match do |runner|
|
355
|
+
expect(runner.run).to eq(TurbotRunner::Runner::RC_SCRAPER_FAILED)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
|
360
|
+
RSpec::Matchers.define(:fail_in_transformer) do
|
361
|
+
match do |runner|
|
362
|
+
expect(runner.run).to eq(TurbotRunner::Runner::RC_TRANSFORMER_FAILED)
|
363
|
+
end
|
364
|
+
end
|
365
|
+
|
327
366
|
def test_runner(name, opts={})
|
328
367
|
test_bot_location = File.join(File.dirname(__FILE__), '../bots', name)
|
329
368
|
TurbotRunner::Runner.new(test_bot_location, opts)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbot-runner-morph
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- OpenCorporates
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: openc-json_schema
|