turbot 0.0.22 → 0.0.23

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 ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTFkYjQ5ODY3ZGNiNjY1OWZiZjUxNDI0ODIzZjY5ZDVkNjQ3MTY4Yg==
5
+ data.tar.gz: !binary |-
6
+ MGZlYWVkODdhNmE2ZmRmMTI5ODI4Y2E3ZWY4NmNjZjQwNjgzYzJkZA==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ NTkzODA2NjM4OWE3ZTkwNGE2NWQ1NTE5NDJkY2JmYTY0MjJlNzY1MWFkODM2
10
+ ZDQzZTA0YmM2MTc4ODhkZGI0ZDQ5ZjE0ODllOTAwYmM0ZWU1NzdlNzVmOTQ4
11
+ MGY1OTVlZDM4OWNhNjA3ZWFiYjY0MTIwNTc1ZjczOWQ1NzE1Mjk=
12
+ data.tar.gz: !binary |-
13
+ YzgyNmMzZGI2OTg2MzRhMWMzZTdmNjA3MjU5MjYwYWM2ZDVjOGM3NTk0YmYy
14
+ NGRmMGNkY2JkMDFiYzE0MDg4MGY3YmFmY2FiN2EzYjM5NDMwNjJkNzZkNzYx
15
+ YTIxNDc5Y2M0OTg4N2M4NTgwYjBhMjkxZmU2OWNmZTRiMmI4MDM=
@@ -7,7 +7,7 @@ require 'open3'
7
7
  require 'base64'
8
8
  require 'shellwords'
9
9
 
10
- # manage bots (create, destroy)
10
+ # manage bots (create, submit data and code)
11
11
  #
12
12
  class Turbot::Command::Bots < Turbot::Command::Base
13
13
 
@@ -209,7 +209,8 @@ class Turbot::Command::Bots < Turbot::Command::Base
209
209
  end
210
210
  puts line if opts[:dump]
211
211
  if JSON.parse(line).slice(*config['identifying_fields']).blank?
212
- error("LINE WITH ERROR: #{line}\n\nERRORS: No value provided for identifying fields")
212
+ error = "Couldn't find any of #{config['identifying_fields']}"
213
+ error("LINE WITH ERROR: #{line}\n\nERRORS: #{error}")
213
214
  end
214
215
 
215
216
  count += 1
@@ -229,28 +230,28 @@ class Turbot::Command::Bots < Turbot::Command::Base
229
230
  validate(:dump => true)
230
231
  end
231
232
 
232
- # bots:single
233
- #
234
- # Execute bot in same way as OpenCorporates single-record update
235
- #
236
- # $ heroku bots:single
237
- # Enter argument (as JSON object):
238
- # {"id": "frob123"}
239
- # {"id": "frob123", "stuff": "updated-data-for-this-record"}
240
-
241
- def single
242
- # This will need to be language-aware, eventually
243
- scraper_path = shift_argument || scraper_file(Dir.pwd)
244
- validate_arguments!
245
- print 'Arguments (as JSON object, e.g. {"id":"ABC123"}: '
246
- arg = ask
247
- count = 0
248
- run_scraper_each_line("#{scraper_path} #{bot} #{Shellwords.shellescape(arg)}") do |line|
249
- raise "Your scraper returned more than one value!" if count > 1
250
- puts line
251
- count += 1
252
- end
253
- end
233
+ # # bots:single
234
+ # #
235
+ # # Execute bot in same way as OpenCorporates single-record update
236
+ # #
237
+ # # $ heroku bots:single
238
+ # # Enter argument (as JSON object):
239
+ # # {"id": "frob123"}
240
+ # # {"id": "frob123", "stuff": "updated-data-for-this-record"}
241
+ #
242
+ # def single
243
+ # # This will need to be language-aware, eventually
244
+ # scraper_path = shift_argument || scraper_file(Dir.pwd)
245
+ # validate_arguments!
246
+ # print 'Arguments (as JSON object, e.g. {"id":"ABC123"}: '
247
+ # arg = ask
248
+ # count = 0
249
+ # run_scraper_each_line("#{scraper_path} #{bot} #{Shellwords.shellescape(arg)}") do |line|
250
+ # raise "Your scraper returned more than one value!" if count > 1
251
+ # puts line
252
+ # count += 1
253
+ # end
254
+ # end
254
255
 
255
256
 
256
257
  # bots:preview
@@ -269,14 +270,31 @@ class Turbot::Command::Bots < Turbot::Command::Base
269
270
 
