heirloom 0.8.2 → 0.8.3

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG CHANGED
@@ -1,3 +1,7 @@
1
+ ## 0.8.3:
2
+
3
+ * Teardown does not try to delete buckets if they are not empty.
4
+
1
5
  ## 0.8.2:
2
6
 
3
7
  * Updated docs based on feedback from mint.
@@ -29,6 +29,10 @@ module Heirloom
29
29
  false
30
30
  end
31
31
 
32
+ def bucket_empty?(bucket)
33
+ get_bucket_object_versions(bucket)["Versions"].count == 0
34
+ end
35
+
32
36
  def bucket_exists_in_another_region?(bucket)
33
37
  if bucket_exists? bucket
34
38
  get_bucket(bucket).location != @region
@@ -59,7 +63,12 @@ module Heirloom
59
63
  end
60
64
 
61
65
  def delete_bucket(bucket)
62
- @s3.delete_bucket bucket
66
+ if bucket_empty? bucket
67
+ @s3.delete_bucket bucket
68
+ else
69
+ @logger.warn "#{bucket} not empty, not destroying."
70
+ false
71
+ end
63
72
  rescue Excon::Errors::NotFound
64
73
  @logger.info "#{bucket} already destroyed."
65
74
  true
@@ -73,6 +82,10 @@ module Heirloom
73
82
  @s3.get_bucket_acl(bucket).body
74
83
  end
75
84
 
85
+ def get_bucket_object_versions(bucket)
86
+ @s3.get_bucket_object_versions(bucket).body
87
+ end
88
+
76
89
  def put_object_acl(bucket, key, grants)
77
90
  @s3.put_object_acl(bucket, key, grants)
78
91
  end
@@ -1,3 +1,3 @@
1
1
  module Heirloom
2
- VERSION = "0.8.2"
2
+ VERSION = "0.8.3"
3
3
  end
data/spec/aws/s3_spec.rb CHANGED
@@ -132,16 +132,62 @@ describe Heirloom do
132
132
 
133
133
  end
134
134
 
135
- it "should delete a bucket from s3" do
136
- @fog_mock.should_receive(:delete_bucket).with 'bucket'
137
- @s3.delete_bucket 'bucket'
135
+ it "should return object versions for a given bucket" do
136
+ body_mock = mock 'body'
137
+ @fog_mock.should_receive(:get_bucket_object_versions).
138
+ with('bucket').
139
+ and_return body_mock
140
+ body_mock.stub :body => 'body_hash'
141
+ @s3.get_bucket_object_versions('bucket').should == 'body_hash'
138
142
  end
139
143
 
140
- it "should return true if Excon::Errors::NotFound raised when deleting bucket" do
141
- @fog_mock.should_receive(:delete_bucket).
142
- with('bucket').
143
- and_raise Excon::Errors::NotFound.new 'Bucket does not exist.'
144
- @s3.delete_bucket 'bucket'
144
+ context "testing bucket deletion" do
145
+ it "should return true if the bucket has 0 objects" do
146
+ body_mock = mock 'body'
147
+ @fog_mock.should_receive(:get_bucket_object_versions).
148
+ with('bucket').
149
+ and_return body_mock
150
+ body_mock.stub :body => { "Versions" => [ ] }
151
+ @s3.bucket_empty?('bucket').should be_true
152
+ end
153
+
154
+ it "should return false if the bucket has any objects" do
155
+ body_mock = mock 'body'
156
+ @fog_mock.should_receive(:get_bucket_object_versions).
157
+ with('bucket').
158
+ and_return body_mock
159
+ body_mock.stub :body => { "Versions" => [ 'obj1', 'obj2' ] }
160
+ @s3.bucket_empty?('bucket').should be_false
161
+ end
162
+
163
+ it "should delete a bucket from s3 if empty" do
164
+ body_mock = mock 'body'
165
+ @fog_mock.should_receive(:get_bucket_object_versions).
166
+ with('bucket').
167
+ and_return body_mock
168
+ body_mock.stub :body => { "Versions" => [ ] }
169
+ @fog_mock.should_receive(:delete_bucket).
170
+ with('bucket').and_return true
171
+ @s3.delete_bucket('bucket').should be_true
172
+ end
173
+
174
+ it "should return false and not attempt to delete a non empty s3 bucket" do
175
+ body_mock = mock 'body'
176
+ @fog_mock.should_receive(:get_bucket_object_versions).
177
+ with('bucket').
178
+ and_return body_mock
179
+ body_mock.stub :body => { "Versions" => [ 'obj1', 'obj2' ] }
180
+ @fog_mock.should_receive(:delete_bucket).never
181
+ @s3.delete_bucket('bucket').should be_false
182
+ end
183
+
184
+ it "should return true if Excon::Errors::NotFound raised when deleting bucket" do
185
+ @fog_mock.should_receive(:get_bucket_object_versions).
186
+ with('bucket').
187
+ and_raise Excon::Errors::NotFound.new 'Bucket does not exist.'
188
+ @fog_mock.should_receive(:delete_bucket).never
189
+ @s3.delete_bucket('bucket').should be_true
190
+ end
145
191
  end
