whiskey_disk 0.0.7 → 0.3.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.
data/lib/whiskey_disk.rb CHANGED
@@ -27,6 +27,26 @@ class WhiskeyDisk
27
27
  ! (self[:domain].nil? or self[:domain] == '')
28
28
  end
29
29
 
30
+ def has_config_repo?
31
+ ! (self[:config_repository].nil? or self[:config_repository] == '')
32
+ end
33
+
34
+ def branch
35
+ (self[:branch] and self[:branch] != '') ? self[:branch] : 'master'
36
+ end
37
+
38
+ def config_branch
39
+ (self[:config_branch] and self[:config_branch] != '') ? self[:config_branch] : 'master'
40
+ end
41
+
42
+ def env_vars
43
+ return '' unless self[:rake_env]
44
+ self[:rake_env].keys.inject('') do |buffer,k|
45
+ buffer += "#{k}='#{self[:rake_env][k]}' "
46
+ buffer
47
+ end
48
+ end
49
+
30
50
  def parent_path(path)
31
51
  File.split(path).first
32
52
  end
@@ -37,7 +57,7 @@ class WhiskeyDisk
37
57
 
38
58
  def needs(*keys)
39
59
  keys.each do |key|
40
- raise "No value for '#{key}' declared in configuration files [#{WhiskeyDisk::Config.filenames.join(", ")}]" unless self[key]
60
+ raise "No value for '#{key}' declared in configuration files [#{WhiskeyDisk::Config.configuration_file}]" unless self[key]
41
61
  end
42
62
  end
43
63
 
@@ -71,11 +91,6 @@ class WhiskeyDisk
71
91
  enqueue "git clone #{self[:repository]} #{tail_path(self[:deploy_to])} ; true"
72
92
  end
73
93
 
74
- def install_hooks
75
- needs(:deploy_to)
76
- # FIXME - TODO: MORE HERE
77
- end
78
-
79
94
  def checkout_configuration_repository
80
95
  needs(:deploy_config_to, :config_repository)
81
96
  enqueue "cd #{parent_path(self[:deploy_config_to])}"
@@ -84,7 +99,6 @@ class WhiskeyDisk
84
99
 
85
100
  def update_main_repository_checkout
86
101
  needs(:deploy_to)
87
- branch = (self[:branch] and self[:branch] != '') ? self[:branch] : 'master'
88
102
  enqueue "cd #{self[:deploy_to]}"
89
103
  enqueue "git fetch origin +refs/heads/#{branch}:refs/remotes/origin/#{branch}"
90
104
  enqueue "git reset --hard origin/#{branch}"
@@ -93,25 +107,24 @@ class WhiskeyDisk
93
107
  def update_configuration_repository_checkout
94
108
  needs(:deploy_config_to)
95
109
  enqueue "cd #{self[:deploy_config_to]}"
96
- enqueue "git fetch origin +refs/heads/master:refs/remotes/origin/master"
97
- enqueue "git reset --hard origin/master"
110
+ enqueue "git fetch origin +refs/heads/#{config_branch}:refs/remotes/origin/#{config_branch}"
111
+ enqueue "git reset --hard origin/#{config_branch}"
98
112
  end
99
113
 
100
114
  def refresh_configuration
101
115
  needs(:deploy_to, :deploy_config_to)
116
+ raise "Must specify project name when using a configuration repository." if self[:project] == 'unnamed_project'
102
117
  enqueue "rsync -av --progress #{self[:deploy_config_to]}/#{self[:project]}/#{self[:environment]}/ #{self[:deploy_to]}/"
103
118
  end
104
119
 
105
120
  def run_post_setup_hooks
106
121
  needs(:deploy_to)
107
- env_vars = self[:rake_env] ? self[:rake_env].keys.inject('') {|b,k| b += "#{k}='#{self[:rake_env][k]}' "; b } : ''
108
122
  enqueue "cd #{self[:deploy_to]}"
109
123
  enqueue "#{env_vars} rake --trace deploy:post_setup to=#{self[:environment]}"
110
124
  end
111
125
 
112
126
  def run_post_deploy_hooks
113
127
  needs(:deploy_to)
114
- env_vars = self[:rake_env] ? self[:rake_env].keys.inject('') {|b,k| b += "#{k}='#{self[:rake_env][k]}' "; b } : ''
115
128
  enqueue "cd #{self[:deploy_to]}"
116
129
  enqueue "#{env_vars} rake --trace deploy:post_deploy to=#{self[:environment]}"
117
130
  end
