turbot 0.0.25 → 0.0.27
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 +15 -0
- data/README.md +4 -0
- data/lib/turbot/auth.rb +1 -1
- data/lib/turbot/command/bots.rb +117 -107
- data/lib/turbot/version.rb +1 -1
- data/schema/schemas/simple-licence-schema.json +50 -0
- data/templates/manifest.json +1 -0
- data/templates/python/scraper.py +1 -0
- data/templates/ruby/scraper.rb +1 -0
- metadata +39 -41
checksums.yaml
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
---
|
2
|
+
!binary "U0hBMQ==":
|
3
|
+
metadata.gz: !binary |-
|
4
|
+
ZWYyNTZiNTliZWE4MjgyMWFjNDFjZDMxN2M5ZmQwNDFjYjRjYmE4NA==
|
5
|
+
data.tar.gz: !binary |-
|
6
|
+
OTFkZTQzZWRiZmM5NTI0OWVhYjlmMTQwMThlODk3OTY5MGQyNTRkZA==
|
7
|
+
SHA512:
|
8
|
+
metadata.gz: !binary |-
|
9
|
+
YjY4NWE3ZWU1ZjZjYzIwZmEzNDI2MzIzZjQwOGFlZjVmN2E3NzgwZWNmZTE1
|
10
|
+
ZTI0ODEyZmMwZTY5ZTI0N2E5N2Q4M2I0MWUyODJkNGExNjllYzMyNDlhNDAz
|
11
|
+
Yjg4ZmJkN2M3NjM1NjlhMjA3ZDZhNDI4MzQ3NTU5ZjQ5Yjk3MjM=
|
12
|
+
data.tar.gz: !binary |-
|
13
|
+
Njk0ZjEzZGExOTY3ZGYxY2Y4ZTJkMDkyZDQ0Y2IzMWEwNTMxMDViYjA0NjFj
|
14
|
+
OWU1NDdlZTc5MzQ0YTFjMTUwY2VlYWU4MGM0MjMyMWNkYjRjYWQ2ZDg5OTVm
|
15
|
+
ZDg0MDA1Y2ZmZDNiZDcyZmFhYTI4NTMyODkxMzU5MTAzNTg5ZTM=
|
data/README.md
CHANGED
@@ -28,6 +28,10 @@ If you're working on the CLI and you can smoke-test your changes:
|
|
28
28
|
|
29
29
|
$ bundle exec turbot
|
30
30
|
|
31
|
+
If you need to do this from a different folder, try:
|
32
|
+
|
33
|
+
alias tb="RBENV_GEMSETS=.gems TURBOT_HOST=http://localhost:3000 RBENV_VERSION=[version] BUNDLE_GEMFILE=/path/to/turbot-client/Gemfile bundle exec turbot"
|
34
|
+
|
31
35
|
Meta
|
32
36
|
----
|
33
37
|
|
data/lib/turbot/auth.rb
CHANGED
@@ -206,7 +206,7 @@ class Turbot::Auth
|
|
206
206
|
delete_credentials
|
207
207
|
raise e
|
208
208
|
end
|
209
|
-
check_for_associated_ssh_key unless Turbot::Command.current_command == "keys:add"
|
209
|
+
# check_for_associated_ssh_key unless Turbot::Command.current_command == "keys:add"
|
210
210
|
@credentials
|
211
211
|
end
|
212
212
|
|
data/lib/turbot/command/bots.rb
CHANGED
@@ -6,6 +6,7 @@ require 'json-schema'
|
|
6
6
|
require 'open3'
|
7
7
|
require 'base64'
|
8
8
|
require 'shellwords'
|
9
|
+
require 'turbot_runner'
|
9
10
|
|
10
11
|
# manage bots (create, submit data and code)
|
11
12
|
#
|
@@ -92,14 +93,17 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
92
93
|
# Created new bot template at my_amazing_bot!
|
93
94
|
|
94
95
|
def generate
|
96
|
+
validate_arguments!
|
95
97
|
response = api.show_bot(bot)
|
96
98
|
if response.is_a? Turbot::API::SuccessResponse
|
97
|
-
error("There's already a bot called #{bot}")
|
99
|
+
error("There's already a bot called #{bot} registered with Turbot. Bot names must be unique.")
|
98
100
|
end
|
99
|
-
|
101
|
+
|
100
102
|
language = options[:language] || "ruby"
|
101
|
-
manifest_template = File.expand_path("../../../../templates/manifest.json", __FILE__)
|
102
103
|
scraper_template = File.expand_path("../../../../templates/#{language}", __FILE__)
|
104
|
+
error("unsupported language #{language}") if !File.exists?(scraper_template)
|
105
|
+
|
106
|
+
manifest_template = File.expand_path("../../../../templates/manifest.json", __FILE__)
|
103
107
|
license_template = File.expand_path("../../../../templates/LICENSE.txt", __FILE__)
|
104
108
|
manifest = open(manifest_template).read.sub("{{bot_id}}", bot)
|
105
109
|
scraper_name = case language
|
@@ -112,6 +116,10 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
112
116
|
manifest = manifest.sub("{{scraper_name}}", scraper_name)
|
113
117
|
|
114
118
|
# Language-specific stuff
|
119
|
+
# Language-specific stuff:
|
120
|
+
if File.exists? bot
|
121
|
+
error("There's already a folder called #{bot}; move it out the way or try a different name")
|
122
|
+
end
|
115
123
|
FileUtils.mkdir(bot)
|
116
124
|
FileUtils.cp_r(Dir["#{scraper_template}/*"], bot)
|
117
125
|
|
@@ -177,10 +185,10 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
177
185
|
#
|
178
186
|
# Validate bot output against its schema
|
179
187
|
#
|
180
|
-
# $
|
188
|
+
# $ turbot bots:validate
|
181
189
|
# Validating example... done
|
182
190
|
|
183
|
-
def validate
|
191
|
+
def validate
|
184
192
|
scraper_path = shift_argument || scraper_file(Dir.pwd)
|
185
193
|
validate_arguments!
|
186
194
|
config = parsed_manifest(Dir.pwd)
|
@@ -197,45 +205,29 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
197
205
|
error("No schema found for data_type: #{type}")
|
198
206
|
end
|
199
207
|
|
200
|
-
|
201
|
-
|
202
|
-
run_scraper_each_line("#{scraper_path} #{bot}") do |line|
|
203
|
-
errors = JSON::Validator.fully_validate(
|
204
|
-
schema,
|
205
|
-
line,
|
206
|
-
{:errors_as_objects => true})
|
207
|
-
|
208
|
-
if !errors.empty?
|
209
|
-
error("LINE WITH ERROR: #{line}\n\nERRORS: #{errors}")
|
210
|
-
end
|
211
|
-
puts line if opts[:dump]
|
212
|
-
if JSON.parse(line).slice(*config['identifying_fields']).blank?
|
213
|
-
error = "Couldn't find any of #{config['identifying_fields']}"
|
214
|
-
error("LINE WITH ERROR: #{line}\n\nERRORS: #{error}")
|
215
|
-
end
|
216
|
-
|
217
|
-
count += 1
|
218
|
-
end
|
219
|
-
puts "Validated #{count} records successfully!" if !opts[:dump]
|
208
|
+
runner = ValidationRunner.new(Dir.pwd)
|
209
|
+
runner.run
|
220
210
|
end
|
221
211
|
|
222
212
|
# bots:dump
|
223
213
|
#
|
224
214
|
# Execute bot locally (writes to STDOUT)
|
225
215
|
#
|
226
|
-
# $
|
216
|
+
# $ turbot bots:dump
|
227
217
|
# {'foo': 'bar'}
|
228
218
|
# {'foo2': 'bar2'}
|
229
219
|
|
230
220
|
def dump
|
231
|
-
|
221
|
+
validate_arguments!
|
222
|
+
runner = DumpRunner.new(Dir.pwd)
|
223
|
+
runner.run
|
232
224
|
end
|
233
225
|
|
234
226
|
# # bots:single
|
235
227
|
# #
|
236
228
|
# # Execute bot in same way as OpenCorporates single-record update
|
237
229
|
# #
|
238
|
-
# # $
|
230
|
+
# # $ turbot bots:single
|
239
231
|
# # Enter argument (as JSON object):
|
240
232
|
# # {"id": "frob123"}
|
241
233
|
# # {"id": "frob123", "stuff": "updated-data-for-this-record"}
|
@@ -261,98 +253,23 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
261
253
|
#
|
262
254
|
# Sending example to turbot... done
|
263
255
|
def preview
|
264
|
-
scraper_path = shift_argument || scraper_file(Dir.pwd)
|
265
256
|
validate_arguments!
|
266
257
|
|
267
|
-
batch = []
|
268
|
-
count = 0
|
269
258
|
config = parsed_manifest(Dir.pwd)
|
270
|
-
|
271
|
-
|
259
|
+
api.update_bot(bot, parsed_manifest(Dir.pwd))
|
272
260
|
api.destroy_draft_data(bot)
|
261
|
+
puts "Sending to turbot... "
|
273
262
|
|
274
|
-
|
275
|
-
|
276
|
-
|
277
|
-
result = ""
|
278
|
-
run_scraper_each_line("#{scraper_path} #{bot}") do |line|
|
279
|
-
spinner(count)
|
280
|
-
|
281
|
-
errors = JSON::Validator.fully_validate(
|
282
|
-
schema,
|
283
|
-
line,
|
284
|
-
{:errors_as_objects => true})
|
285
|
-
|
286
|
-
if errors.empty?
|
287
|
-
batch << JSON.parse(line)
|
288
|
-
if count % 20 == 0
|
289
|
-
result = api.create_draft_data(bot, config, batch.to_json)
|
290
|
-
batch = []
|
291
|
-
end
|
292
|
-
count += 1
|
293
|
-
else
|
294
|
-
puts "The following record was not sent to turbot because it didn't validate against the schema:"
|
295
|
-
puts line
|
296
|
-
puts "The validation error was:"
|
297
|
-
puts errors
|
298
|
-
end
|
299
|
-
|
300
|
-
end
|
301
|
-
if !batch.empty?
|
302
|
-
result = api.create_draft_data(bot, config, batch.to_json)
|
303
|
-
end
|
304
|
-
puts "Sent #{count} records."
|
305
|
-
puts "View your records at #{result.data[:url]}"
|
263
|
+
runner = PreviewRunner.new(bot, api)
|
264
|
+
runner.run
|
306
265
|
end
|
307
266
|
|
308
267
|
private
|
309
|
-
|
310
268
|
def spinner(p)
|
311
269
|
parts = "\|/-" * 2
|
312
270
|
print parts[p % parts.length] + "\r"
|
313
271
|
end
|
314
272
|
|
315
|
-
def run_scraper_each_line(scraper_path, options={})
|
316
|
-
case scraper_path
|
317
|
-
when /scraper.rb /
|
318
|
-
interpreter = "ruby"
|
319
|
-
when /scraper.py /
|
320
|
-
interpreter = "python"
|
321
|
-
else
|
322
|
-
raise "Unsupported file extension at #{scraper_path}"
|
323
|
-
end
|
324
|
-
|
325
|
-
command = "#{interpreter} #{scraper_path}"
|
326
|
-
Open3::popen3(command, options) do |_, stdout, stderr, wait_thread|
|
327
|
-
loop do
|
328
|
-
check_output_with_timeout(stdout)
|
329
|
-
|
330
|
-
begin
|
331
|
-
result = stdout.readline.strip
|
332
|
-
yield result unless result.empty?
|
333
|
-
# add run id and bot name
|
334
|
-
rescue EOFError
|
335
|
-
break
|
336
|
-
end
|
337
|
-
end
|
338
|
-
status = wait_thread.value.exitstatus
|
339
|
-
if status > 0
|
340
|
-
message = "Bot <#{command}> exited with status #{status}: #{stderr.read}"
|
341
|
-
raise RuntimeError.new(message)
|
342
|
-
end
|
343
|
-
end
|
344
|
-
end
|
345
|
-
|
346
|
-
def check_output_with_timeout(stdout, initial_interval = 10, timeout = 21600)
|
347
|
-
interval = initial_interval
|
348
|
-
loop do
|
349
|
-
reads, _, _ = IO.select([stdout], [], [], interval)
|
350
|
-
break if !reads.nil?
|
351
|
-
raise "Timeout! - could not read from external bot after #{timeout} seconds" if reads.nil? && interval > timeout
|
352
|
-
interval *= 2
|
353
|
-
end
|
354
|
-
end
|
355
|
-
|
356
273
|
def parsed_manifest(dir)
|
357
274
|
begin
|
358
275
|
JSON.parse(open(manifest_path).read)
|
@@ -374,3 +291,96 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
374
291
|
File.expand_path("../../../../schema/schemas/#{hyphenated_name}-schema.json", __FILE__)
|
375
292
|
end
|
376
293
|
end
|
294
|
+
|
295
|
+
class PreviewRunner < TurbotRunner::BaseRunner
|
296
|
+
def initialize(bot_name, api)
|
297
|
+
@bot_name = bot_name
|
298
|
+
@api = api
|
299
|
+
@batch = []
|
300
|
+
@count = 0
|
301
|
+
super(Dir.pwd)
|
302
|
+
end
|
303
|
+
|
304
|
+
def handle_valid_record(record, data_type)
|
305
|
+
#spinner(@count)
|
306
|
+
@count += 1
|
307
|
+
@batch << record
|
308
|
+
|
309
|
+
if @count % 20 == 0
|
310
|
+
result = submit_batch
|
311
|
+
end
|
312
|
+
end
|
313
|
+
|
314
|
+
def handle_invalid_record(record, data_type, errors)
|
315
|
+
puts
|
316
|
+
puts "The following record was not sent to turbot because it didn't validate against the schema:"
|
317
|
+
puts record.to_json
|
318
|
+
errors.each {|error| puts " * #{error}"}
|
319
|
+
puts
|
320
|
+
end
|
321
|
+
|
322
|
+
def handle_successful_run
|
323
|
+
result = submit_batch
|
324
|
+
puts "Sent #{@count} records."
|
325
|
+
puts "View your records at #{result.data[:url]}"
|
326
|
+
end
|
327
|
+
|
328
|
+
private
|
329
|
+
def submit_batch
|
330
|
+
result = @api.create_draft_data(@bot_name, @batch.to_json)
|
331
|
+
@batch = []
|
332
|
+
result
|
333
|
+
end
|
334
|
+
end
|
335
|
+
|
336
|
+
class DumpRunner < TurbotRunner::BaseRunner
|
337
|
+
def handle_valid_record(record, data_type)
|
338
|
+
puts record.to_json
|
339
|
+
end
|
340
|
+
|
341
|
+
def handle_invalid_record(record, data_type, errors)
|
342
|
+
puts
|
343
|
+
puts "The following record is invalid:"
|
344
|
+
puts record.to_json
|
345
|
+
errors.each {|error| puts " * #{error}"}
|
346
|
+
puts
|
347
|
+
end
|
348
|
+
|
349
|
+
def handle_failed_run(output)
|
350
|
+
puts "Bot did not run to completion:"
|
351
|
+
puts output
|
352
|
+
end
|
353
|
+
end
|
354
|
+
|
355
|
+
class ValidationRunner < TurbotRunner::BaseRunner
|
356
|
+
def initialize(*)
|
357
|
+
@count = 0
|
358
|
+
super
|
359
|
+
end
|
360
|
+
|
361
|
+
def handle_valid_record(record, data_type)
|
362
|
+
@count += 1
|
363
|
+
end
|
364
|
+
|
365
|
+
def handle_invalid_record(record, data_type, errors)
|
366
|
+
puts
|
367
|
+
puts "The following record is invalid:"
|
368
|
+
puts record.to_json
|
369
|
+
errors.each {|error| puts " * #{error}"}
|
370
|
+
puts
|
371
|
+
interrupt
|
372
|
+
end
|
373
|
+
|
374
|
+
def handle_failed_run(output)
|
375
|
+
puts "Bot did not run to completion:"
|
376
|
+
puts output
|
377
|
+
end
|
378
|
+
|
379
|
+
def handle_interrupted_run
|
380
|
+
puts "Validated #{@count} records before finding invalid record"
|
381
|
+
end
|
382
|
+
|
383
|
+
def handle_successful_run
|
384
|
+
puts "Validated #{@count} records"
|
385
|
+
end
|
386
|
+
end
|
data/lib/turbot/version.rb
CHANGED
@@ -0,0 +1,50 @@
|
|
1
|
+
{
|
2
|
+
"$schema": "http://json-schema.org/draft-04/schema#",
|
3
|
+
"title": "Simple Licence Schema",
|
4
|
+
"type": "object",
|
5
|
+
"properties": {
|
6
|
+
"source_url": {
|
7
|
+
"description": "Place where this fact can be verified",
|
8
|
+
"type": "string"
|
9
|
+
},
|
10
|
+
"sample_date": {
|
11
|
+
"description": "Date on which this fact was known to be true",
|
12
|
+
"type": "string"
|
13
|
+
},
|
14
|
+
"confidence": {
|
15
|
+
"description": "Confidence in accuracy of data",
|
16
|
+
"type": "string",
|
17
|
+
"enum": ["HIGH", "MEDIUM", "LOW"]
|
18
|
+
},
|
19
|
+
"company_name": {
|
20
|
+
"description": "Name of the company holding the licence",
|
21
|
+
"type": "string"
|
22
|
+
},
|
23
|
+
"company_jurisdiction": {
|
24
|
+
"description": "Jurisdiction where company is based",
|
25
|
+
"type": "string"
|
26
|
+
},
|
27
|
+
"licence_number": {
|
28
|
+
"description": "Licence number or code",
|
29
|
+
"type": "string"
|
30
|
+
},
|
31
|
+
"jurisdiction_classification": {
|
32
|
+
"description": "Description of how regulator classifies licence",
|
33
|
+
"type": "string"
|
34
|
+
},
|
35
|
+
"regulator": {
|
36
|
+
"description": "The regulating body that issued the licence",
|
37
|
+
"type": "string"
|
38
|
+
},
|
39
|
+
"licence_jurisdiction": {
|
40
|
+
"description": "Jurisdiction where licence is issued",
|
41
|
+
"type": "string"
|
42
|
+
},
|
43
|
+
"category": {
|
44
|
+
"description": "Category of licence",
|
45
|
+
"type": "string",
|
46
|
+
"enum": ["Financial"]
|
47
|
+
}
|
48
|
+
},
|
49
|
+
"required": ["source_url", "sample_date", "company_name", "company_jurisdiction"]
|
50
|
+
}
|
data/templates/manifest.json
CHANGED
data/templates/python/scraper.py
CHANGED
data/templates/ruby/scraper.rb
CHANGED
metadata
CHANGED
@@ -1,20 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbot
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.27
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Turbot
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date: 2014-06-
|
11
|
+
date: 2014-06-26 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: netrc
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
17
|
- - ~>
|
20
18
|
- !ruby/object:Gem::Version
|
@@ -22,7 +20,6 @@ dependencies:
|
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
24
|
- - ~>
|
28
25
|
- !ruby/object:Gem::Version
|
@@ -30,7 +27,6 @@ dependencies:
|
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: rest-client
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
31
|
- - ~>
|
36
32
|
- !ruby/object:Gem::Version
|
@@ -38,7 +34,6 @@ dependencies:
|
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
38
|
- - ~>
|
44
39
|
- !ruby/object:Gem::Version
|
@@ -46,7 +41,6 @@ dependencies:
|
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: launchy
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
45
|
- - ! '>='
|
52
46
|
- !ruby/object:Gem::Version
|
@@ -54,7 +48,6 @@ dependencies:
|
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
52
|
- - ! '>='
|
60
53
|
- !ruby/object:Gem::Version
|
@@ -62,7 +55,6 @@ dependencies:
|
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: rubyzip
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
59
|
- - ! '>='
|
68
60
|
- !ruby/object:Gem::Version
|
@@ -70,7 +62,6 @@ dependencies:
|
|
70
62
|
type: :runtime
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
66
|
- - ! '>='
|
76
67
|
- !ruby/object:Gem::Version
|
@@ -78,7 +69,6 @@ dependencies:
|
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: json-schema
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
73
|
- - ! '>='
|
84
74
|
- !ruby/object:Gem::Version
|
@@ -86,7 +76,6 @@ dependencies:
|
|
86
76
|
type: :runtime
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
80
|
- - ! '>='
|
92
81
|
- !ruby/object:Gem::Version
|
@@ -94,7 +83,6 @@ dependencies:
|
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: activesupport
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
87
|
- - '='
|
100
88
|
- !ruby/object:Gem::Version
|
@@ -102,7 +90,6 @@ dependencies:
|
|
102
90
|
type: :runtime
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
94
|
- - '='
|
108
95
|
- !ruby/object:Gem::Version
|
@@ -110,23 +97,34 @@ dependencies:
|
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: turbot-api
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
101
|
- - '='
|
116
102
|
- !ruby/object:Gem::Version
|
117
|
-
version: 0.0.
|
103
|
+
version: 0.0.11
|
118
104
|
type: :runtime
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
108
|
- - '='
|
124
109
|
- !ruby/object:Gem::Version
|
125
|
-
version: 0.0.
|
110
|
+
version: 0.0.11
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: turbot-runner
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - '='
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 0.0.2
|
118
|
+
type: :runtime
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - '='
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: 0.0.2
|
126
125
|
- !ruby/object:Gem::Dependency
|
127
126
|
name: excon
|
128
127
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
128
|
requirements:
|
131
129
|
- - ! '>='
|
132
130
|
- !ruby/object:Gem::Version
|
@@ -134,7 +132,6 @@ dependencies:
|
|
134
132
|
type: :runtime
|
135
133
|
prerelease: false
|
136
134
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
135
|
requirements:
|
139
136
|
- - ! '>='
|
140
137
|
- !ruby/object:Gem::Version
|
@@ -178,6 +175,23 @@ files:
|
|
178
175
|
- lib/turbot/updater.rb
|
179
176
|
- lib/turbot/version.rb
|
180
177
|
- lib/vendor/turbot/okjson.rb
|
178
|
+
- schema/schemas/company-schema.json
|
179
|
+
- schema/schemas/includes/address.json
|
180
|
+
- schema/schemas/includes/base-statement.json
|
181
|
+
- schema/schemas/includes/company.json
|
182
|
+
- schema/schemas/includes/filing.json
|
183
|
+
- schema/schemas/includes/license-data.json
|
184
|
+
- schema/schemas/includes/officer.json
|
185
|
+
- schema/schemas/includes/previous_name.json
|
186
|
+
- schema/schemas/includes/share-parcel-data.json
|
187
|
+
- schema/schemas/includes/share-parcel.json
|
188
|
+
- schema/schemas/includes/subsidiary-relationship-data.json
|
189
|
+
- schema/schemas/includes/total-shares.json
|
190
|
+
- schema/schemas/licence-schema.json
|
191
|
+
- schema/schemas/primary-data-schema.json
|
192
|
+
- schema/schemas/share-parcel-schema.json
|
193
|
+
- schema/schemas/simple-licence-schema.json
|
194
|
+
- schema/schemas/subsidiary-relationship-schema.json
|
181
195
|
- spec/helper/legacy_help.rb
|
182
196
|
- spec/helper/pg_dump_restore_spec.rb
|
183
197
|
- spec/schemas/dummy_schema.json
|
@@ -211,45 +225,29 @@ files:
|
|
211
225
|
- templates/manifest.json
|
212
226
|
- templates/python/scraper.py
|
213
227
|
- templates/ruby/scraper.rb
|
214
|
-
- schema/schemas/company-schema.json
|
215
|
-
- schema/schemas/includes/address.json
|
216
|
-
- schema/schemas/includes/base-statement.json
|
217
|
-
- schema/schemas/includes/company.json
|
218
|
-
- schema/schemas/includes/filing.json
|
219
|
-
- schema/schemas/includes/license-data.json
|
220
|
-
- schema/schemas/includes/officer.json
|
221
|
-
- schema/schemas/includes/previous_name.json
|
222
|
-
- schema/schemas/includes/share-parcel-data.json
|
223
|
-
- schema/schemas/includes/share-parcel.json
|
224
|
-
- schema/schemas/includes/subsidiary-relationship-data.json
|
225
|
-
- schema/schemas/includes/total-shares.json
|
226
|
-
- schema/schemas/licence-schema.json
|
227
|
-
- schema/schemas/primary-data-schema.json
|
228
|
-
- schema/schemas/share-parcel-schema.json
|
229
|
-
- schema/schemas/subsidiary-relationship-schema.json
|
230
228
|
homepage: http://turbot.com/
|
231
229
|
licenses:
|
232
230
|
- MIT
|
231
|
+
metadata: {}
|
233
232
|
post_install_message:
|
234
233
|
rdoc_options: []
|
235
234
|
require_paths:
|
236
235
|
- lib
|
237
236
|
required_ruby_version: !ruby/object:Gem::Requirement
|
238
|
-
none: false
|
239
237
|
requirements:
|
240
238
|
- - ! '>='
|
241
239
|
- !ruby/object:Gem::Version
|
242
240
|
version: 1.9.2
|
243
241
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
244
|
-
none: false
|
245
242
|
requirements:
|
246
243
|
- - ! '>='
|
247
244
|
- !ruby/object:Gem::Version
|
248
245
|
version: '0'
|
249
246
|
requirements: []
|
250
247
|
rubyforge_project:
|
251
|
-
rubygems_version:
|
248
|
+
rubygems_version: 2.2.2
|
252
249
|
signing_key:
|
253
|
-
specification_version:
|
250
|
+
specification_version: 4
|
254
251
|
summary: Client library and CLI to deploy apps on Turbot.
|
255
252
|
test_files: []
|
253
|
+
has_rdoc:
|