has_bucket 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 83138a4f5ecc8d9daed056f4387e520f461bcd33
4
+ data.tar.gz: 6a506222d671686b6afee3c83174410625a56180
5
+ SHA512:
6
+ metadata.gz: f1a9bc6949c37af34ad46fa2c7ff065a30e320f02896f876c060c041123e6d87d427d905e792bcc3c2077ded37f1962c5cbfe8140972a22abdbdb168f7800b90
7
+ data.tar.gz: 9541bf46035dcd842ab60585b4c82471a93e47b00f9353352ceded22439a00b1fad95caccafe1568c6547afc0d58df82d169cc3472c8f2932c185adb8469aacd
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.rubocop.yml ADDED
@@ -0,0 +1,14 @@
1
+ Metrics/LineLength:
2
+ Max: 120
3
+
4
+ Style/Documentation:
5
+ Enabled: false
6
+
7
+ Style/RegexpLiteral:
8
+ MaxSlashes: 0
9
+
10
+ Style/StringLiterals:
11
+ Enabled: false
12
+
13
+ Style/TrailingComma:
14
+ EnforcedStyleForMultiline: comma
data/.travis.yml ADDED
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - 2.1.2
data/Gemfile ADDED
@@ -0,0 +1,6 @@
1
+ source 'https://rubygems.org'
2
+
3
+ ruby '2.1.2'
4
+
5
+ # Specify your gem's dependencies in has_bucket.gemspec
6
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2014 Jonathon M. Abbott
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,49 @@
1
+ # I Has a Bucket
2
+
3
+ [![Build Status](https://travis-ci.org/JonathonMA/has_bucket.svg?branch=master)](https://travis-ci.org/JonathonMA/has_bucket)
4
+
5
+ ![I Has a Bucket](http://i1.kym-cdn.com/photos/images/newsfeed/000/000/026/lolrus.jpg)
6
+
7
+ Simple wrapper around single-bucket S3 storage.
8
+
9
+ ## Installation
10
+
11
+ Add this line to your application's Gemfile:
12
+
13
+ ```ruby
14
+ gem 'has_bucket'
15
+ ```
16
+
17
+ And then execute:
18
+
19
+ $ bundle
20
+
21
+ Or install it yourself as:
22
+
23
+ $ gem install has_bucket
24
+
25
+ ## Usage
26
+
27
+ ```ruby
28
+ s3 = HasBucket.of("https://AWS_ACCESS_KEY:AWS_SECRET_ACCESS_KEY@s3.amazonaws.com/BUCKET_NAME")
29
+
30
+ s3.include?("key") # => false
31
+ s3["key"] = "value"
32
+ s3["key"] # => "value"
33
+ s3.include?("key") # => true
34
+ s3.delete("key")
35
+ s3.include?("key") # => false
36
+ s3.url_for("key") # => authenticated URL to object
37
+ ```
38
+
39
+ ## TODO
40
+
41
+ - [ ] select region based on hostname
42
+
43
+ ## Contributing
44
+
45
+ 1. Fork it ( https://github.com/JonathonMA/has_bucket/fork )
46
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
47
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
48
+ 4. Push to the branch (`git push origin my-new-feature`)
49
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,11 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+ require 'rubocop/rake_task'
4
+
5
+ RSpec::Core::RakeTask.new
6
+ RuboCop::RakeTask.new
7
+
8
+ task default: [
9
+ :spec,
10
+ :rubocop,
11
+ ]
@@ -0,0 +1,31 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'has_bucket/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "has_bucket"
8
+ spec.version = HasBucket::VERSION
9
+ spec.authors = ["Jonathon M. Abbott"]
10
+ spec.email = ["jonathona@everydayhero.com.au"]
11
+ spec.summary = "i has an S3 bucket"
12
+ spec.description = "Simple wrapper around single-bucket S3 storage"
13
+ spec.homepage = "https://github.com/JonathonMA/has_bucket"
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "uri_config"
22
+ spec.add_runtime_dependency "s3"
23
+
24
+ spec.add_development_dependency "bundler", "~> 1.6"
25
+ spec.add_development_dependency "rake", "~> 10.0"
26
+ spec.add_development_dependency "rspec", "~> 3.1.0"
27
+ spec.add_development_dependency "rubocop", "~> 0.27.0"
28
+ spec.add_development_dependency "vcr", "~> 2.9.3"
29
+ spec.add_development_dependency "webmock", "~> 1.20.3"
30
+ spec.add_development_dependency "timecop"
31
+ end
data/lib/has_bucket.rb ADDED
@@ -0,0 +1,11 @@
1
+ require "has_bucket/version"
2
+ require "has_bucket/s3_config"
3
+ require "has_bucket/facade"
4
+
5
+ module HasBucket
6
+ def self.of(url)
7
+ config = S3Config.new(url)
8
+ service = S3::Service.new(config.config)
9
+ Facade.new(service, config.bucket)
10
+ end
11
+ end
@@ -0,0 +1,49 @@
1
+ require "cgi"
2
+ require "uri"
3
+ require "s3"
4
+
5
+ module HasBucket
6
+ class Facade
7
+ def initialize(service, bucket_name)
8
+ @service = service
9
+ @bucket_name = bucket_name
10
+ end
11
+
12
+ def include?(key)
13
+ object(key).exists?
14
+ end
15
+
16
+ def []=(key, content)
17
+ s3_object = object(key)
18
+ s3_object.acl = "private"
19
+ s3_object.content = content
20
+ s3_object.save
21
+ end
22
+
23
+ def [](key)
24
+ object(key).content
25
+ end
26
+
27
+ def url_for(key, expiring_at = Time.now + 3600)
28
+ object(key).temporary_url(expiring_at)
29
+ end
30
+
31
+ def public_url_for(key)
32
+ object(key).url
33
+ end
34
+
35
+ def delete(key)
36
+ object(key).destroy
37
+ end
38
+
39
+ private
40
+
41
+ def object(key)
42
+ bucket.object(key)
43
+ end
44
+
45
+ def bucket
46
+ @service.bucket(@bucket_name)
47
+ end
48
+ end
49
+ end
@@ -0,0 +1,18 @@
1
+ require "uri_config"
2
+
3
+ module HasBucket
4
+ class S3Config < URIConfig::Config
5
+ alias_method :access_key_id, :username
6
+ alias_method :secret_access_key, :password
7
+
8
+ def bucket
9
+ path[1..-1]
10
+ end
11
+
12
+ def use_ssl
13
+ uri.scheme == "https"
14
+ end
15
+
16
+ config :access_key_id, :secret_access_key, :use_ssl
17
+ end
18
+ end
@@ -0,0 +1,3 @@
1
+ module HasBucket
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,325 @@
1
+ ---
2
+ http_interactions:
3
+ - request:
4
+ method: delete
5
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
6
+ body:
7
+ encoding: US-ASCII
8
+ string: ''
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
+ Date:
17
+ - Thu, 06 Nov 2014 03:38:12 GMT
18
+ Authorization:
19
+ - AWS AKIAICVNTIM4AWNLWR4Q:IbIaMIAkkRsrn0r9Dk4N2ouSfsY=
20
+ response:
21
+ status:
22
+ code: 204
23
+ message: No Content
24
+ headers:
25
+ X-Amz-Id-2:
26
+ - 1o0ybnBTdj9kQ9/4i4yK1WcaZFfwgOYpPGswyyKIs6ZPI7ukzsu62WKxyTX49mY5
27
+ X-Amz-Request-Id:
28
+ - CC398B07233982D5
29
+ Date:
30
+ - Thu, 06 Nov 2014 03:36:32 GMT
31
+ Server:
32
+ - AmazonS3
33
+ body:
34
+ encoding: UTF-8
35
+ string: ''
36
+ http_version:
37
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
38
+ - request:
39
+ method: head
40
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
41
+ body:
42
+ encoding: US-ASCII
43
+ string: ''
44
+ headers:
45
+ Accept:
46
+ - "*/*"
47
+ User-Agent:
48
+ - Ruby
49
+ Date:
50
+ - Thu, 06 Nov 2014 03:38:12 GMT
51
+ Authorization:
52
+ - AWS AKIAICVNTIM4AWNLWR4Q:wFmJ72SZcj3PydOeeaDNlq1hL2s=
53
+ response:
54
+ status:
55
+ code: 404
56
+ message: Not Found
57
+ headers:
58
+ X-Amz-Request-Id:
59
+ - 7345AC12FCB2D52C
60
+ X-Amz-Id-2:
61
+ - FFNOlMTuUc3CioRxAYYxdqa320KDIO2EEZFWtRg+P1asWvs1rx8/4Gk5R+A6naCF
62
+ Content-Type:
63
+ - application/xml
64
+ Transfer-Encoding:
65
+ - chunked
66
+ Date:
67
+ - Thu, 06 Nov 2014 03:36:32 GMT
68
+ Server:
69
+ - AmazonS3
70
+ body:
71
+ encoding: UTF-8
72
+ string: ''
73
+ http_version:
74
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
75
+ - request:
76
+ method: put
77
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
78
+ body:
79
+ encoding: UTF-8
80
+ string: bar
81
+ headers:
82
+ Accept-Encoding:
83
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
84
+ Accept:
85
+ - "*/*"
86
+ User-Agent:
87
+ - Ruby
88
+ X-Amz-Acl:
89
+ - private
90
+ X-Amz-Storage-Class:
91
+ - STANDARD
92
+ Content-Type:
93
+ - application/octet-stream
94
+ Content-Length:
95
+ - '3'
96
+ Date:
97
+ - Thu, 06 Nov 2014 03:38:12 GMT
98
+ Content-Md5:
99
+ - N7UdGUp1E+RbVvZSTy1R8g==
100
+ Authorization:
101
+ - AWS AKIAICVNTIM4AWNLWR4Q:LclXDxhburWEvq49G7iz6fb7pDc=
102
+ response:
103
+ status:
104
+ code: 200
105
+ message: OK
106
+ headers:
107
+ X-Amz-Id-2:
108
+ - kfd/HnaA2a8D7WVx1NyaZzMqruzNFRX3uaiUtqyRgtTejDW3zlQElZ2e1wff6LFj
109
+ X-Amz-Request-Id:
110
+ - EF36C1A06FBB6047
111
+ Date:
112
+ - Thu, 06 Nov 2014 03:36:34 GMT
113
+ Etag:
114
+ - '"37b51d194a7513e45b56f6524f2d51f2"'
115
+ Content-Length:
116
+ - '0'
117
+ Server:
118
+ - AmazonS3
119
+ body:
120
+ encoding: UTF-8
121
+ string: ''
122
+ http_version:
123
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
124
+ - request:
125
+ method: head
126
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
127
+ body:
128
+ encoding: US-ASCII
129
+ string: ''
130
+ headers:
131
+ Accept:
132
+ - "*/*"
133
+ User-Agent:
134
+ - Ruby
135
+ Date:
136
+ - Thu, 06 Nov 2014 03:38:12 GMT
137
+ Authorization:
138
+ - AWS AKIAICVNTIM4AWNLWR4Q:wFmJ72SZcj3PydOeeaDNlq1hL2s=
139
+ response:
140
+ status:
141
+ code: 200
142
+ message: OK
143
+ headers:
144
+ X-Amz-Id-2:
145
+ - Rreg8RvC73ajnf6HRHlN83vOVKlMenjR4Kt4kZIek6dZYa8353Uf7AdgW1q2kKsc
146
+ X-Amz-Request-Id:
147
+ - 4F2CFCF3F8A46E68
148
+ Date:
149
+ - Thu, 06 Nov 2014 03:36:35 GMT
150
+ Last-Modified:
151
+ - Thu, 06 Nov 2014 03:36:34 GMT
152
+ Etag:
153
+ - '"37b51d194a7513e45b56f6524f2d51f2"'
154
+ Accept-Ranges:
155
+ - bytes
156
+ Content-Type:
157
+ - application/octet-stream
158
+ Content-Length:
159
+ - '3'
160
+ Server:
161
+ - AmazonS3
162
+ body:
163
+ encoding: UTF-8
164
+ string: ''
165
+ http_version:
166
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
167
+ - request:
168
+ method: get
169
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
170
+ body:
171
+ encoding: US-ASCII
172
+ string: ''
173
+ headers:
174
+ Accept-Encoding:
175
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
176
+ Accept:
177
+ - "*/*"
178
+ User-Agent:
179
+ - Ruby
180
+ Date:
181
+ - Thu, 06 Nov 2014 03:38:12 GMT
182
+ Authorization:
183
+ - AWS AKIAICVNTIM4AWNLWR4Q:/nTIryVbw5SShQLLjFnR1gSPx+Q=
184
+ response:
185
+ status:
186
+ code: 200
187
+ message: OK
188
+ headers:
189
+ X-Amz-Id-2:
190
+ - I1IjUx5XQhqcvhIgtGJ/uBa9ORvg7CW2t8x4XqUiCBb0hWLy1OTNFLm8Nru9BKH3
191
+ X-Amz-Request-Id:
192
+ - 2B13FA5415AA371D
193
+ Date:
194
+ - Thu, 06 Nov 2014 03:36:36 GMT
195
+ Last-Modified:
196
+ - Thu, 06 Nov 2014 03:36:34 GMT
197
+ Etag:
198
+ - '"37b51d194a7513e45b56f6524f2d51f2"'
199
+ Accept-Ranges:
200
+ - bytes
201
+ Content-Type:
202
+ - application/octet-stream
203
+ Content-Length:
204
+ - '3'
205
+ Server:
206
+ - AmazonS3
207
+ body:
208
+ encoding: UTF-8
209
+ string: bar
210
+ http_version:
211
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
212
+ - request:
213
+ method: get
214
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo?AWSAccessKeyId=AKIAICVNTIM4AWNLWR4Q&Expires=1415248692&Signature=r8wDERMs9ldVbyFmvUWJ2vnB6Kw=
215
+ body:
216
+ encoding: US-ASCII
217
+ string: ''
218
+ headers:
219
+ Accept-Encoding:
220
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
221
+ Accept:
222
+ - "*/*"
223
+ User-Agent:
224
+ - Ruby
225
+ response:
226
+ status:
227
+ code: 200
228
+ message: OK
229
+ headers:
230
+ X-Amz-Id-2:
231
+ - rb511Eg6qfu2wZgf3RD46sYxffxmqosLsyJootHUqCP6maHJZTmZxTOC2ucRZ0WH
232
+ X-Amz-Request-Id:
233
+ - F24D4345DD72B13C
234
+ Date:
235
+ - Thu, 06 Nov 2014 03:36:37 GMT
236
+ Last-Modified:
237
+ - Thu, 06 Nov 2014 03:36:34 GMT
238
+ Etag:
239
+ - '"37b51d194a7513e45b56f6524f2d51f2"'
240
+ Accept-Ranges:
241
+ - bytes
242
+ Content-Type:
243
+ - application/octet-stream
244
+ Content-Length:
245
+ - '3'
246
+ Server:
247
+ - AmazonS3
248
+ body:
249
+ encoding: UTF-8
250
+ string: bar
251
+ http_version:
252
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
253
+ - request:
254
+ method: delete
255
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
256
+ body:
257
+ encoding: US-ASCII
258
+ string: ''
259
+ headers:
260
+ Accept-Encoding:
261
+ - gzip;q=1.0,deflate;q=0.6,identity;q=0.3
262
+ Accept:
263
+ - "*/*"
264
+ User-Agent:
265
+ - Ruby
266
+ Date:
267
+ - Thu, 06 Nov 2014 03:38:12 GMT
268
+ Authorization:
269
+ - AWS AKIAICVNTIM4AWNLWR4Q:IbIaMIAkkRsrn0r9Dk4N2ouSfsY=
270
+ response:
271
+ status:
272
+ code: 204
273
+ message: No Content
274
+ headers:
275
+ X-Amz-Id-2:
276
+ - oYh2z7mNrVi8shQAzdXuriUC6/ZpKnGJ4nGRqbnAciDGhfGMGLIv1JEqWsCJ/Wjj
277
+ X-Amz-Request-Id:
278
+ - B11418CA8C4574D0
279
+ Date:
280
+ - Thu, 06 Nov 2014 03:36:38 GMT
281
+ Server:
282
+ - AmazonS3
283
+ body:
284
+ encoding: UTF-8
285
+ string: ''
286
+ http_version:
287
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
288
+ - request:
289
+ method: head
290
+ uri: https://s3.amazonaws.com/jma-2014-test-bucket/foo
291
+ body:
292
+ encoding: US-ASCII
293
+ string: ''
294
+ headers:
295
+ Accept:
296
+ - "*/*"
297
+ User-Agent:
298
+ - Ruby
299
+ Date:
300
+ - Thu, 06 Nov 2014 03:38:12 GMT
301
+ Authorization:
302
+ - AWS AKIAICVNTIM4AWNLWR4Q:wFmJ72SZcj3PydOeeaDNlq1hL2s=
303
+ response:
304
+ status:
305
+ code: 404
306
+ message: Not Found
307
+ headers:
308
+ X-Amz-Request-Id:
309
+ - D7156244622D7908
310
+ X-Amz-Id-2:
311
+ - QSYPSAsyxA2tewH8EZxO+0WgTlObTrQsu4Cgl9Ahc4F1WezX6YoKrxGdVjK56N1y
312
+ Content-Type:
313
+ - application/xml
314
+ Transfer-Encoding:
315
+ - chunked
316
+ Date:
317
+ - Thu, 06 Nov 2014 03:36:38 GMT
318
+ Server:
319
+ - AmazonS3
320
+ body:
321
+ encoding: UTF-8
322
+ string: ''
323
+ http_version:
324
+ recorded_at: Thu, 06 Nov 2014 03:38:12 GMT
325
+ recorded_with: VCR 2.9.3
@@ -0,0 +1,32 @@
1
+ require 'spec_helper'
2
+
3
+ describe HasBucket do
4
+ it 'has a version number' do
5
+ expect(HasBucket::VERSION).not_to be nil
6
+ end
7
+
8
+ let(:url) do
9
+ 'https://AKIAICVNTIM4AWNLWR4Q:or68aWn0XdYkU3ACrlBXQlTOnu2afAmhL0BkXfJe@' \
10
+ 's3.amazonaws.com/jma-2014-test-bucket'
11
+ end
12
+
13
+ let(:key) { "foo" }
14
+ let(:value) { "bar" }
15
+
16
+ subject { HasBucket.of(url) }
17
+
18
+ it "should allow storage of blobs on S3", :vcr do
19
+ subject.delete key
20
+ expect(subject).to_not include(key)
21
+
22
+ subject[key] = value
23
+ expect(subject).to include(key)
24
+ expect(subject[key]).to eq value
25
+
26
+ read_data = Net::HTTP.get(URI subject.url_for key)
27
+ expect(read_data).to eq value
28
+
29
+ subject.delete key
30
+ expect(subject).to_not include(key)
31
+ end
32
+ end
@@ -0,0 +1,23 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+ require 'has_bucket'
3
+
4
+ require 'vcr'
5
+
6
+ VCR.configure do |c|
7
+ c.cassette_library_dir = 'spec/cassettes'
8
+ c.hook_into "webmock"
9
+ c.configure_rspec_metadata!
10
+ end
11
+
12
+ require "timecop"
13
+
14
+ RSpec.configure do |c|
15
+ c.before(:each) do
16
+ cassette = VCR.current_cassette
17
+ Timecop.freeze(cassette.originally_recorded_at || Time.now) if cassette
18
+ end
19
+
20
+ c.after(:each) do
21
+ Timecop.return
22
+ end
23
+ end
metadata ADDED
@@ -0,0 +1,190 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: has_bucket
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jonathon M. Abbott
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2014-11-06 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: uri_config
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: s3
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.6'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.6'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '10.0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '10.0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rspec
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 3.1.0
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 3.1.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: 0.27.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: 0.27.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: vcr
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: 2.9.3
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: 2.9.3
111
+ - !ruby/object:Gem::Dependency
112
+ name: webmock
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - "~>"
116
+ - !ruby/object:Gem::Version
117
+ version: 1.20.3
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - "~>"
123
+ - !ruby/object:Gem::Version
124
+ version: 1.20.3
125
+ - !ruby/object:Gem::Dependency
126
+ name: timecop
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ description: Simple wrapper around single-bucket S3 storage
140
+ email:
141
+ - jonathona@everydayhero.com.au
142
+ executables: []
143
+ extensions: []
144
+ extra_rdoc_files: []
145
+ files:
146
+ - ".gitignore"
147
+ - ".rspec"
148
+ - ".rubocop.yml"
149
+ - ".travis.yml"
150
+ - Gemfile
151
+ - LICENSE.txt
152
+ - README.md
153
+ - Rakefile
154
+ - has_bucket.gemspec
155
+ - lib/has_bucket.rb
156
+ - lib/has_bucket/facade.rb
157
+ - lib/has_bucket/s3_config.rb
158
+ - lib/has_bucket/version.rb
159
+ - spec/cassettes/HasBucket/should_allow_storage_of_blobs_on_S3.yml
160
+ - spec/has_bucket_spec.rb
161
+ - spec/spec_helper.rb
162
+ homepage: https://github.com/JonathonMA/has_bucket
163
+ licenses:
164
+ - MIT
165
+ metadata: {}
166
+ post_install_message:
167
+ rdoc_options: []
168
+ require_paths:
169
+ - lib
170
+ required_ruby_version: !ruby/object:Gem::Requirement
171
+ requirements:
172
+ - - ">="
173
+ - !ruby/object:Gem::Version
174
+ version: '0'
175
+ required_rubygems_version: !ruby/object:Gem::Requirement
176
+ requirements:
177
+ - - ">="
178
+ - !ruby/object:Gem::Version
179
+ version: '0'
180
+ requirements: []
181
+ rubyforge_project:
182
+ rubygems_version: 2.4.2
183
+ signing_key:
184
+ specification_version: 4
185
+ summary: i has an S3 bucket
186
+ test_files:
187
+ - spec/cassettes/HasBucket/should_allow_storage_of_blobs_on_S3.yml
188
+ - spec/has_bucket_spec.rb
189
+ - spec/spec_helper.rb
190
+ has_rdoc: