has_bucket 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/Gemfile +1 -1
- data/has_bucket.gemspec +2 -1
- data/lib/has_bucket/facade.rb +10 -0
- data/lib/has_bucket/version.rb +1 -1
- data/spec/cassettes/HasBucket/should_default_content_type_when_not_specified.yml +128 -0
- data/spec/cassettes/HasBucket/should_determine_content_type_from_extension.yml +128 -0
- data/spec/has_bucket_spec.rb +19 -0
- metadata +22 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c9f518334d6f264fd79af730e3b4dc8314b83d27
|
4
|
+
data.tar.gz: 135148b79ceba9bac0ae50e6564a9a40514902c8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6eebb62242286d4b6c297a139760c8170f9f40d3bdbcb2cbba6fb4b5d5b261a82e2bb68a5d3b61bb0364a8a34277c0dd2d5e9dbec73a1832adfeb91443fd1c64
|
7
|
+
data.tar.gz: 29416124c578e8e1c1ee5b9b5c233c82f769195494704f79a5ee95ff382b49f3ecdd12c6913ad1ae66e1c1ecc10d060fe3bdb66b5d8b02ef197f7b9b1032f343
|
data/.travis.yml
CHANGED
data/Gemfile
CHANGED
data/has_bucket.gemspec
CHANGED
@@ -18,8 +18,9 @@ Gem::Specification.new do |spec|
|
|
18
18
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
|
-
spec.add_runtime_dependency "
|
21
|
+
spec.add_runtime_dependency "mime-types"
|
22
22
|
spec.add_runtime_dependency "s3"
|
23
|
+
spec.add_runtime_dependency "uri_config"
|
23
24
|
|
24
25
|
spec.add_development_dependency "bundler", "~> 1.6"
|
25
26
|
spec.add_development_dependency "rake", "~> 10.0"
|
data/lib/has_bucket/facade.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
1
|
require "cgi"
|
2
2
|
require "uri"
|
3
3
|
require "s3"
|
4
|
+
require "mime-types"
|
4
5
|
|
5
6
|
module HasBucket
|
6
7
|
class Facade
|
@@ -24,6 +25,7 @@ module HasBucket
|
|
24
25
|
def []=(key, content)
|
25
26
|
s3_object = object(key)
|
26
27
|
s3_object.acl = "private"
|
28
|
+
s3_object.content_type = content_type_from_key(key)
|
27
29
|
s3_object.content = content
|
28
30
|
s3_object.save
|
29
31
|
end
|
@@ -53,5 +55,13 @@ module HasBucket
|
|
53
55
|
def bucket
|
54
56
|
@service.bucket(@bucket_name)
|
55
57
|
end
|
58
|
+
|
59
|
+
def content_type_from_key(key)
|
60
|
+
if (mime_type = MIME::Types.of(key).find { |mime| !mime.obsolete? })
|
61
|
+
mime_type.content_type
|
62
|
+
else
|
63
|
+
"application/octet-stream"
|
64
|
+
end
|
65
|
+
end
|
56
66
|
end
|
57
67
|
end
|
data/lib/has_bucket/version.rb
CHANGED
@@ -0,0 +1,128 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: put
|
5
|
+
uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: bar
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
X-Amz-Acl:
|
17
|
+
- private
|
18
|
+
X-Amz-Storage-Class:
|
19
|
+
- STANDARD
|
20
|
+
Content-Type:
|
21
|
+
- application/octet-stream
|
22
|
+
Content-Length:
|
23
|
+
- '3'
|
24
|
+
Date:
|
25
|
+
- Tue, 14 Apr 2015 04:51:12 GMT
|
26
|
+
Content-Md5:
|
27
|
+
- N7UdGUp1E+RbVvZSTy1R8g==
|
28
|
+
Authorization:
|
29
|
+
- AWS AKIAICVNTIM4AWNLWR4Q:2X1mVmvLc7CNporcBhQeSOhdaC4=
|
30
|
+
response:
|
31
|
+
status:
|
32
|
+
code: 200
|
33
|
+
message: OK
|
34
|
+
headers:
|
35
|
+
X-Amz-Id-2:
|
36
|
+
- 3xny5kfRG5txFxJEGeEfApNHRtgue9WGV99WEEXXa7q8tcETDjmn1aGhBUssEhAa
|
37
|
+
X-Amz-Request-Id:
|
38
|
+
- 56FD51C8E1B08B5C
|
39
|
+
Date:
|
40
|
+
- Tue, 14 Apr 2015 04:51:12 GMT
|
41
|
+
Etag:
|
42
|
+
- '"37b51d194a7513e45b56f6524f2d51f2"'
|
43
|
+
Content-Length:
|
44
|
+
- '0'
|
45
|
+
Server:
|
46
|
+
- AmazonS3
|
47
|
+
body:
|
48
|
+
encoding: UTF-8
|
49
|
+
string: ''
|
50
|
+
http_version:
|
51
|
+
recorded_at: Tue, 14 Apr 2015 04:51:12 GMT
|
52
|
+
- request:
|
53
|
+
method: get
|
54
|
+
uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo?AWSAccessKeyId=AKIAICVNTIM4AWNLWR4Q&Expires=1428990672&Signature=zFSsiagLAJs0a%2B/JmLYIa6SW/Ug=
|
55
|
+
body:
|
56
|
+
encoding: US-ASCII
|
57
|
+
string: ''
|
58
|
+
headers:
|
59
|
+
Accept-Encoding:
|
60
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
61
|
+
Accept:
|
62
|
+
- "*/*"
|
63
|
+
User-Agent:
|
64
|
+
- Ruby
|
65
|
+
response:
|
66
|
+
status:
|
67
|
+
code: 200
|
68
|
+
message: OK
|
69
|
+
headers:
|
70
|
+
X-Amz-Id-2:
|
71
|
+
- "+AurMJjN6HO9VcK30sburpvMiFxh4nAP34Pa8WGaVCfNhg2sV58+CNLul7WczUXY"
|
72
|
+
X-Amz-Request-Id:
|
73
|
+
- 30AD311FECFA761F
|
74
|
+
Date:
|
75
|
+
- Tue, 14 Apr 2015 04:51:13 GMT
|
76
|
+
Last-Modified:
|
77
|
+
- Tue, 14 Apr 2015 04:51:12 GMT
|
78
|
+
Etag:
|
79
|
+
- '"37b51d194a7513e45b56f6524f2d51f2"'
|
80
|
+
Accept-Ranges:
|
81
|
+
- bytes
|
82
|
+
Content-Type:
|
83
|
+
- application/octet-stream
|
84
|
+
Content-Length:
|
85
|
+
- '3'
|
86
|
+
Server:
|
87
|
+
- AmazonS3
|
88
|
+
body:
|
89
|
+
encoding: UTF-8
|
90
|
+
string: bar
|
91
|
+
http_version:
|
92
|
+
recorded_at: Tue, 14 Apr 2015 04:51:12 GMT
|
93
|
+
- request:
|
94
|
+
method: delete
|
95
|
+
uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
|
96
|
+
body:
|
97
|
+
encoding: US-ASCII
|
98
|
+
string: ''
|
99
|
+
headers:
|
100
|
+
Accept-Encoding:
|
101
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
102
|
+
Accept:
|
103
|
+
- "*/*"
|
104
|
+
User-Agent:
|
105
|
+
- Ruby
|
106
|
+
Date:
|
107
|
+
- Tue, 14 Apr 2015 04:51:12 GMT
|
108
|
+
Authorization:
|
109
|
+
- AWS AKIAICVNTIM4AWNLWR4Q:/Cp5RryT3Fu8yNvsP8lxymIoaTc=
|
110
|
+
response:
|
111
|
+
status:
|
112
|
+
code: 204
|
113
|
+
message: No Content
|
114
|
+
headers:
|
115
|
+
X-Amz-Id-2:
|
116
|
+
- 7zvdTCCLR8m54NyAFijp/AxyVCpXMZPfd/emV1JQmna+TSY0X2pjDa9Ri+ykywdz
|
117
|
+
X-Amz-Request-Id:
|
118
|
+
- DCAC02FF003DD68B
|
119
|
+
Date:
|
120
|
+
- Tue, 14 Apr 2015 04:51:14 GMT
|
121
|
+
Server:
|
122
|
+
- AmazonS3
|
123
|
+
body:
|
124
|
+
encoding: UTF-8
|
125
|
+
string: ''
|
126
|
+
http_version:
|
127
|
+
recorded_at: Tue, 14 Apr 2015 04:51:12 GMT
|
128
|
+
recorded_with: VCR 2.9.3
|
@@ -0,0 +1,128 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: put
|
5
|
+
uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo.csv
|
6
|
+
body:
|
7
|
+
encoding: UTF-8
|
8
|
+
string: bar
|
9
|
+
headers:
|
10
|
+
Accept-Encoding:
|
11
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
12
|
+
Accept:
|
13
|
+
- "*/*"
|
14
|
+
User-Agent:
|
15
|
+
- Ruby
|
16
|
+
X-Amz-Acl:
|
17
|
+
- private
|
18
|
+
X-Amz-Storage-Class:
|
19
|
+
- STANDARD
|
20
|
+
Content-Type:
|
21
|
+
- text/csv
|
22
|
+
Content-Length:
|
23
|
+
- '3'
|
24
|
+
Date:
|
25
|
+
- Tue, 14 Apr 2015 04:51:14 GMT
|
26
|
+
Content-Md5:
|
27
|
+
- N7UdGUp1E+RbVvZSTy1R8g==
|
28
|
+
Authorization:
|
29
|
+
- AWS AKIAICVNTIM4AWNLWR4Q:1YIz3ErsndxOkH0UISG9BNRJ5IU=
|
30
|
+
response:
|
31
|
+
status:
|
32
|
+
code: 200
|
33
|
+
message: OK
|
34
|
+
headers:
|
35
|
+
X-Amz-Id-2:
|
36
|
+
- mnWYD5qee+S+b70wrwvX3Qr1U+NvR9fMpP+TaGV/a+ULFpU8/pBegdrHvK5G00Sn
|
37
|
+
X-Amz-Request-Id:
|
38
|
+
- A980057B3C94DBE5
|
39
|
+
Date:
|
40
|
+
- Tue, 14 Apr 2015 04:51:15 GMT
|
41
|
+
Etag:
|
42
|
+
- '"37b51d194a7513e45b56f6524f2d51f2"'
|
43
|
+
Content-Length:
|
44
|
+
- '0'
|
45
|
+
Server:
|
46
|
+
- AmazonS3
|
47
|
+
body:
|
48
|
+
encoding: UTF-8
|
49
|
+
string: ''
|
50
|
+
http_version:
|
51
|
+
recorded_at: Tue, 14 Apr 2015 04:51:14 GMT
|
52
|
+
- request:
|
53
|
+
method: get
|
54
|
+
uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo.csv?AWSAccessKeyId=AKIAICVNTIM4AWNLWR4Q&Expires=1428990674&Signature=RDXOhQKpN32vOGUBYph21uCXuT4=
|
55
|
+
body:
|
56
|
+
encoding: US-ASCII
|
57
|
+
string: ''
|
58
|
+
headers:
|
59
|
+
Accept-Encoding:
|
60
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
61
|
+
Accept:
|
62
|
+
- "*/*"
|
63
|
+
User-Agent:
|
64
|
+
- Ruby
|
65
|
+
response:
|
66
|
+
status:
|
67
|
+
code: 200
|
68
|
+
message: OK
|
69
|
+
headers:
|
70
|
+
X-Amz-Id-2:
|
71
|
+
- ce3PhV91YP6qK84P+SnN1jVJrHMrTzAWA72AzoX5wYatGzcdY1YUbFnf99nZLaZa
|
72
|
+
X-Amz-Request-Id:
|
73
|
+
- 918D21AB87DAA90D
|
74
|
+
Date:
|
75
|
+
- Tue, 14 Apr 2015 04:51:15 GMT
|
76
|
+
Last-Modified:
|
77
|
+
- Tue, 14 Apr 2015 04:51:15 GMT
|
78
|
+
Etag:
|
79
|
+
- '"37b51d194a7513e45b56f6524f2d51f2"'
|
80
|
+
Accept-Ranges:
|
81
|
+
- bytes
|
82
|
+
Content-Type:
|
83
|
+
- text/csv
|
84
|
+
Content-Length:
|
85
|
+
- '3'
|
86
|
+
Server:
|
87
|
+
- AmazonS3
|
88
|
+
body:
|
89
|
+
encoding: UTF-8
|
90
|
+
string: bar
|
91
|
+
http_version:
|
92
|
+
recorded_at: Tue, 14 Apr 2015 04:51:14 GMT
|
93
|
+
- request:
|
94
|
+
method: delete
|
95
|
+
uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo.csv
|
96
|
+
body:
|
97
|
+
encoding: US-ASCII
|
98
|
+
string: ''
|
99
|
+
headers:
|
100
|
+
Accept-Encoding:
|
101
|
+
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
|
102
|
+
Accept:
|
103
|
+
- "*/*"
|
104
|
+
User-Agent:
|
105
|
+
- Ruby
|
106
|
+
Date:
|
107
|
+
- Tue, 14 Apr 2015 04:51:14 GMT
|
108
|
+
Authorization:
|
109
|
+
- AWS AKIAICVNTIM4AWNLWR4Q:CmPC9uXXNUixGgGcMBRDikEsSn8=
|
110
|
+
response:
|
111
|
+
status:
|
112
|
+
code: 204
|
113
|
+
message: No Content
|
114
|
+
headers:
|
115
|
+
X-Amz-Id-2:
|
116
|
+
- Kih+P/FatFdXtYuHVGaWKauat9PauKRLwnCJel5j7s0Z8tNCekMjri/jKMVF4QF9
|
117
|
+
X-Amz-Request-Id:
|
118
|
+
- 575C4CFF28FCEBEA
|
119
|
+
Date:
|
120
|
+
- Tue, 14 Apr 2015 04:51:16 GMT
|
121
|
+
Server:
|
122
|
+
- AmazonS3
|
123
|
+
body:
|
124
|
+
encoding: UTF-8
|
125
|
+
string: ''
|
126
|
+
http_version:
|
127
|
+
recorded_at: Tue, 14 Apr 2015 04:51:14 GMT
|
128
|
+
recorded_with: VCR 2.9.3
|
data/spec/has_bucket_spec.rb
CHANGED
@@ -30,6 +30,25 @@ describe HasBucket do
|
|
30
30
|
expect(subject).to_not include(key)
|
31
31
|
end
|
32
32
|
|
33
|
+
it "should default content_type when not specified", :vcr do
|
34
|
+
subject[key] = value
|
35
|
+
response = Net::HTTP.get_response(URI(subject.url_for(key)))
|
36
|
+
|
37
|
+
expect(response["Content-Type"]).to eq("application/octet-stream")
|
38
|
+
|
39
|
+
subject.delete(key)
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should determine content_type from extension", :vcr do
|
43
|
+
key = "foo.csv"
|
44
|
+
subject[key] = value
|
45
|
+
response = Net::HTTP.get_response(URI(subject.url_for(key)))
|
46
|
+
|
47
|
+
expect(response["Content-Type"]).to eq("text/csv")
|
48
|
+
|
49
|
+
subject.delete(key)
|
50
|
+
end
|
51
|
+
|
33
52
|
it "#prefixed_with should allow for directory-like keys", :vcr do
|
34
53
|
subject["other/bar"] = "bar"
|
35
54
|
subject["foo/bar"] = "bar"
|
metadata
CHANGED
@@ -1,17 +1,17 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: has_bucket
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jonathon M. Abbott
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-04-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: mime-types
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: uri_config
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :runtime
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: bundler
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,6 +173,8 @@ files:
|
|
159
173
|
- spec/cassettes/HasBucket/_object_keys_should_return_all_object_keys.yml
|
160
174
|
- spec/cassettes/HasBucket/_prefixed_with_should_allow_for_directory-like_keys.yml
|
161
175
|
- spec/cassettes/HasBucket/should_allow_storage_of_blobs_on_S3.yml
|
176
|
+
- spec/cassettes/HasBucket/should_default_content_type_when_not_specified.yml
|
177
|
+
- spec/cassettes/HasBucket/should_determine_content_type_from_extension.yml
|
162
178
|
- spec/has_bucket_spec.rb
|
163
179
|
- spec/spec_helper.rb
|
164
180
|
homepage: https://github.com/JonathonMA/has_bucket
|
@@ -181,7 +197,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
181
197
|
version: '0'
|
182
198
|
requirements: []
|
183
199
|
rubyforge_project:
|
184
|
-
rubygems_version: 2.
|
200
|
+
rubygems_version: 2.2.2
|
185
201
|
signing_key:
|
186
202
|
specification_version: 4
|
187
203
|
summary: i has an S3 bucket
|
@@ -189,6 +205,7 @@ test_files:
|
|
189
205
|
- spec/cassettes/HasBucket/_object_keys_should_return_all_object_keys.yml
|
190
206
|
- spec/cassettes/HasBucket/_prefixed_with_should_allow_for_directory-like_keys.yml
|
191
207
|
- spec/cassettes/HasBucket/should_allow_storage_of_blobs_on_S3.yml
|
208
|
+
- spec/cassettes/HasBucket/should_default_content_type_when_not_specified.yml
|
209
|
+
- spec/cassettes/HasBucket/should_determine_content_type_from_extension.yml
|
192
210
|
- spec/has_bucket_spec.rb
|
193
211
|
- spec/spec_helper.rb
|
194
|
-
has_rdoc:
|