turbot 0.2.0 → 0.2.1

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 CHANGED
@@ -1,7 +1,15 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 3f0ab307a669b16bddf151198102baf92d2a7cde
4
- data.tar.gz: 687db33bf9d6c883fd34df56116bfdd41dff4db8
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ YmMyOTU2MTY5ZTEwYWU5ZTFhMTlhNDQ5ODA0NDBmYzE0MmJhYjU2NA==
5
+ data.tar.gz: !binary |-
6
+ NmQ4NWJhMWE0ZTA3N2FiNGE0OGExM2ZkYzdhY2ExNzFhYTNjYTExOA==
5
7
  SHA512:
6
- metadata.gz: ebee66e048f815818f5263b84817c9dd0b0b95d5828f420e26c86a427cecb2ef8e266643559d2834dd8bcbc9f429c306d6ed96490ed2d726fb4ff0102d3d28f3
7
- data.tar.gz: f2d2eb912d29965e70b53412ae210d78128d6a8d39e999f43668464486ca7984213f04f1e545591ea9adba18a71504d18184332743f9253fb95ab14da362c8a3
8
+ metadata.gz: !binary |-
9
+ YTNkNmRkYTk0N2VkZDk3MWNhMTk5NGEyMzM2Zjg4M2Q2MTQ4Njg4MWU3MGM0
10
+ NWQ1YmYzN2Y5MzJkOTI2ZGU1N2U0MjZkYjE4OTNhMWE4YjA4MDVmZDAzOTRj
11
+ MDNkNDc3ZTY2ZTE2NWZkZjViMzg3YmEyMDU0ZGU4MmQyNTg5ZDc=
12
+ data.tar.gz: !binary |-
13
+ ODNkZGZlOWY1MDU1ZmM4MjZkNGU4ODhmOGE1ZmY4YWRjOTg4MjQzZTRhMDNj
14
+ MzY3ZTg4MjJlNTQyNmMyM2I1N2Y5NTNhYWMyMTQzM2U2NjM0Mzk3NmEyZDg1
15
+ YmFkNWI1Y2UzY2QxMWEzODQ4ODJhZGQwNGRjMjU3MjQyNWRkMTE=
@@ -43,7 +43,7 @@ protected
43
43
 
44
44
  help = extract_help_from_caller(caller.first)
45
45
  resolved_method = (method.to_s == "index") ? nil : method.to_s
46
- command = [ self.namespace, resolved_method ].compact.join(":")
46
+ command = [self.namespace, resolved_method].compact.join(":")
47
47
  banner = extract_banner(help) || command
48
48
 