@@ -0,0 +1,421 @@
1
+ require File.dirname(__FILE__) + '/spec_helper.rb'
2
+ require 'rake'
3
+
4
+ def run_command
5
+ eval File.read(File.join(File.dirname(__FILE__), *%w[.. bin wd]))
6
+ end
7
+
8
+ describe 'wd command' do
9
+ before do
10
+ ENV['to'] = ENV['path'] = nil
11
+ end
12
+
13
+ describe 'when no command-line arguments are specified' do
14
+ before do
15
+ Object.send(:remove_const, :ARGV)
16
+ ARGV = []
17
+ end
18
+
19
+ it 'should not run rake tasks' do
20
+ Rake::Application.should.receive(:new).never
21
+ lambda { run_command }
22
+ end
23
+
24
+ it 'should fail' do
25
+ lambda { run_command }.should.raise
26
+ end
27
+ end
28
+
29
+ describe "when the 'setup' command is specified" do
30
+ before do
31
+ Object.send(:remove_const, :ARGV)
32
+ ARGV = ['setup']
33
+ end
34
+
35
+ describe 'and no target is specified' do
36
+ it 'should not run rake tasks' do
37
+ Rake::Application.should.receive(:new).never
38
+ lambda { run_command }
39
+ end
40
+
41
+ it 'should fail' do
42
+ lambda { run_command }.should.raise
43
+ end
44
+ end
45
+
46
+ describe 'and a --to argument is specified' do
47
+ before do
48
+ ARGV.push '--to=foo'
49
+ @rake = Rake::Task['deploy:setup']
50
+ @rake.stub!(:invoke)
51
+ end
52
+
53
+ it 'should not fail' do
54
+ lambda { run_command }.should.not.raise
55
+ end
56
+
57
+ it 'should run the deploy:setup rake task' do
58
+ @rake.should.receive(:invoke)
59
+ run_command
60
+ end
61
+
62
+ it 'should make the specified target available as a "to" argument to the rake task' do
63
+ run_command
64
+ ENV['to'].should == 'foo'
65
+ end
66
+
67
+ describe 'and a --path argument is specified' do
68
+ before do
69
+ ARGV.push '--path=/path/to/foo'
70
+ end
71
+
72
+ it 'should make the specified path available as a "path" argument to the rake task' do
73
+ run_command
74
+ ENV['path'].should == '/path/to/foo'
75
+ end
76
+
77
+ it 'should fail if the rake task fails' do
78
+ @rake.stub!(:invoke).and_raise(RuntimeError)
79
+ lambda { run_command }.should.raise
80
+ end
81
+
82
+ it 'should not fail if the rake task succeeds' do
83
+ @rake.stub!(:invoke).and_return(true)
84
+ lambda { run_command }.should.not.raise
85
+ end
86
+ end
87
+
88
+ describe 'and a -p argument is specified' do
89
+ before do
90
+ ARGV.push '-p'
91
+ ARGV.push '/path/to/foo'
92
+ end
93
+
94
+ it 'should make the specified path available as a "path" argument to the rake task' do
95
+ run_command
96
+ ENV['path'].should == '/path/to/foo'
97
+ end
98
+
99
+ it 'should fail if the rake task fails' do
100
+ @rake.stub!(:invoke).and_raise(RuntimeError)
101
+ lambda { run_command }.should.raise
102
+ end
103
+
104
+ it 'should not fail if the rake task succeeds' do
105
+ @rake.stub!(:invoke).and_return(true)
106
+ lambda { run_command }.should.not.raise
107
+ end
108
+ end
109
+
110
+ describe 'and no --path or -p argument is specified' do
111
+ it 'should not make a "path" argument available to the rake task' do
112
+ ENV['path'].should.be.nil
113
+ end
114
+
115
+ it 'should fail if the rake task fails' do
116
+ @rake.stub!(:invoke).and_raise(RuntimeError)
117
+ lambda { run_command }.should.raise
118
+ end
119
+
120
+ it 'should not fail if the rake task succeeds' do
121
+ @rake.stub!(:invoke).and_return(true)
122
+ lambda { run_command }.should.not.raise
123
+ end
124
+ end
125
+ end
126
+
127
+ describe 'and a -t argument is specified' do
128
+ before do
129
+ ARGV.push '-t'
130
+ ARGV.push 'foo'
131
+ @rake = Rake::Task['deploy:setup']
132
+ @rake.stub!(:invoke)
133
+ end
134
+
135
+ it 'should not fail' do
136
+ lambda { run_command }.should.not.raise
137
+ end
138
+
139
+ it 'should run the deploy:setup rake task' do
140
+ @rake.should.receive(:invoke)
141
+ run_command
142
+ end
143
+
144
+ it 'should make the specified target available as a "to" argument to the rake task' do
145
+ run_command
146
+ ENV['to'].should == 'foo'
147
+ end
148
+
149
+ describe 'and a --path argument is specified' do
150
+ before do
151
+ ARGV.push '--path=/path/to/foo'
152
+ end
153
+
154
+ it 'should make the specified path available as a "path" argument to the rake task' do
155
+ run_command
156
+ ENV['path'].should == '/path/to/foo'
157
+ end
158
+
159
+ it 'should fail if the rake task fails' do
160
+ @rake.stub!(:invoke).and_raise(RuntimeError)
161
+ lambda { run_command }.should.raise
162
+ end
163
+
164
+ it 'should not fail if the rake task succeeds' do
165
+ @rake.stub!(:invoke).and_return(true)
166
+ lambda { run_command }.should.not.raise
167
+ end
168
+ end
169
+
170
+ describe 'and a -p argument is specified' do
171
+ before do
172
+ ARGV.push '-p'
173
+ ARGV.push '/path/to/foo'
174
+ end
175
+
176
+ it 'should make the specified path available as a "path" argument to the rake task' do
177
+ run_command
178
+ ENV['path'].should == '/path/to/foo'
179
+ end
180
+
181
+ it 'should fail if the rake task fails' do
182
+ @rake.stub!(:invoke).and_raise(RuntimeError)
183
+ lambda { run_command }.should.raise
184
+ end
185
+
186
+ it 'should not fail if the rake task succeeds' do
187
+ @rake.stub!(:invoke).and_return(true)
188
+ lambda { run_command }.should.not.raise
189
+ end
190
+ end
191
+
192
+ describe 'and no --path or -p argument is specified' do
193
+ it 'should not make a "path" argument available to the rake task' do
194
+ ENV['path'].should.be.nil
195
+ end
196
+
197
+ it 'should fail if the rake task fails' do
198
+ @rake.stub!(:invoke).and_raise(RuntimeError)
199
+ lambda { run_command }.should.raise
200
+ end
201
+
202
+ it 'should not fail if the rake task succeeds' do
203
+ @rake.stub!(:invoke).and_return(true)
204
+ lambda { run_command }.should.not.raise
205
+ end
206
+ end
207
+ end
208
+ end
209
+
210
+ describe "when the 'deploy' command is specified" do
211
+ describe 'but no target is specified' do
212
+ before do
213
+ Object.send(:remove_const, :ARGV)
214
+ ARGV = ['deploy']
215
+ end
216
+
217
+ it 'should not run rake tasks' do
218
+ Rake::Application.should.receive(:new).never
219
+ lambda { run_command }
220
+ end
221
+
222
+ it 'should fail' do
223
+ lambda { run_command }.should.raise
224
+ end
225
+ end
226
+
227
+ describe 'and a --to argument is specified' do
228
+ before do
229
+ ARGV.push '--to=foo'
230
+ @rake = Rake::Task['deploy:now']
231
+ @rake.stub!(:invoke)
232
+ end
233
+
234
+ it 'should not fail' do
235
+ lambda { run_command }.should.not.raise
236
+ end
237
+
238
+ it 'should run the deploy:now rake task' do
239
+ @rake.should.receive(:invoke)
240
+ run_command
241
+ end
242
+
243
+ it 'should make the specified target available as a "to" argument to the rake task' do
244
+ run_command
245
+ ENV['to'].should == 'foo'
246
+ end
247
+ describe 'and a --path argument is specified' do
248
+ before do
249
+ ARGV.push '--path=/path/to/foo'
250
+ end
251
+
252
+ it 'should make the specified path available as a "path" argument to the rake task' do
253
+ run_command
254
+ ENV['path'].should == '/path/to/foo'
255
+ end
256
+
257
+ it 'should fail if the rake task fails' do
258
+ @rake.stub!(:invoke).and_raise(RuntimeError)
259
+ lambda { run_command }.should.raise
260
+ end
261
+
262
+ it 'should not fail if the rake task succeeds' do
263
+ @rake.stub!(:invoke).and_return(true)
264
+ lambda { run_command }.should.not.raise
265
+ end
266
+ end
267
+
268
+ describe 'and a -p argument is specified' do
269
+ before do
270
+ ARGV.push '-p'
271
+ ARGV.push '/path/to/foo'
272
+ end
273
+
274
+ it 'should make the specified path available as a "path" argument to the rake task' do
275
+ run_command
276
+ ENV['path'].should == '/path/to/foo'
277
+ end
278
+
279
+ it 'should fail if the rake task fails' do
280
+ @rake.stub!(:invoke).and_raise(RuntimeError)
281
+ lambda { run_command }.should.raise
282
+ end
283
+
284
+ it 'should not fail if the rake task succeeds' do
285
+ @rake.stub!(:invoke).and_return(true)
286
+ lambda { run_command }.should.not.raise
287
+ end
288
+ end
289
+
290
+ describe 'and no --path or -p argument is specified' do
291
+ it 'should not make a "path" argument available to the rake task' do
292
+ ENV['path'].should.be.nil
293
+ end
294
+
295
+ it 'should fail if the rake task fails' do
296
+ @rake.stub!(:invoke).and_raise(RuntimeError)
297
+ lambda { run_command }.should.raise
298
+ end
299
+
300
+ it 'should not fail if the rake task succeeds' do
301
+ @rake.stub!(:invoke).and_return(true)
302
+ lambda { run_command }.should.not.raise
303
+ end
304
+ end
305
+ end
306
+
307
+ describe 'and a -t argument is specified' do
308
+ before do
309
+ ARGV.push '-t'
310
+ ARGV.push 'foo'
311
+ @rake = Rake::Task['deploy:now']
312
+ @rake.stub!(:invoke)
313
+ end
314
+
315
+ it 'should not fail' do
316
+ lambda { run_command }.should.not.raise
317
+ end
318
+
319
+ it 'should run the deploy:now rake task' do
320
+ @rake.should.receive(:invoke)
321
+ run_command
322
+ end
323
+
324
+ it 'should make the specified target available as a "to" argument to the rake task' do
325
+ run_command
326
+ ENV['to'].should == 'foo'
327
+ end
328
+
329
+ describe 'and a --path argument is specified' do
330
+ before do
331
+ ARGV.push '--path=/path/to/foo'
332
+ end
333
+
334
+ it 'should make the specified path available as a "path" argument to the rake task' do
335
+ run_command
336
+ ENV['path'].should == '/path/to/foo'
337
+ end
338
+
339
+ it 'should fail if the rake task fails' do
340
+ @rake.stub!(:invoke).and_raise(RuntimeError)
341
+ lambda { run_command }.should.raise
342
+ end
343
+
344
+ it 'should not fail if the rake task succeeds' do
345
+ @rake.stub!(:invoke).and_return(true)
346
+ lambda { run_command }.should.not.raise
347
+ end
348
+ end
349
+
350
+ describe 'and a -p argument is specified' do
351
+ before do
352
+ ARGV.push '-p'
353
+ ARGV.push '/path/to/foo'
354
+ end
355
+
356
+ it 'should make the specified path available as a "path" argument to the rake task' do
357
+ run_command
358
+ ENV['path'].should == '/path/to/foo'
359
+ end
360
+
361
+ it 'should fail if the rake task fails' do
362
+ @rake.stub!(:invoke).and_raise(RuntimeError)
363
+ lambda { run_command }.should.raise
364
+ end
365
+
366
+ it 'should not fail if the rake task succeeds' do
367
+ @rake.stub!(:invoke).and_return(true)
368
+ lambda { run_command }.should.not.raise
369
+ end
370
+ end
371
+
372
+ describe 'and no --path or -p argument is specified' do
373
+ it 'should not make a "path" argument available to the rake task' do
374
+ ENV['path'].should.be.nil
375
+ end
376
+
377
+ it 'should fail if the rake task fails' do
378
+ @rake.stub!(:invoke).and_raise(RuntimeError)
379
+ lambda { run_command }.should.raise
380
+ end
381
+
382
+ it 'should not fail if the rake task succeeds' do
383
+ @rake.stub!(:invoke).and_return(true)
384
+ lambda { run_command }.should.not.raise
385
+ end
386
+ end
387
+ end
388
+ end
389
+
390
+ describe 'and more than one command is specified' do
391
+ before do
392
+ Object.send(:remove_const, :ARGV)
393
+ ARGV = ['frazzlebazzle', 'shizzlebizzle']
394
+ end
395
+
396
+ it 'should fail if no target is specified' do
397
+ lambda { run_command }.should.raise
398
+ end
399
+
400
+ it 'should fail even if a target is specified' do
401
+ ARGV.push('--to=foo')
402
+ lambda { run_command }.should.raise
403
+ end
404
+ end
405
+
406
+ describe 'and an unknown command is specified' do
407
+ before do
408
+ Object.send(:remove_const, :ARGV)
409
+ ARGV = ['frazzlebazzle']
410
+ end
411
+
412
+ it 'should fail when no target is specified' do
413
+ lambda { run_command }.should.raise
414
+ end
415
+
416
+ it 'should fail when a target is specified' do
417
+ ARGV.push('--to=foo')
418
+ lambda { run_command }.should.raise
419
+ end
420
+ end
421
+ end