kitchen_hooks 1.5.8 → 1.6.0

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,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 50100dd02824f80b639343180a6ff96e82570f1b
4
- data.tar.gz: 410484be1fde8357b5340607b61b06fcc9ec27b6
3
+ metadata.gz: 9eb74c5dbbe7c83206e30120671a1bf59553258a
4
+ data.tar.gz: 9a722f4f0cf0ed44da7eaa7cf8668cc871a0ddd5
5
5
  SHA512:
6
- metadata.gz: f53fdb8d519a757f5e19fa6a700c269062efcdfc6483b99318ffecd3b3fe62695c0530686cab0099c13a1e3eee3a2cb5b2d7cb7d19e660180b863cd4872e40d7
7
- data.tar.gz: bb8df9b4cce3a81a690949fef12553c805791a94ec51f79e28c0bd2139a93aa63eeba64e01be34c2ffea2028cc98f4f798e25b908d2c8e3443a089c8395a9017
6
+ metadata.gz: 1ad297874b1379c5ba0ac75ff27288ee47bc64633969c27103abbdcf74ae6303a8545138b36ff6cd06e3d7ea43c5537c073843b27baf13bd4eb76b7a85255012
7
+ data.tar.gz: ed60bee3bfaffbf40f2395888a4c77f57537ac1c2bd4fab1da04552f58c6b7b2a9c85fa72f8012d79acdcafb233f079a585b393f6de24b566918d2f8d1a365f2
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.5.8
1
+ 1.6.0
data/etc/commit.json CHANGED
@@ -1,21 +1,21 @@
1
1
  {
2
2
  "before": "08f20548e398f634979047d0c8114260bcc2949a",
3
- "after": "7b238ce9c6cff250db5a0b727b9661b618b82e1d",
4
- "ref": "refs/tags/bjn_test",
3
+ "after": "0835e7c74314cfe2aa9f98fe47338031b637ef95",
4
+ "ref": "refs/tags/v0.0.4",
5
5
  "user_id": 645,
6
6
  "user_name": "Sean Clemmer",
7
7
  "repository": {
8
- "name": "realm_logger",
9
- "url": "git@git.bluejeansnet.com:chef/realm_logger.git",
8
+ "name": "realm_catalyst",
9
+ "url": "git@git.bluejeansnet.com:chef/realm_catalyst.git",
10
10
  "description": "",
11
- "homepage": "http://git.bluejeansnet.com/chef/realm_logger"
11
+ "homepage": "http://git.bluejeansnet.com/chef/realm_catalyst"
12
12
  },
13
13
  "commits": [
14
14
  {
15
- "id": "7b238ce9c6cff250db5a0b727b9661b618b82e1d",
15
+ "id": "0835e7c74314cfe2aa9f98fe47338031b637ef95",
16
16
  "message": "XYZ",
17
17
  "timestamp": "2014-11-25T18:30:57-08:00",
18
- "url": "http://git.bluejeansnet.com/chef/realm_logger/commit/7b238ce9c6cff250db5a0b727b9661b618b82e1d",
18
+ "url": "http://git.bluejeansnet.com/chef/realm_catalyst/commit/7b238ce9c6cff250db5a0b727b9661b618b82e1d",
19
19
  "author": {
20
20
  "name": "Sean Clemmer",
21
21
  "email": "sclemmer@bluejeans.com"
@@ -16,15 +16,26 @@ module KitchenHooks
16
16
 
17
17
  enable :sessions
18
18
 
19
- include KitchenHooks::Helpers
20
-
21
19
  def self.db! path
22
20
  @@db = Daybreak::DB.new path
23
21
  end
24
22
 
25
23
  def self.tmp! dir ; @@tmp = dir end
26
24
 
27
- def self.close! ; @@db.close end
25
+ def self.close!
26
+ @@backlog_worker.kill
27
+ @@db.close
28
+ end
29
+
30
+ def self.backlog!
31
+ @@backlog = Queue.new
32
+ @@backlog_worker = Thread.new do
33
+ loop do
34
+ event = @@backlog.shift
35
+ App.process event
36
+ end
37
+ end
38
+ end
28
39
 
29
40
  def self.config! config
30
41
  @@hipchat = nil
@@ -38,11 +49,17 @@ module KitchenHooks
38
49
  end
39
50
  end
40
51
 
52
+ get '/backlog' do
53
+ content_type :json
54
+ JSON.pretty_generate \
55
+ backlog: @@backlog.inspect,
56
+ length: @@backlog.length
57
+ end
41
58
 
42
59
  get '/' do
43
- process_release
60
+ App.process_release
44
61
  db_entries = {}
45
- db.each do |k, v|
62
+ @@db.each do |k, v|
46
63
  db_entries[k] = v unless k =~ /^meta/
47
64
  end
48
65
  erb :app, locals: {
@@ -63,28 +80,26 @@ module KitchenHooks
63
80
  post '/' do
64
81
  request.body.rewind
65
82
  event = JSON::parse request.body.read rescue nil
66
- Thread.new do
67
- process event
68
- end
83
+ @@backlog.push event
69
84
  end
70
85
 
71
86
 
72
87
 
73
88
  private
74
- def tmp ; @@tmp ||= '/tmp' end
89
+ def self.db ; @@db end
75
90
 
76
- def knives ; @@knives ||= [] end
91
+ def self.tmp ; @@tmp ||= '/tmp' end
77
92
 
78
- def db ; @@db end
93
+ def self.knives ; @@knives ||= [] end
79
94
 
80
- def hipchat message, color
95
+ def self.hipchat message, color
81
96
  return if @@hipchat.nil?
82
97
  @@hipchat[@@hipchat_room].send @@hipchat_nick, message, \
83
98
  color: color, notify: false, message_format: 'html'
84
99
  end
85
100
 
86
101
 
87
- def notify entry
102
+ def self.notify entry
88
103
  color = case entry[:type]
89
104
  when 'failure' ; 'red'
90
105
  when 'release' ; 'purple'
@@ -98,7 +113,7 @@ module KitchenHooks
98
113
  # error == true => success
99
114
  # error == false => nop
100
115
  # otherwise => failure
101
- def mark event, type, error=nil
116
+ def self.mark event, type, error=nil
102
117
  return if error == false
103
118
  error = nil if error == true
104
119
  entry = { type: type, event: event }
@@ -111,14 +126,14 @@ module KitchenHooks
111
126
  end
112
127
 
113
128
 
114
- def process_release version=KitchenHooks::VERSION
129
+ def self.process_release version=KitchenHooks::VERSION
115
130
  return if db['meta_version'] == version
116
131
  db.set! 'meta_version', version
117
132
  mark version, 'release'
118
133
  end
119
134
 
120
135
 
121
- def process event
136
+ def self.process event
122
137
  if event.nil? # JSON parse failed
123
138
  mark event, 'failure', 'Could not parse WebHook payload'
124
139
  return
@@ -7,33 +7,33 @@ require 'json'
7
7
  require 'git'
8
8
  require 'ridley'
9
9
  require 'berkshelf'
10
+ require 'sinatra/base'
10
11
 
11
12
 
12
13
  Celluloid.logger = nil
13
14
  Berkshelf.logger = Logger.new $stdout
14
15
 
15
16
  module KitchenHooks
16
- module Helpers
17
-
18
- def report_error e, msg=nil
17
+ class App < Sinatra::Application
18
+ def self.report_error e, msg=nil
19
19
  msg = e.message if msg.nil?
20
- logger.error msg
21
- logger.error e.message
22
- logger.error e.backtrace.inspect
20
+ $stdout.puts msg
21
+ $stdout.puts e.message
22
+ $stdout.puts e.backtrace.inspect
23
23
  msg
24
24
  end
25
25
 
26
26
 
27
27
 
28
- def perform_constraint_application event, knives
29
- logger.debug 'started perform_constraint_application event=%s, knives=%s' % [
28
+ def self.perform_constraint_application event, knives
29
+ $stdout.puts 'started perform_constraint_application event=%s, knives=%s' % [
30
30
  event['after'], knives.inspect
31
31
  ]
32
32
 
33
33
  tmp_clone event, :tagged_commit do |clone|
34
34
  Dir.chdir clone do
35
35
 
36
- logger.info 'Applying constraints'
36
+ $stdout.puts 'Applying constraints'
37
37
  constraints = lockfile_constraints 'Berksfile.lock'
38
38
  environment = tag_name event
39
39
  knives.each do |k|
@@ -44,14 +44,14 @@ module KitchenHooks
44
44
  end
45
45
  end
46
46
 
47
- logger.debug "finished perform_constraint_application: #{event['after']}"
47
+ $stdout.puts "finished perform_constraint_application: #{event['after']}"
48
48
  return # no error
49
49
  end
50
50
 
51
51
 
52
- def perform_kitchen_upload event, knives
52
+ def self.perform_kitchen_upload event, knives
53
53
  return false unless commit_to_master?(event)
54
- logger.debug 'started perform_kitchen_upload event=%s, knives=%s' % [
54
+ $stdout.puts 'started perform_kitchen_upload event=%s, knives=%s' % [
55
55
  event['after'], knives.inspect
56
56
  ]
57
57
 
@@ -61,13 +61,13 @@ module KitchenHooks
61
61
  end
62
62
  end
63
63
 
64
- logger.debug "finished perform_kitchen_upload: #{event['after']}"
64
+ $stdout.puts "finished perform_kitchen_upload: #{event['after']}"
65
65
  return # no error
66
66
  end
67
67
 
68
68
 
69
- def perform_cookbook_upload event, knives
70
- logger.debug 'started perform_cookbook_upload event=%s, knives=%s' % [
69
+ def self.perform_cookbook_upload event, knives
70
+ $stdout.puts 'started perform_cookbook_upload event=%s, knives=%s' % [
71
71
  event['after'], knives.inspect
72
72
  ]
73
73
 
@@ -79,10 +79,10 @@ module KitchenHooks
79
79
  raise 'Tagged version does not match cookbook version'
80
80
  end
81
81
 
82
- logger.info 'Uploading cookbook'
82
+ $stdout.puts 'Uploading cookbook'
83
83
  with_each_knife_do "cookbook upload #{cookbook_name event} -o .. --freeze", knives
84
84
 
85
- logger.info 'Uploading bundled roles, environments, and data bags'
85
+ $stdout.puts 'Uploading bundled roles, environments, and data bags'
86
86
  kitchen_upload knives
87
87
  end
88
88
 
@@ -90,7 +90,7 @@ module KitchenHooks
90
90
  berksfile_lock = berksfile + '.lock'
91
91
 
92
92
  if File::exist? berksfile_lock
93
- logger.info 'Uploading dependencies'
93
+ $stdout.puts 'Uploading dependencies'
94
94
  berks_install berksfile
95
95
  knives.each do |knife|
96
96
  berks_upload berksfile, knife
@@ -98,20 +98,20 @@ module KitchenHooks
98
98
  end
99
99
  end
100
100
 
101
- logger.debug "finished cookbook_upload: #{event['after']}"
101
+ $stdout.puts "finished cookbook_upload: #{event['after']}"
102
102
  return # no error
103
103
  end
104
104
 
105
105
 
106
106
 
107
- def kitchen_upload knives
108
- logger.info 'Uploading data_bags'
107
+ def self.kitchen_upload knives
108
+ $stdout.puts 'Uploading data_bags'
109
109
  with_each_knife_do 'upload data_bags --chef-repo-path .', knives
110
110
 
111
- logger.info 'Uploading roles'
111
+ $stdout.puts 'Uploading roles'
112
112
  with_each_knife_do 'upload roles --chef-repo-path .', knives
113
113
 
114
- logger.info 'Uploading environments'
114
+ $stdout.puts 'Uploading environments'
115
115
  Dir['environments/*'].each do |e|
116
116
  knives.each do |k|
117
117
  upload_environment e, k
@@ -120,7 +120,7 @@ module KitchenHooks
120
120
  end
121
121
 
122
122
 
123
- def berkshelf_config knife
123
+ def self.berkshelf_config knife
124
124
  ridley = Ridley::from_chef_config knife
125
125
  config = {
126
126
  chef: {
@@ -140,15 +140,15 @@ module KitchenHooks
140
140
  end
141
141
 
142
142
 
143
- def berks_install berksfile
144
- logger.debug 'started berks_install berksfile=%s' % berksfile.inspect
143
+ def self.berks_install berksfile
144
+ $stdout.puts 'started berks_install berksfile=%s' % berksfile.inspect
145
145
  env_git_dir = ENV.delete 'GIT_DIR'
146
146
  env_git_work_tree = ENV.delete 'GIT_WORK_TREE'
147
147
 
148
148
  cmd = "berks install --debug --berksfile %s" % [
149
149
  Shellwords::escape(berksfile)
150
150
  ]
151
- logger.debug "berks_install: %s" % cmd
151
+ $stdout.puts "berks_install: %s" % cmd
152
152
  system cmd
153
153
  raise 'Could not perform berks_install with config %s' % [
154
154
  berksfile.inspect
@@ -156,12 +156,12 @@ module KitchenHooks
156
156
 
157
157
  ENV['GIT_DIR'] = env_git_dir
158
158
  ENV['GIT_WORK_TREE'] = env_git_work_tree
159
- logger.debug 'finished berks_install: %s' % berksfile
159
+ $stdout.puts 'finished berks_install: %s' % berksfile
160
160
  end
161
161
 
162
162
 
163
- def berks_upload berksfile, knife, options={}
164
- logger.debug 'started berks_upload berksfile=%s, knife=%s' % [
163
+ def self.berks_upload berksfile, knife, options={}
164
+ $stdout.puts 'started berks_upload berksfile=%s, knife=%s' % [
165
165
  berksfile.inspect, knife.inspect
166
166
  ]
167
167
  config_path = berkshelf_config(knife)
@@ -169,19 +169,19 @@ module KitchenHooks
169
169
  cmd = "berks upload --debug --berksfile %s --config %s" % [
170
170
  Shellwords::escape(berksfile), Shellwords::escape(config_path)
171
171
  ]
172
- logger.debug "berks_upload: %s" % cmd
172
+ $stdout.puts "berks_upload: %s" % cmd
173
173
  system cmd
174
174
  raise 'Could not perform berks_upload with config %s, knife %s' % [
175
175
  berksfile.inspect, knife.inspect
176
176
  ] unless $?.exitstatus.zero?
177
177
 
178
178
  FileUtils.rm_rf config_path
179
- logger.debug 'finished berks_upload: %s' % berksfile
179
+ $stdout.puts 'finished berks_upload: %s' % berksfile
180
180
  end
181
181
 
182
182
 
183
- def tmp_clone event, commit_method, &block
184
- logger.debug 'starting tmp_clone event=%s, commit_method=%s' % [
183
+ def self.tmp_clone event, commit_method, &block
184
+ $stdout.puts 'starting tmp_clone event=%s, commit_method=%s' % [
185
185
  event['after'], commit_method.inspect
186
186
  ]
187
187
 
@@ -193,7 +193,7 @@ module KitchenHooks
193
193
 
194
194
  commit = self.send(commit_method, event)
195
195
 
196
- logger.debug 'creating tmp_clone dir=%s, commit=%s' % [
196
+ $stdout.puts 'creating tmp_clone dir=%s, commit=%s' % [
197
197
  dir.inspect, commit.inspect
198
198
  ]
199
199
 
@@ -202,58 +202,58 @@ module KitchenHooks
202
202
  yield dir
203
203
 
204
204
  FileUtils.rm_rf root
205
- logger.debug 'finished tmp_clone'
205
+ $stdout.puts 'finished tmp_clone'
206
206
  end
207
207
 
208
208
 
209
- def with_each_knife_do command, knives
209
+ def self.with_each_knife_do command, knives
210
210
  with_each_knife "knife #{command} --config %{knife}", knives
211
211
  end
212
212
 
213
- def with_each_knife command, knives
213
+ def self.with_each_knife command, knives
214
214
  knives.map do |k|
215
215
  cmd = command % { knife: Shellwords::escape(k) }
216
- logger.debug 'with_each_knife: %s' % cmd
216
+ $stdout.puts 'with_each_knife: %s' % cmd
217
217
  system cmd
218
218
  # No error handling here; do that on "berks upload"
219
219
  end
220
220
  end
221
221
 
222
222
 
223
- def get_environment environment, knife
223
+ def self.get_environment environment, knife
224
224
  ridley = Ridley::from_chef_config knife
225
225
  ridley.environment.find environment
226
226
  end
227
227
 
228
228
 
229
- def verify_constraints constraints, environment, knife
230
- logger.debug 'started verify_constraints environment=%s, knife=%s' % [
229
+ def self.verify_constraints constraints, environment, knife
230
+ $stdout.puts 'started verify_constraints environment=%s, knife=%s' % [
231
231
  environment.inspect, knife.inspect
232
232
  ]
233
233
  chef_environment = get_environment environment, knife
234
234
  unless constraints == chef_environment.cookbook_versions
235
235
  raise 'Environment did not match constraints'
236
236
  end
237
- logger.debug 'finished verify_constraints: %s' % environment
237
+ $stdout.puts 'finished verify_constraints: %s' % environment
238
238
  end
239
239
 
240
240
 
241
- def apply_constraints constraints, environment, knife
241
+ def self.apply_constraints constraints, environment, knife
242
242
  # Ripped from Berkshelf::Cli::apply and Berkshelf::Lockfile::apply
243
243
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/cli.rb
244
244
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/lockfile.rb
245
- logger.debug 'started apply_constraints environment=%s, knife=%s' % [
245
+ $stdout.puts 'started apply_constraints environment=%s, knife=%s' % [
246
246
  environment.inspect, knife.inspect
247
247
  ]
248
248
  chef_environment = get_environment environment, knife
249
249
  raise 'Could not find environment "%s"' % environment if chef_environment.nil?
250
250
  chef_environment.cookbook_versions = constraints
251
251
  chef_environment.save
252
- logger.debug 'finished apply_constraints: %s' % environment
252
+ $stdout.puts 'finished apply_constraints: %s' % environment
253
253
  end
254
254
 
255
255
 
256
- def lockfile_constraints lockfile_path
256
+ def self.lockfile_constraints lockfile_path
257
257
  # Ripped from Berkshelf::Cli::apply and Berkshelf::Lockfile::apply
258
258
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/cli.rb
259
259
  # https://github.com/berkshelf/berkshelf/blob/master/lib/berkshelf/lockfile.rb
@@ -262,13 +262,13 @@ module KitchenHooks
262
262
  hash[name] = "= #{dependency.locked_version.to_s}"
263
263
  hash
264
264
  end
265
- logger.debug 'constraints: %s -> %s' % [ lockfile_path, constraints ]
265
+ $stdout.puts 'constraints: %s -> %s' % [ lockfile_path, constraints ]
266
266
  return constraints
267
267
  end
268
268
 
269
269
 
270
- def upload_environment environment, knife
271
- logger.debug 'started upload_environment environment=%s, knife=%s' % [
270
+ def self.upload_environment environment, knife
271
+ $stdout.puts 'started upload_environment environment=%s, knife=%s' % [
272
272
  environment.inspect, knife.inspect
273
273
  ]
274
274
  # Load the local environment from a JSON file
@@ -294,11 +294,13 @@ module KitchenHooks
294
294
 
295
295
  # Make it so!
296
296
  chef_environment.save
297
- logger.debug 'finished upload_environment: %s' % environment
297
+ $stdout.puts 'finished upload_environment: %s' % environment
298
298
  end
299
299
 
300
300
 
301
- def notification entry
301
+ def notification e ; App.notification e end
302
+
303
+ def self.notification entry
302
304
  return entry[:error] if entry[:error]
303
305
  event = entry[:event]
304
306
  case entry[:type]
@@ -314,7 +316,9 @@ module KitchenHooks
314
316
  end
315
317
 
316
318
 
317
- def generic_details event
319
+ def generic_details e ; App.generic_details e end
320
+
321
+ def self.generic_details event
318
322
  return if event.nil?
319
323
  %Q|
320
324
  <i>#{author(event)}</i> pushed #{push_details(event)}
@@ -322,7 +326,9 @@ module KitchenHooks
322
326
  end
323
327
 
324
328
 
325
- def push_details event
329
+ def push_details e ; App.push_details e end
330
+
331
+ def self.push_details event
326
332
  return if event.nil?
327
333
  %Q|
328
334
  <a href="#{gitlab_url(event)}">#{event['after']}</a> to <a href="#{repo_url(event)}">#{repo_name(event)}</a>
@@ -330,84 +336,87 @@ module KitchenHooks
330
336
  end
331
337
 
332
338
 
333
- def author event
339
+ def self.author event
334
340
  event['user_name']
335
341
  end
336
342
 
337
343
 
338
- def repo_name event
344
+ def self.repo_name event
339
345
  File::basename event['repository']['url'], '.git'
340
346
  end
341
347
 
342
348
 
343
- def cookbook_name event
349
+ def self.cookbook_name event
344
350
  repo_name(event).sub /^(app|base|realm|fork)_/, 'bjn_'
345
351
  end
346
352
 
347
353
 
348
- def cookbook_repo? event
354
+ def self.cookbook_repo? event
349
355
  repo_name(event) =~ /^(app|base|realm|fork)_/
350
356
  end
351
357
 
352
358
 
353
- def repo_url event
359
+ def self.repo_url event
354
360
  git_daemon_style_url(event).sub(/^git/, 'http').sub(/\.git$/, '')
355
361
  end
356
362
 
357
363
 
358
- def git_daemon_style_url event
364
+ def self.git_daemon_style_url event
359
365
  event['repository']['url'].sub(':', '/').sub('@', '://')
360
366
  end
361
367
 
362
368
 
363
- def gitlab_url event
369
+ def self.gitlab_url event
364
370
  url = git_daemon_style_url(event).sub(/^git/, 'http').sub(/\.git$/, '')
365
371
  "#{url}/commit/#{event['after']}"
366
372
  end
367
373
 
368
374
 
369
- def gitlab_tag_url event
375
+ def self.gitlab_tag_url event
370
376
  url = git_daemon_style_url(event).sub(/^git/, 'http').sub(/\.git$/, '')
371
377
  "#{url}/commits/#{tag_name(event)}"
372
378
  end
373
379
 
374
380
 
375
- def latest_commit event
381
+ def self.latest_commit event
376
382
  event['commits'].last['id']
377
383
  end
378
384
 
379
385
 
380
- def tagged_commit event
386
+ def self.tagged_commit event
381
387
  event['ref'] =~ %r{/tags/(.*)$}
382
388
  return $1 # First regex capture
383
389
  end
384
390
 
385
- alias_method :tag_name, :tagged_commit
391
+
392
+ def self.tag_name event
393
+ tagged_commit event
394
+ end
386
395
 
387
396
 
388
- def commit_to_master? event
397
+ def self.commit_to_master? event
389
398
  event['ref'] == 'refs/heads/master'
390
399
  end
391
400
 
392
401
 
393
- def not_deleted? event
402
+ def self.not_deleted? event
394
403
  event['after'] != '0000000000000000000000000000000000000000'
395
404
  end
396
405
 
397
406
 
398
- def commit_to_kitchen? event
407
+ def self.commit_to_kitchen? event
399
408
  repo_name(event) == 'kitchen' && not_deleted?(event)
400
409
  end
401
410
 
402
411
 
403
- def tagged_commit_to_cookbook? event
412
+ def self.tagged_commit_to_cookbook? event
404
413
  cookbook_repo?(event) &&
405
414
  event['ref'] =~ %r{/tags/} &&
406
415
  not_deleted?(event)
407
416
  end
408
417
 
409
418
 
410
- def tagged_commit_to_realm? event
419
+ def self.tagged_commit_to_realm? event
411
420
  tagged_commit_to_cookbook?(event) &&
412
421
  repo_name(event) =~ /^realm_/
413
422
  end
@@ -61,6 +61,7 @@ module KitchenHooks
61
61
  desc: 'Location of temporary directory',
62
62
  default: '/tmp'
63
63
  def server
64
+ App.backlog!
64
65
  App.db! options.database
65
66
  App.tmp! options.tmpdir
66
67
  App.config! JSON::parse(File.read(options.config))
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kitchen_hooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.8
4
+ version: 1.6.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Wong
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-12-18 00:00:00.000000000 Z
11
+ date: 2015-02-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hipchat