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 +4 -0
- data/lib/heirloom/aws/s3.rb +14 -1
- data/lib/heirloom/version.rb +1 -1
- data/spec/aws/s3_spec.rb +56 -10
- metadata +14 -14
data/CHANGELOG
CHANGED
data/lib/heirloom/aws/s3.rb
CHANGED
@@ -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
|
-
|
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
|
data/lib/heirloom/version.rb
CHANGED
data/spec/aws/s3_spec.rb
CHANGED
@@ -132,16 +132,62 @@ describe Heirloom do
|
|
132
132
|
|
133
133
|
end
|
134
134
|
|
135
|
-
it "should
|
136
|
-
|
137
|
-
@
|
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
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
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.
|
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.
|
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-
|
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: &
|
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: *
|
24
|
+
version_requirements: *70288889244580
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
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: *
|
35
|
+
version_requirements: *70288889253380
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: fog
|
38
|
-
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: *
|
46
|
+
version_requirements: *70288889249440
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: grit
|
49
|
-
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: *
|
57
|
+
version_requirements: *70288889247600
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: trollop
|
60
|
-
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: *
|
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:
|
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:
|
214
|
+
hash: 3211129644745839536
|
215
215
|
requirements: []
|
216
216
|
rubyforge_project: heirloom
|
217
217
|
rubygems_version: 1.8.16
|