49
49
  Turbot::Command.register_command(
@@ -273,6 +273,8 @@ class Turbot::Command::Bots < Turbot::Command::Base
273
273
  #
274
274
  #Execute the bot locally and write the bot's output to STDOUT.
275
275
  #
276
+ # -q, --quiet # only output validation errors
277
+ #
276
278
  #Example:
277
279
  #
278
280
  # $ turbot bots:dump
@@ -283,7 +285,11 @@ class Turbot::Command::Bots < Turbot::Command::Base
283
285
  validate_arguments!
284
286
  error_if_no_local_bot_found
285
287
 
286
- handler = Turbot::Handlers::DumpHandler.new
288
+ if options[:quiet]
289
+ handler = Turbot::Handlers::BaseHandler.new
290
+ else
291
+ handler = Turbot::Handlers::DumpHandler.new
292
+ end
287
293
  runner = TurbotRunner::Runner.new(working_directory, :record_handler => handler)
288
294
  rc = runner.run
289
295
 
@@ -48,7 +48,7 @@ private
48
48
  def help_for(items, name_key, description_key)
49
49
  size = items.map { |namespace| namespace[name_key].size }.max
50
50
  items.sort_by { |namespace| namespace[name_key] }.each do |namespace|
51
- puts " %-#{size}s # %s" % [ namespace[name_key], namespace[description_key] ]
51
+ puts " %-#{size}s # %s" % [namespace[name_key], namespace[description_key]]
52
52
  end
53
53
  end
54
54
 
@@ -57,8 +57,7 @@ module Turbot
57
57
  end
58
58
 
59
59
  def self.prepare_run(cmd, args=[])
60
- command = parse(cmd)
61
-
60
+ command = commands[cmd] || commands[command_aliases[cmd]]
62
61
  @current_command = cmd
63
62
 
64
63
  opts = {}
@@ -66,12 +65,14 @@ module Turbot
66
65
 
67
66
  parser = OptionParser.new do |parser|
68
67
  # remove OptionParsers Officious['version'] to avoid conflicts
69
- # see: https://github.com/ruby/ruby/blob/trunk/lib/optparse.rb#L814
68
+ # see: https://github.com/ruby/ruby/blob/6860034546808d4f67ba8f407f3d7aced0c54c5a/lib/optparse.rb#L989
70
69
  parser.base.long.delete('version')
71
- (command && command[:options] || []).each do |option|
72
- parser.on(*option[:args]) do |value|
73
- opts[option[:name].gsub('-', '_').to_sym] = value
74
- ARGV.join(' ') =~ /(#{option[:args].map {|arg| arg.split(' ', 2).first}.join('|')})/
70
+ if command && command[:options]
71
+ command[:options].each do |option|
72
+ parser.on(*option[:args]) do |value|
73
+ opts[option[:name].gsub('-', '_').to_sym] = value
74
+ ARGV.join(' ') =~ /(#{option[:args].map {|arg| arg.split(' ', 2).first}.join('|')})/
75
+ end
75
76
  end
76
77
  end
77
78
  end
@@ -86,12 +87,11 @@ module Turbot
86
87
  end
87
88
 
88
89
  args.concat(invalid_options)
89
-
90
90
  @invalid_arguments = invalid_options
91
91
 
92
92
  if command
93
93
  command_instance = command[:klass].new(args.dup, opts.dup)
94
- [ command_instance, command[:method] ]
94
+ [command_instance, command[:method]]
95
95
  else
96
96
  error([
97
97
  "`#{cmd}` is not a turbot command.",
@@ -102,14 +102,8 @@ module Turbot
102
102
  end
103
103
 
104
104
  def self.run(command, arguments=[])
105
- begin
106
- object, method = prepare_run(command, arguments.dup)
107
- object.send(method)
108
- rescue Interrupt, StandardError, SystemExit => error
109
- # load likely error classes, as they may not be loaded yet due to defered loads
110
- require 'rest_client'
111
- raise(error)
112
- end
105
+ object, method = prepare_run(command, arguments.dup)
106
+ object.send(method)
113
107
  rescue SocketError => e
114
108
  error 'Unable to connect to Turbot API, please check internet connectivity and try again.'
115
109
  rescue OptionParser::ParseError
@@ -120,10 +114,6 @@ module Turbot
120
114
  end
121
115
  end
122
116
 
123
- def self.parse(command)
124
- commands[command] || commands[command_aliases[command]]
125
- end
126
-
127
117
  def self.extract_error(body, options = {})
128
118
  if block_given?
129
119
  default_error = yield
@@ -1,3 +1,3 @@
1
1
  module Turbot
2
- VERSION = '0.2.0'
2
+ VERSION = '0.2.1'
3
3
  end
@@ -65,10 +65,12 @@ module BotHelper
65
65
  end
66
66
  end
67
67
 
68
- def create_scraper_file(bot_directory, record = {'name' => 'foo'})
68
+ def create_scraper_file(bot_directory, records = [{'name' => 'foo'}])
69
69
  File.open(File.join(bot_directory, 'scraper.rb'), 'w') do |f|
70
70
  f.write("require 'json'\n")
71
- f.write("puts JSON.dump(#{record.inspect})\n")
71
+ records.each do |record|
72
+ f.write("puts JSON.dump(#{record.inspect})\n")
73
+ end
72
74
  end
73
75
  end
74
76
 
@@ -330,7 +330,7 @@ STDOUT
330
330
  it 'reports invalid records' do
331
331
  bot_directory = create_bot_directory
332
332
  create_manifest_file(bot_directory)
333
- create_scraper_file(bot_directory, {'name' => 1})
333
+ create_scraper_file(bot_directory, [{'name' => 1}])
334
334
 
335
335
  stderr, stdout = execute_in_directory('bots:validate', bot_directory)
336
336
 
@@ -348,7 +348,7 @@ STDOUT
348
348
  it 'reports invalid JSON' do
349
349
  bot_directory = create_bot_directory
350
350
  create_manifest_file(bot_directory)
351
- create_scraper_file(bot_directory, '{')
351
+ create_scraper_file(bot_directory, ['{'])
352
352
 
353
353
  stderr, stdout = execute_in_directory('bots:validate', bot_directory)
354
354
 
@@ -364,7 +364,7 @@ STDOUT
364
364
  it 'reports records without identifying fields' do
365
365
  bot_directory = create_bot_directory
366
366
  create_manifest_file(bot_directory)
367
- create_scraper_file(bot_directory, {})
367
+ create_scraper_file(bot_directory, [{}])
368
368
 
369
369
  stderr, stdout = execute_in_directory('bots:validate', bot_directory)
370
370
 
@@ -550,6 +550,28 @@ Bot ran successfully!
550
550
  STDOUT
551
551
  end
552
552
 
553
+ it 'reports only validation errors' do
554
+ set_turbot_runner_schemas
555
+
556
+ bot_directory = create_bot_directory
557
+ create_manifest_file(bot_directory)
558
+ create_scraper_file(bot_directory, [{'name' => 'foo'}, {'name' => 1}])
559
+
560
+ allow_any_instance_of(Turbot::Command::Base).to receive(:working_directory).and_return(bot_directory)
561
+ stderr, stdout = execute('bots:dump --quiet')
562
+ restore_working_directory_method
563
+
564
+ expect(stderr).to eq('')
565
+ expect(stdout).to eq <<-STDOUT
566
+
567
+ The following record is invalid:
568
+ {"name":1}
569
+ * Property of wrong type: name (must be of type string)
570
+
571
+ Bot failed!
572
+ STDOUT
573
+ end
574
+
553
575
  it 'errors if no local bot is found' do
554
576
  stderr, stdout = execute('bots:dump')
555
577
 
metadata CHANGED
@@ -1,153 +1,153 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: turbot
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - OpenCorporates
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-10 00:00:00.000000000 Z
11
+ date: 2016-02-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: netrc
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - "~>"
17
+ - - ~>
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0.11'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - "~>"
24
+ - - ~>
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.11'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: json-schema
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ~>
32
32
  - !ruby/object:Gem::Version
33
33
  version: 2.6.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ~>
39
39
  - !ruby/object:Gem::Version
40
40
  version: 2.6.0
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rubyzip
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - ! '>='
46
46
  - !ruby/object:Gem::Version
47
47
  version: 1.0.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - ! '>='
53
53
  - !ruby/object:Gem::Version
54
54
  version: 1.0.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: text
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "~>"
59
+ - - ~>
60
60
  - !ruby/object:Gem::Version
61
61
  version: 1.3.1
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - "~>"
66
+ - - ~>
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.3.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: turbot-api
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ~>
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.0.17
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
- - - "~>"
80
+ - - ~>
81
81
  - !ruby/object:Gem::Version
82
82
  version: 0.0.17
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: turbot-runner
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
- - - "~>"
87
+ - - ~>
88
88
  - !ruby/object:Gem::Version
89
89
  version: 0.2.7
90
90
  type: :runtime
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
- - - "~>"
94
+ - - ~>
95
95
  - !ruby/object:Gem::Version
96
96
  version: 0.2.7
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: coveralls
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
- - - ">="
101
+ - - ! '>='
102
102
  - !ruby/object:Gem::Version
103
103
  version: '0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
- - - ">="
108
+ - - ! '>='
109
109
  - !ruby/object:Gem::Version
110
110
  version: '0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rake
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
- - - ">="
115
+ - - ! '>='
116
116
  - !ruby/object:Gem::Version
117
117
  version: '0'
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
- - - ">="
122
+ - - ! '>='
123
123
  - !ruby/object:Gem::Version
124
124
  version: '0'
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
- - - "~>"
129
+ - - ~>
130
130
  - !ruby/object:Gem::Version
131
131
  version: '3.4'
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
- - - "~>"
136
+ - - ~>
137
137
  - !ruby/object:Gem::Version
138
138
  version: '3.4'
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: webmock
141
141
  requirement: !ruby/object:Gem::Requirement
142
142
  requirements:
143
- - - ">="
143
+ - - ! '>='
144
144
  - !ruby/object:Gem::Version
145
145
  version: '0'
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - ">="
150
+ - - ! '>='
151
151
  - !ruby/object:Gem::Version
152
152
  version: '0'
153
153
  description:
@@ -157,9 +157,9 @@ executables:
157
157
  extensions: []
158
158
  extra_rdoc_files: []
159
159
  files:
160
- - ".gitignore"
161
- - ".rspec"
162
- - ".travis.yml"
160
+ - .gitignore
161
+ - .rspec
162
+ - .travis.yml
163
163
  - Gemfile
164
164
  - LICENSE
165
165
  - README.md
@@ -231,17 +231,17 @@ require_paths:
231
231
  - lib
232
232
  required_ruby_version: !ruby/object:Gem::Requirement
233
233
  requirements:
234
- - - ">="
234
+ - - ! '>='
235
235
  - !ruby/object:Gem::Version
236
236
  version: 1.9.2
237
237
  required_rubygems_version: !ruby/object:Gem::Requirement
238
238
  requirements:
239
- - - ">="
239
+ - - ! '>='
240
240
  - !ruby/object:Gem::Version
241
241
  version: '0'
242
242
  requirements: []
243
243
  rubyforge_project:
244
- rubygems_version: 2.4.5
244
+ rubygems_version: 2.5.2
245
245
  signing_key:
246
246
  specification_version: 4
247
247
  summary: Client library and CLI to deploy and manage bots on Turbot
@@ -262,4 +262,3 @@ test_files:
262
262
  - spec/turbot/command/help_spec.rb
263
263
  - spec/turbot/command/version_spec.rb
264
264
  - spec/turbot/command_spec.rb
265
- has_rdoc: