heirloom 0.8.2 → 0.8.3

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/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