box-release 0.0.2 → 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
data/box-release.gemspec CHANGED
@@ -21,6 +21,6 @@ Gem::Specification.new do |s|
21
21
 
22
22
  s.add_runtime_dependency("activesupport")
23
23
 
24
- # s.add_development_dependency('rspec')
25
- # s.add_development_dependency('rcov')
24
+ s.add_development_dependency('rspec')
25
+ s.add_development_dependency('rcov')
26
26
  end
data/lib/box/release.rb CHANGED
@@ -24,6 +24,9 @@ module Box
24
24
  @@install_command = nil
25
25
  mattr_accessor :install_command
26
26
 
27
+ @@download_directory = "/tmp"
28
+ mattr_accessor :download_directory
29
+
27
30
  class ExecutionError < StandardError; end
28
31
 
29
32
  def self.execute!(command)
@@ -62,7 +62,7 @@ module Box
62
62
  # end
63
63
 
64
64
  def file
65
- "/tmp/release.tar"
65
+ "#{download_directory}/release.tar"
66
66
  end
67
67
 
68
68
  def newer?(other)
@@ -4,7 +4,7 @@ module Box
4
4
  module Release
5
5
  class CLI
6
6
 
7
- attr_accessor :url, :current_definition, :install_command, :before_download_command
7
+ attr_accessor :url, :current_definition, :install_command, :before_download_command, :after_download_command, :download_directory
8
8
 
9
9
  def initialize(arguments = [])
10
10
  @install_command = "/usr/local/sbin/box-upgrade"
@@ -32,6 +32,10 @@ module Box
32
32
  "The install command used to install the release") { |arg| self.install_command = arg }
33
33
  options.on("-b", "--before-download=command", String,
34
34
  "The command executed before download starts") { |arg| self.before_download_command = arg }
35
+ options.on("-a", "--after-download=command", String,
36
+ "The command executed after download ends (or fails)") { |arg| self.after_download_command = arg }
37
+ options.on("-d", "--download-dir=directory", String,
38
+ "The direcotry where the release file will be temporary stored") { |arg| self.download_directory = arg }
35
39
  end
36
40
  end
37
41
 
@@ -70,11 +74,22 @@ module Box
70
74
  Box::Release.execute! before_download_command if before_download_command
71
75
  end
72
76
 
77
+ def after_download
78
+ Box::Release.execute! after_download_command if after_download_command
79
+ end
80
+
73
81
  def upgrade
74
82
  if latest and latest.newer?(current)
75
83
  Box::Release.logger.info "New release : #{latest}"
84
+ Box::Release.download_directory = download_directory
76
85
  before_download
77
- latest.download
86
+
87
+ begin
88
+ latest.download
89
+ ensure
90
+ after_download
91
+ end
92
+
78
93
  Box::Release.logger.info "Replace #{current} with #{latest}"
79
94
  latest.install :install_command => install_command
80
95
  Box::Release.logger.info "Successfully installed #{latest}"
@@ -26,6 +26,10 @@ module Box
26
26
  def install_command
27
27
  Box::Release.install_command
28
28
  end
29
+
30
+ def download_directory
31
+ Box::Release.download_directory
32
+ end
29
33
  end
30
34
  end
31
35
  end
@@ -1,5 +1,5 @@
1
1
  module Box
2
2
  module Release
3
- VERSION = "0.0.2"
3
+ VERSION = "0.0.3"
4
4
  end
5
5
  end
@@ -8,9 +8,20 @@ describe Box::Release::Base do
8
8
 
9
9
  subject { Box::Release::Memory.new }
10
10
 
11
- its(:file) { should == "/tmp/release.tar" }
11
+ describe "#file" do
12
+
13
+ context "by default" do
14
+ its(:file) { should == "/tmp/release.tar" }
15
+ end
16
+
17
+ it "should use Box::Release.download_directory when defined" do
18
+ subject.stub :download_directory => "/dummy"
19
+ subject.file.should == "/dummy/release.tar"
20
+ end
21
+
22
+ end
12
23
 
13
- describe "download" do
24
+ describe "#download" do
14
25
 
15
26
  before(:each) do
16
27
  FileUtils.rm_f(subject.file)
@@ -30,6 +30,19 @@ describe Box::Release::CLI do
30
30
 
31
31
  end
32
32
 
33
+ describe "#download_directory" do
34
+
35
+ it "should be nil by default" do
36
+ subject.download_directory.should be_nil
37
+ end
38
+
39
+ it "should use the value specified with --download-dir" do
40
+ subject.parse_options %w{--download-dir /dummy}
41
+ subject.download_directory.should == "/dummy"
42
+ end
43
+
44
+ end
45
+
33
46
  describe "#url" do
34
47
 
35
48
  it "should be nil by default" do
@@ -195,12 +208,30 @@ describe Box::Release::CLI do
195
208
 
196
209
  let(:latest) { mock :name => "latest", :newer? => true, :download => true, :install => true }
197
210
 
211
+ it "should use download_directory as Box::Release.download_directory" do
212
+ subject.download_directory = "/dummy"
213
+ subject.upgrade
214
+ Box::Release.download_directory.should == "/dummy"
215
+ end
216
+
198
217
  it "should invoke before_download ... before downloading latest release" do
199
218
  subject.should_receive(:before_download).ordered
200
219
  subject.latest.should_receive(:download).ordered
201
220
  subject.upgrade
202
221
  end
203
222
 
223
+ it "should invoke after_download ... after downloading latest release" do
224
+ subject.latest.should_receive(:download).ordered
225
+ subject.should_receive(:after_download).ordered
226
+ subject.upgrade
227
+ end
228
+
229
+ it "should invoke after_download even if download fails" do
230
+ subject.latest.should_receive(:download).and_raise("fail")
231
+ subject.should_receive(:after_download)
232
+ lambda { subject.upgrade }.should raise_error
233
+ end
234
+
204
235
  it "should download the latest release" do
205
236
  subject.latest.should_receive(:download)
206
237
  subject.upgrade
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: box-release
3
3
  version: !ruby/object:Gem::Version
4
- hash: 27
4
+ hash: 25
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 0
9
- - 2
10
- version: 0.0.2
9
+ - 3
10
+ version: 0.0.3
11
11
  platform: ruby
12
12
  authors:
13
13
  - Alban Peignier
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2011-05-11 00:00:00 Z
19
+ date: 2011-05-19 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  name: activesupport
@@ -32,6 +32,34 @@ dependencies:
32
32
  version: "0"
33
33
  type: :runtime
34
34
  version_requirements: *id001
35
+ - !ruby/object:Gem::Dependency
36
+ name: rspec
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
46
+ version: "0"
47
+ type: :development
48
+ version_requirements: *id002
49
+ - !ruby/object:Gem::Dependency
50
+ name: rcov
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
54
+ requirements:
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ hash: 3
58
+ segments:
59
+ - 0
60
+ version: "0"
61
+ type: :development
62
+ version_requirements: *id003
35
63
  description: ""
36
64
  email:
37
65
  - alban@tryphon.eu