turbot 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
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: