turbot 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/command/bots.rb +29 -17
- data/lib/turbot/version.rb +1 -1
- data/spec/turbot/command/bots_spec.rb +36 -1
- metadata +17 -2
checksums.yaml
CHANGED
@@ -1,15 +1,15 @@
|
|
1
1
|
---
|
2
2
|
!binary "U0hBMQ==":
|
3
3
|
metadata.gz: !binary |-
|
4
|
-
|
4
|
+
MTBlYjBjNWI0NzVjOWJjZTIwMjJkNGIzOGVjYzY3OTk1MGEwMzg1YQ==
|
5
5
|
data.tar.gz: !binary |-
|
6
|
-
|
6
|
+
YTU2NzI1ZDMyZDg5ZGJmZTdiZWUyNWQ2YmE1OTQ4ODQ0MmYxYTZiYw==
|
7
7
|
SHA512:
|
8
8
|
metadata.gz: !binary |-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
YTUwZTI0OThlZDg0NTY3NGFjZDMxNzVmYzgzYzc1MWM3NWI2OWQxMjU5Yzgx
|
10
|
+
ZjAxMGNiN2NmYzM4NDE4ODU3YTc4MGE4MDU3OTVlYzI1YzU4YmZjMDAzMzFm
|
11
|
+
NjZiNjUwYzgzNWQ3YjkwN2IxZWE0MzgzZGRkZjQwYjJiY2Q2M2E=
|
12
12
|
data.tar.gz: !binary |-
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
NTNiYjBjNjIyMjk0NWM2NjJiYTQ4ZTdmYTE3MGM2YmRmZmVmZTg2YjdjZDli
|
14
|
+
MjE0YmU5NDJiZTNlY2U1YjRiMWMyMmZhMGI5NGJkNzhhMmViM2VhMzZhMzA5
|
15
|
+
ZDRkMmU0MjI0ZGQwM2QzZWJkOWI1NzRiY2JjYTg2OGRiMjdhOGI=
|
data/lib/turbot/command/bots.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require "turbot/command/base"
|
2
|
+
require 'active_support/core_ext/object/blank'
|
3
|
+
require 'active_support/core_ext/hash/slice'
|
2
4
|
require 'zip'
|
3
5
|
require 'json-schema'
|
4
6
|
require 'open3'
|
@@ -22,10 +24,10 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
22
24
|
#
|
23
25
|
def index
|
24
26
|
validate_arguments!
|
25
|
-
bots = api.
|
27
|
+
bots = api.list_bots
|
26
28
|
unless bots.empty?
|
27
29
|
styled_header("Bots")
|
28
|
-
styled_array(bots.map{|
|
30
|
+
styled_array(bots.map{|bot| bot['bot_id']})
|
29
31
|
else
|
30
32
|
display("You have no bots.")
|
31
33
|
end
|
@@ -90,9 +92,10 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
90
92
|
# Created new bot template at my_amazing_bot!
|
91
93
|
|
92
94
|
def generate
|
95
|
+
puts "running generate"
|
93
96
|
validate_arguments!
|
94
97
|
language = options[:language] || "ruby"
|
95
|
-
puts "Generating #{language}
|
98
|
+
puts "Generating #{language} code..."
|
96
99
|
FileUtils.mkdir(bot)
|
97
100
|
case language
|
98
101
|
when "ruby"
|
@@ -102,11 +105,17 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
102
105
|
end
|
103
106
|
manifest_template = File.expand_path("../../../../templates/manifest.json", __FILE__)
|
104
107
|
scraper_template = File.expand_path("../../../../templates/#{scraper}", __FILE__)
|
105
|
-
manifest = open(manifest_template).read.sub(/{{bot_id}}/, bot)
|
108
|
+
manifest = JSON.parse(open(manifest_template).read.sub(/{{bot_id}}/, bot))
|
109
|
+
|
106
110
|
FileUtils.cp(scraper_template, "#{bot}/#{scraper}")
|
107
111
|
open("#{bot}/manifest.json", "w") do |f|
|
108
|
-
f.write(manifest)
|
112
|
+
f.write(manifest.to_json)
|
109
113
|
end
|
114
|
+
|
115
|
+
api.create_bot(bot, manifest)
|
116
|
+
|
117
|
+
# TODO handle errors
|
118
|
+
|
110
119
|
puts "Created new bot template at #{bot}!"
|
111
120
|
end
|
112
121
|
|
@@ -134,11 +143,7 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
134
143
|
end
|
135
144
|
|
136
145
|
File.open(archive_path) do |file|
|
137
|
-
|
138
|
-
"bot[archive]" => file,
|
139
|
-
"bot[manifest]" => manifest
|
140
|
-
}
|
141
|
-
api.post_bot(params)
|
146
|
+
api.update_code(bot, file)
|
142
147
|
end
|
143
148
|
end
|
144
149
|
|
@@ -155,6 +160,11 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
155
160
|
scraper_path = shift_argument || scraper_file(Dir.pwd)
|
156
161
|
validate_arguments!
|
157
162
|
config = parsed_manifest(Dir.pwd)
|
163
|
+
|
164
|
+
%w(bot_id data_type identifying_fields files).each do |key|
|
165
|
+
error("Manifest is missing #{key}") unless config.has_key?(key)
|
166
|
+
end
|
167
|
+
|
158
168
|
type = config["data_type"]
|
159
169
|
|
160
170
|
schema = get_schema(type)
|
@@ -166,7 +176,6 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
166
176
|
count = 0
|
167
177
|
|
168
178
|
run_scraper_each_line("#{scraper_path} #{bot}") do |line|
|
169
|
-
errors = ""
|
170
179
|
errors = JSON::Validator.fully_validate(
|
171
180
|
schema,
|
172
181
|
line,
|
@@ -175,6 +184,11 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
175
184
|
if !errors.empty?
|
176
185
|
error("LINE WITH ERROR: #{line}\n\nERRORS: #{errors}")
|
177
186
|
end
|
187
|
+
|
188
|
+
if JSON.parse(line).slice(*config['identifying_fields']).blank?
|
189
|
+
error("LINE WITH ERROR: #{line}\n\nERRORS: No value provided for identifying fields")
|
190
|
+
end
|
191
|
+
|
178
192
|
count += 1
|
179
193
|
end
|
180
194
|
puts "Validated #{count} records successfully!"
|
@@ -232,27 +246,25 @@ class Turbot::Command::Bots < Turbot::Command::Base
|
|
232
246
|
scraper_path = shift_argument || scraper_file(Dir.pwd)
|
233
247
|
validate_arguments!
|
234
248
|
|
235
|
-
bots = api.get_bots
|
236
|
-
raise "You have not pushed your bot" unless bots.include?(bot)
|
237
|
-
|
238
249
|
batch = []
|
239
250
|
count = 0
|
251
|
+
config = parsed_manifest(Dir.pwd)
|
240
252
|
puts "Sending to angler... "
|
241
253
|
result = ""
|
242
254
|
run_scraper_each_line("#{scraper_path} #{bot}") do |line|
|
243
255
|
batch << JSON.parse(line)
|
244
256
|
spinner(count)
|
245
257
|
if count % 20 == 0
|
246
|
-
result = api.
|
258
|
+
result = api.update_draft_data(bot, config, batch.to_json)
|
247
259
|
batch = []
|
248
260
|
end
|
249
261
|
count += 1
|
250
262
|
end
|
251
263
|
if !batch.empty?
|
252
|
-
result = api.
|
264
|
+
result = api.update_draft_data(bot, config, batch.to_json)
|
253
265
|
end
|
254
266
|
puts "Sent #{count} records."
|
255
|
-
puts "View your records at #{
|
267
|
+
puts "View your records at #{result['url']}"
|
256
268
|
end
|
257
269
|
|
258
270
|
private
|
data/lib/turbot/version.rb
CHANGED
@@ -4,7 +4,13 @@ require "turbot/command/bots"
|
|
4
4
|
describe Turbot::Command::Bots do
|
5
5
|
describe "validate" do
|
6
6
|
before do
|
7
|
-
|
7
|
+
config = {
|
8
|
+
'bot_id' => 'dummy bot',
|
9
|
+
'data_type' => 'dummy',
|
10
|
+
'identifying_fields' => ['name'],
|
11
|
+
'files' => 'scraper.rb',
|
12
|
+
}
|
13
|
+
Turbot::Command::Bots.any_instance.stub(:parsed_manifest).and_return(config)
|
8
14
|
end
|
9
15
|
|
10
16
|
context "for data_type with schema" do
|
@@ -36,6 +42,19 @@ describe Turbot::Command::Bots do
|
|
36
42
|
stdout.should == ""
|
37
43
|
stderr.should include 'ERRORS'
|
38
44
|
end
|
45
|
+
|
46
|
+
context "for bot that doesn't output identifying fields" do
|
47
|
+
it "says bot is invalid" do
|
48
|
+
Turbot::Command::Bots.any_instance.
|
49
|
+
stub(:run_scraper_each_line).
|
50
|
+
and_yield({title: 'One'}.to_json)
|
51
|
+
|
52
|
+
stderr, stdout = execute("bots:validate")
|
53
|
+
|
54
|
+
stdout.should == ""
|
55
|
+
stderr.should include 'No value provided for identifying fields'
|
56
|
+
end
|
57
|
+
end
|
39
58
|
end
|
40
59
|
|
41
60
|
context "for data_type without schema" do
|
@@ -50,5 +69,21 @@ describe Turbot::Command::Bots do
|
|
50
69
|
stderr.should include 'No schema found'
|
51
70
|
end
|
52
71
|
end
|
72
|
+
|
73
|
+
context "for bot with manifest missing some required fields" do
|
74
|
+
it "says bot is invalid" do
|
75
|
+
config = {
|
76
|
+
'bot_id' => 'dummy bot',
|
77
|
+
'identifying_fields' => ['name'],
|
78
|
+
'files' => 'scraper.rb',
|
79
|
+
}
|
80
|
+
Turbot::Command::Bots.any_instance.stub(:parsed_manifest).and_return(config)
|
81
|
+
|
82
|
+
stderr, stdout = execute("bots:validate")
|
83
|
+
|
84
|
+
stdout.should == ""
|
85
|
+
stderr.should include 'Manifest is missing data_type'
|
86
|
+
end
|
87
|
+
end
|
53
88
|
end
|
54
89
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: turbot
|
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
|
- Turbot
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-06-03 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: netrc
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - ! '>='
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: activesupport
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ~>
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 4.0.3
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ~>
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 4.0.3
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: turbot-api
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,3 +211,4 @@ signing_key:
|
|
197
211
|
specification_version: 4
|
198
212
|
summary: Client library and CLI to deploy apps on Turbot.
|
199
213
|
test_files: []
|
214
|
+
has_rdoc:
|