270
271
  api.destroy_draft_data(bot)
271
272
 
273
+ type = config["data_type"]
274
+ schema = get_schema(type)
275
+
272
276
  result = ""
273
277
  run_scraper_each_line("#{scraper_path} #{bot}") do |line|
274
- batch << JSON.parse(line)
275
278
  spinner(count)
276
- if count % 20 == 0
277
- result = api.create_draft_data(bot, config, batch.to_json)
278
- batch = []
279
+
280
+ errors = JSON::Validator.fully_validate(
281
+ schema,
282
+ line,
283
+ {:errors_as_objects => true})
284
+
285
+ if errors.empty?
286
+ batch << JSON.parse(line)
287
+ if count % 20 == 0
288
+ result = api.create_draft_data(bot, config, batch.to_json)
289
+ batch = []
290
+ end
291
+ else
292
+ puts "The following record was not sent to turbot because it didn't validate against the schema:"
293
+ puts line
294
+ puts "The validation error was:"
295
+ puts errors
279
296
  end
297
+
280
298
  count += 1
281
299
  end
282
300
  if !batch.empty?
@@ -1,3 +1,3 @@
1
1
  module Turbot
2
- VERSION = "0.0.22"
2
+ VERSION = "0.0.23"
3
3
  end
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.22
5
- prerelease:
4
+ version: 0.0.23
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-13 00:00:00.000000000 Z
11
+ date: 2014-06-14 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,7 +97,6 @@ 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
@@ -118,7 +104,6 @@ dependencies:
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
@@ -126,7 +111,6 @@ dependencies:
126
111
  - !ruby/object:Gem::Dependency
127
112
  name: excon
128
113
  requirement: !ruby/object:Gem::Requirement
129
- none: false
130
114
  requirements:
131
115
  - - ! '>='
132
116
  - !ruby/object:Gem::Version
@@ -134,7 +118,6 @@ dependencies:
134
118
  type: :runtime
135
119
  prerelease: false
136
120
  version_requirements: !ruby/object:Gem::Requirement
137
- none: false
138
121
  requirements:
139
122
  - - ! '>='
140
123
  - !ruby/object:Gem::Version
@@ -162,13 +145,8 @@ files:
162
145
  - lib/turbot/command/auth.rb
163
146
  - lib/turbot/command/base.rb
164
147
  - lib/turbot/command/bots.rb
165
- - lib/turbot/command/config.rb
166
148
  - lib/turbot/command/help.rb
167
- - lib/turbot/command/keys.rb
168
- - lib/turbot/command/logs.rb
169
149
  - lib/turbot/command/ssl.rb
170
- - lib/turbot/command/status.rb
171
- - lib/turbot/command/update.rb
172
150
  - lib/turbot/command/version.rb
173
151
  - lib/turbot/deprecated.rb
174
152
  - lib/turbot/deprecated/help.rb
@@ -183,6 +161,22 @@ files:
183
161
  - lib/turbot/updater.rb
184
162
  - lib/turbot/version.rb
185
163
  - lib/vendor/turbot/okjson.rb
164
+ - schema/schemas/company-schema.json
165
+ - schema/schemas/includes/address.json
166
+ - schema/schemas/includes/base-statement.json
167
+ - schema/schemas/includes/company.json
168
+ - schema/schemas/includes/filing.json
169
+ - schema/schemas/includes/license-data.json
170
+ - schema/schemas/includes/officer.json
171
+ - schema/schemas/includes/previous_name.json
172
+ - schema/schemas/includes/share-parcel-data.json
173
+ - schema/schemas/includes/share-parcel.json
174
+ - schema/schemas/includes/subsidiary-relationship-data.json
175
+ - schema/schemas/includes/total-shares.json
176
+ - schema/schemas/licence-schema.json
177
+ - schema/schemas/primary-data-schema.json
178
+ - schema/schemas/share-parcel-schema.json
179
+ - schema/schemas/subsidiary-relationship-schema.json
186
180
  - spec/helper/legacy_help.rb
187
181
  - spec/helper/pg_dump_restore_spec.rb
188
182
  - spec/schemas/dummy_schema.json
@@ -216,45 +210,29 @@ files:
216
210
  - templates/manifest.json
217
211
  - templates/python/scraper.py
218
212
  - templates/ruby/scraper.rb