146
192
 
147
193
  it "should get an object from s3" do
@@ -149,8 +195,8 @@ describe Heirloom do
149
195
  @fog_mock.should_receive(:get_object).
150
196
  with('bucket', 'object').
151
197
  and_return body_mock
152
- body_mock.should_receive(:body)
153
- @s3.get_object('bucket', 'object')
198
+ body_mock.stub :body => 'body_hash'
199
+ @s3.get_object('bucket', 'object').should == 'body_hash'
154
200
  end
155
201
 
156
202
  it "should get a buckets acl from s3" do
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: heirloom
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.2
4
+ version: 0.8.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-11-16 00:00:00.000000000 Z
12
+ date: 2012-11-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rspec
16
- requirement: &70116641456840 !ruby/object:Gem::Requirement
16
+ requirement: &70288889244580 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ~>
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 2.11.0
22
22
  type: :development
23
23
  prerelease: false
24
- version_requirements: *70116641456840
24
+ version_requirements: *70288889244580
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: rake
27
- requirement: &70116641456000 !ruby/object:Gem::Requirement
27
+ requirement: &70288889253380 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: '0'
33
33
  type: :development
34
34
  prerelease: false
35
- version_requirements: *70116641456000
35
+ version_requirements: *70288889253380
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: fog
38
- requirement: &70116641455120 !ruby/object:Gem::Requirement
38
+ requirement: &70288889249440 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ~>
@@ -43,10 +43,10 @@ dependencies:
43
43
  version: 1.5.0
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *70116641455120
46
+ version_requirements: *70288889249440
47
47
  - !ruby/object:Gem::Dependency
48
48
  name: grit
49
- requirement: &70116641469900 !ruby/object:Gem::Requirement
49
+ requirement: &70288889247600 !ruby/object:Gem::Requirement
50
50
  none: false
51
51
  requirements:
52
52
  - - ~>
@@ -54,10 +54,10 @@ dependencies:
54
54
  version: 2.5.0
55
55
  type: :runtime
56
56
  prerelease: false
57
- version_requirements: *70116641469900
57
+ version_requirements: *70288889247600
58
58
  - !ruby/object:Gem::Dependency
59
59
  name: trollop
60
- requirement: &70116641467720 !ruby/object:Gem::Requirement
60
+ requirement: &70288889097340 !ruby/object:Gem::Requirement
61
61
  none: false
62
62
  requirements:
63
63
  - - =
@@ -65,7 +65,7 @@ dependencies:
65
65
  version: '2.0'
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *70116641467720
68
+ version_requirements: *70288889097340
69
69
  description: I help build and manage building tar.gz files and deploying them into
70
70
  the cloud
71
71
  email:
@@ -202,7 +202,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
202
202
  version: '0'
203
203
  segments:
204
204
  - 0
205
- hash: 3388616083800809289
205
+ hash: 3211129644745839536
206
206
  required_rubygems_version: !ruby/object:Gem::Requirement
207
207
  none: false
208
208
  requirements:
@@ -211,7 +211,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
211
211
  version: '0'
212
212
  segments:
213
213
  - 0
214
- hash: 3388616083800809289
214
+ hash: 3211129644745839536
215
215
  requirements: []
216
216
  rubyforge_project: heirloom
217
217
  rubygems_version: 1.8.16