219
- - schema/schemas/company-schema.json
220
- - schema/schemas/includes/address.json
221
- - schema/schemas/includes/base-statement.json
222
- - schema/schemas/includes/company.json
223
- - schema/schemas/includes/filing.json
224
- - schema/schemas/includes/license-data.json
225
- - schema/schemas/includes/officer.json
226
- - schema/schemas/includes/previous_name.json
227
- - schema/schemas/includes/share-parcel-data.json
228
- - schema/schemas/includes/share-parcel.json
229
- - schema/schemas/includes/subsidiary-relationship-data.json
230
- - schema/schemas/includes/total-shares.json
231
- - schema/schemas/licence-schema.json
232
- - schema/schemas/primary-data-schema.json
233
- - schema/schemas/share-parcel-schema.json
234
- - schema/schemas/subsidiary-relationship-schema.json
235
213
  homepage: http://turbot.com/
236
214
  licenses:
237
215
  - MIT
216
+ metadata: {}
238
217
  post_install_message:
239
218
  rdoc_options: []
240
219
  require_paths:
241
220
  - lib
242
221
  required_ruby_version: !ruby/object:Gem::Requirement
243
- none: false
244
222
  requirements:
245
223
  - - ! '>='
246
224
  - !ruby/object:Gem::Version
247
225
  version: 1.9.2
248
226
  required_rubygems_version: !ruby/object:Gem::Requirement
249
- none: false
250
227
  requirements:
251
228
  - - ! '>='
252
229
  - !ruby/object:Gem::Version
253
230
  version: '0'
254
231
  requirements: []
255
232
  rubyforge_project:
256
- rubygems_version: 1.8.23.2
233
+ rubygems_version: 2.2.2
257
234
  signing_key:
258
- specification_version: 3
235
+ specification_version: 4
259
236
  summary: Client library and CLI to deploy apps on Turbot.
260
237
  test_files: []
238
+ has_rdoc:
@@ -1,123 +0,0 @@
1
- require "turbot/command/base"
2
-
3
- # manage bot config vars
4
- #
5
- class Turbot::Command::Config < Turbot::Command::Base
6
-
7
- # config
8
- #
9
- # display the config vars for an bot
10
- #
11
- # -s, --shell # output config vars in shell format
12
- #
13
- #Examples:
14
- #
15
- # $ turbot config
16
- # A: one
17
- # B: two
18
- #
19
- # $ turbot config --shell
20
- # A=one
21
- # B=two
22
- #
23
- def index
24
- validate_arguments!
25
-
26
- vars = api.get_config_vars(bot)
27
- if vars.empty?
28
- display("#{bot} has no config vars.")
29
- else
30
- vars.each {|key, value| vars[key] = value.to_s.strip}
31
- if options[:shell]
32
- vars.keys.sort.each do |key|
33
- display(%{#{key}=#{vars[key]}})
34
- end
35
- else
36
- styled_header("#{bot} Config Vars")
37
- styled_hash(vars)
38
- end
39
- end
40
- end
41
-
42
- # config:set KEY1=VALUE1 [KEY2=VALUE2 ...]
43
- #
44
- # set one or more config vars
45
- #
46
- #Example:
47
- #
48
- # $ turbot config:set A=one
49
- # Setting config vars and restarting example... done, v123
50
- # A: one
51
- #
52
- # $ turbot config:set A=one B=two
53
- # Setting config vars and restarting example... done, v123
54
- # A: one
55
- # B: two
56
- #
57
- def set
58
- unless args.size > 0 and args.all? { |a| a.include?('=') }
59
- error("Usage: turbot config:set KEY1=VALUE1 [KEY2=VALUE2 ...]\nMust specify KEY and VALUE to set.")
60
- end
61
-
62
- vars = args.inject({}) do |vars, arg|
63
- key, value = arg.split('=', 2)
64
- vars[key] = value
65
- vars
66
- end
67
-
68
- action("Setting config vars and restarting #{bot}") do
69
- api.put_config_vars(bot, vars)
70
- end
71
-
72
- vars.each {|key, value| vars[key] = value.to_s}
73
- styled_hash(vars)
74
- end
75
-
76
- alias_command "config:add", "config:set"
77
-
78
- # config:get KEY
79
- #
80
- # display a config value for an bot
81
- #
82
- #Examples:
83
- #
84
- # $ turbot config:get A
85
- # one
86
- #
87
- def get
88
- unless key = shift_argument
89
- error("Usage: turbot config:get KEY\nMust specify KEY.")
90
- end
91
- validate_arguments!
92
-
93
- vars = api.get_config_vars(bot)
94
- key, value = vars.detect {|k,v| k == key}
95
- display(value.to_s)
96
- end
97
-
98
- # config:unset KEY1 [KEY2 ...]
99
- #
100
- # unset one or more config vars
101
- #
102
- # $ turbot config:unset A
103
- # Unsetting A and restarting example... done, v123
104
- #
105
- # $ turbot config:unset A B
106
- # Unsetting A and restarting example... done, v123
107
- # Unsetting B and restarting example... done, v124
108
- #
109
- def unset
110
- if args.empty?
111
- error("Usage: turbot config:unset KEY1 [KEY2 ...]\nMust specify KEY to unset.")
112
- end
113
-
114
- args.each do |key|
115
- action("Unsetting #{key} and restarting #{bot}") do
116
- api.delete_config_var(bot, key)
117
- end
118
- end
119
- end
120
-
121
- alias_command "config:remove", "config:unset"
122
-
123
- end
@@ -1,115 +0,0 @@
1
- require "turbot/command/base"
2
-
3
- module Turbot::Command
4
-
5
- # manage authentication keys
6
- #
7
- class Keys < Base
8
-
9
- # keys
10
- #
11
- # display keys for the current user
12
- #
13
- # -l, --long # display extended information for each key
14
- #
15
- #Examples:
16
- #
17
- # $ turbot keys
18
- # === email@example.com Keys
19
- # ssh-rsa ABCDEFGHIJK...OPQRSTUV== email@example.com
20
- #
21
- # $ turbot keys --long
22
- # === email@example.com Keys
23
- # ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAp9AJD5QABmOcrkHm6SINuQkDefaR0MUrfgZ1Pxir3a4fM1fwa00dsUwbUaRuR7FEFD8n1E9WwDf8SwQTHtyZsJg09G9myNqUzkYXCmydN7oGr5IdVhRyv5ixcdiE0hj7dRnOJg2poSQ3Qi+Ka8SVJzF7nIw1YhuicHPSbNIFKi5s0D5a+nZb/E6MNGvhxoFCQX2IcNxaJMqhzy1ESwlixz45aT72mXYq0LIxTTpoTqma1HuKdRY8HxoREiivjmMQulYP+CxXFcMyV9kxTKIUZ/FXqlC6G5vSm3J4YScSatPOj9ID5HowpdlIx8F6y4p1/28r2tTl4CY40FFyoke4MQ== email@example.com
24
- #
25
- def index
26
- validate_arguments!
27
- keys = api.get_keys
28
- if keys.length > 0
29
- styled_header("#{Turbot::Auth.user} Keys")
30
- keys = if options[:long]
31
- keys.map {|key| key["contents"].strip}
32
- else
33
- keys.map {|key| format_key_for_display(key["contents"])}
34
- end
35
- styled_array(keys)
36
- else
37
- display("You have no keys.")
38
- end
39
- end
40
-
41
- # keys:add [KEY]
42
- #
43
- # add a key for the current user
44
- #
45
- # if no KEY is specified, will try to find ~/.ssh/id_[rd]sa.pub
46
- #
47
- #Examples:
48
- #
49
- # $ turbot keys:add
50
- # Could not find an existing public key.
51
- # Would you like to generate one? [Yn] y
52
- # Generating new SSH public key.
53
- # Uploading SSH public key /.ssh/id_rsa.pub... done
54
- #
55
- # $ turbot keys:add /my/key.pub
56
- # Uploading SSH public key /my/key.pub... done
57
- #
58
- def add
59
- keyfile = shift_argument
60
- validate_arguments!
61
-
62
- if keyfile
63
- Turbot::Auth.associate_key(keyfile)
64
- else
65
- # make sure we have credentials
66
- Turbot::Auth.get_credentials
67
- Turbot::Auth.associate_or_generate_ssh_key
68
- end
69
- end
70
-
71
- # keys:remove KEY
72
- #
73
- # remove a key from the current user
74
- #
75
- #Examples:
76
- #
77
- # $ turbot keys:remove email@example.com
78
- # Removing email@example.com SSH key... done
79
- #
80
- def remove
81
- key = shift_argument
82
- if key.nil? || key.empty?
83
- error("Usage: turbot keys:remove KEY\nMust specify KEY to remove.")
84
- end
85
- validate_arguments!
86
-
87
- action("Removing #{key} SSH key") do
88
- api.delete_key(key)
89
- end
90
- end
91
-
92
- # keys:clear
93
- #
94
- # remove all authentication keys from the current user
95
- #
96
- #Examples:
97
- #
98
- # $ turbot keys:clear
99
- # Removing all SSH keys... done
100
- #
101
- def clear
102
- validate_arguments!
103
-
104
- action("Removing all SSH keys") do
105
- api.delete_keys
106
- end
107
- end
108
-
109
- protected
110
- def format_key_for_display(key)
111
- type, hex, local = key.strip.split(/\s/)
112
- [type, hex[0,10] + '...' + hex[-10,10], local].join(' ')
113
- end
114
- end
115
- end
@@ -1,34 +0,0 @@
1
- require "turbot/command/base"
2
- require "turbot/helpers/log_displayer"
3
-
4
- # display logs for an bot
5
- #
6
- class Turbot::Command::Logs < Turbot::Command::Base
7
-
8
- # logs
9
- #
10
- # display recent log output
11
- #
12
- # -n, --num NUM # the number of lines to display
13
- # -p, --ps PS # only display logs from the given process
14
- # -s, --source SOURCE # only display logs from the given source
15
- # -t, --tail # continually stream logs
16
- #
17
- #Example:
18
- #
19
- # $ turbot logs
20
- # 2012-01-01T12:00:00+00:00 turbot[api]: Config add EXAMPLE by email@example.com
21
- # 2012-01-01T12:00:01+00:00 turbot[api]: Release v1 created by email@example.com
22
- #
23
- def index
24
- validate_arguments!
25
-
26
- opts = []
27
- opts << "tail=1" if options[:tail]
28
- opts << "num=#{options[:num]}" if options[:num]
29
- opts << "ps=#{URI.encode(options[:ps])}" if options[:ps]
30
- opts << "source=#{URI.encode(options[:source])}" if options[:source]
31
- log_displayer = ::Turbot::Helpers::LogDisplayer.new(api, bot, opts)
32
- log_displayer.display_logs
33
- end
34
- end
@@ -1,50 +0,0 @@
1
- require "turbot/command/base"
2
-
3
- # check status of turbot platform
4
- #
5
- class Turbot::Command::Status < Turbot::Command::Base
6
-
7
- # status
8
- #
9
- # display current status of turbot platform
10
- #
11
- #Example:
12
- #
13
- # $ turbot status
14
- # === Turbot Status
15
- # Development: No known issues at this time.
16
- # Production: No known issues at this time.
17
- #
18
- def index
19
- validate_arguments!
20
-
21
- require('excon')
22
- status = json_decode(Excon.get("http://turbot.opencorporates.com/current-status.json", :nonblock => false).body)
23
-
24
- styled_header("Turbot Status")
25
-
26
- status['status'].each do |key, value|
27
- if value == 'green'
28
- status['status'][key] = 'No known issues at this time.'
29
- end
30
- end
31
- styled_hash(status['status'])
32
-
33
- unless status['issues'].empty?
34
- display
35
- status['issues'].each do |issue|
36
- duration = time_ago(issue['created_at']).gsub(' ago', '+')
37
- styled_header("#{issue['title']} #{duration}")
38
- changes = issue['updates'].map do |issue|
39
- [
40
- time_ago(issue['created_at']),
41
- issue['update_type'],
42
- issue['contents']
43
- ]
44
- end
45
- styled_array(changes, :sort => false)
46
- end
47
- end
48
- end
49
-
50
- end
@@ -1,47 +0,0 @@
1
- require "turbot/command/base"
2
- require "turbot/updater"
3
-
4
- # update the turbot client
5
- #
6
- class Turbot::Command::Update < Turbot::Command::Base
7
-
8
- # update
9
- #
10
- # update the turbot client
11
- #
12
- # Example:
13
- #
14
- # $ turbot update
15
- # Updating from v1.2.3... done, updated to v2.3.4
16
- #
17
- def index
18
- validate_arguments!
19
- update_from_url("https://toolbelt.turbot.com/download/zip")
20
- end
21
-
22
- # update:beta
23
- #
24
- # update to the latest beta client
25
- #
26
- # $ turbot update
27
- # Updating from v1.2.3... done, updated to v2.3.4.pre
28
- #
29
- def beta
30
- validate_arguments!
31
- update_from_url("https://toolbelt.turbot.com/download/beta-zip")
32
- end
33
-
34
- private
35
-
36
- def update_from_url(url)
37
- Turbot::Updater.check_disabled!
38
- action("Updating from #{Turbot::VERSION}") do
39
- if new_version = Turbot::Updater.update(url)
40
- status("updated to #{new_version}")
41
- else
42
- status("nothing to update")
43
- end
44
- end
45
- end
46
-
47
- end