blobby-s3 1.0.0 → 1.1.0
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.
- checksums.yaml +4 -4
- data/.travis.yml +9 -0
- data/CHANGES.md +8 -0
- data/Gemfile +0 -1
- data/README.md +3 -1
- data/Rakefile +2 -0
- data/blobby-s3.gemspec +2 -2
- data/lib/blobby-s3.rb +1 -0
- data/lib/blobby/s3_store.rb +21 -5
- data/spec/blobby/s3_store_spec.rb +57 -1
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 815ee79119fea852e7da5b17a52a0da336e0be7d
|
4
|
+
data.tar.gz: 8e1817e54d7ac8c92e7fe752e14cb1ffb11fdb88
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 43ba0af1954d399a279969035cfc8480f998cd74e74cd71125cacdfe131e929113d16ff2516cb073abe39603a0d3fefc03f65549e7d676c64bb37ec0a7f216ad
|
7
|
+
data.tar.gz: 4504c6c2ba203320779a0374088c3dd00544a7ea73bdea31fa84d874b93ac548a7142112cd5423d3da4db1a3a547d08be72a6ef669f91d9238ecb7164bb49492
|
data/.travis.yml
ADDED
@@ -0,0 +1,9 @@
|
|
1
|
+
language: ruby
|
2
|
+
rvm:
|
3
|
+
- 2.2.2
|
4
|
+
env:
|
5
|
+
global:
|
6
|
+
- AWS_DEFAULT_REGION=us-east-1
|
7
|
+
- BLOBBY_S3_TEST_BUCKET=fake-aws-sdk-s3-test
|
8
|
+
- AWS_ACCESS_KEY_ID=AKIAJ6LW4DFV3RH4Z6OQ
|
9
|
+
- secure: RozEwNe8txMO8jqo/hFWnusfiUSpvz2yN6bDe1G/8bW3pOmjYT319qL5jAIHBxQFohHpUsJMxwsjS07yNq1rlBDuiDJsNnZW6RGzOuVTztaxgjeauo8X4vV3PkZU6Ln0qoYPQiCsIwQfczBpno2Eor0E1BuOXcZGtHsFoQQxWiBG9RkCelGx+ZeMuP/v8EuV4Fd5YOJgzTqWGuaFXEONqeeTVmUoObltJnPCcdpYMzI/+Wn2/dU2gnpRxTJHGrgmVKRWn/M0I7aIEQ9FeJuPVahcdkCPHfzoceTySdl/YVMcjsu6PsHPAQywo6qo4MShV/VI0cUw6hWOf9X9tzdZamyKnaeY1EaIw0C/sZ2dn7dsbRzIn9ls+mI2y32khMX/AG8hze2udKhq3Ai1gREYjo0vvU6q/i2DAoDETaP/Ig3qJshzz1XntBx9NAGkzad3xbkRB9p/e60pfB9E4ZxZG+OSkUi7AGu68ZlI2ceSus46QkG6ya9FNUnJTQEuaUvrg7EASiuKBjQia8Ce9GwzujAxZWVRwWDjvTg3Wo5oGxfVmHWEleVVTFtuuvkroChyetgr/1iLXOigvssHRYFPlDhWKH/bJ9gjyYequEJxoBREwW/Qe3u4kCGgR0vz0CWcVP9RRejTm4RDUpmcreun423WTmq5UWmb9Pj5Fd1f3wM=
|
data/CHANGES.md
ADDED
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,10 +1,12 @@
|
|
1
1
|
# Blobby::S3Store
|
2
2
|
|
3
|
+
[](https://travis-ci.org/realestate-com-au/blobby-s3)
|
4
|
+
|
3
5
|
This gem provides an S3-based implementation of the "store" interface defined by the ["blobby"](https://github.com/realestate-com-au/blobby) gem. It's been packaged separately, to avoid adding dependencies to the core gem.
|
4
6
|
|
5
7
|
The simplest use-case is writing to a single bucket:
|
6
8
|
|
7
|
-
s3_store = Blobby
|
9
|
+
s3_store = Blobby.store("s3://mybucket")
|
8
10
|
s3_store["key"].write("something big")
|
9
11
|
|
10
12
|
Credentials can be provided, if required:
|
data/Rakefile
CHANGED
data/blobby-s3.gemspec
CHANGED
@@ -8,7 +8,7 @@ Gem::Specification.new do |gem|
|
|
8
8
|
gem.homepage = "https://github.com/realestate-com.au/blobby-s3"
|
9
9
|
|
10
10
|
gem.name = "blobby-s3"
|
11
|
-
gem.version = "1.
|
11
|
+
gem.version = "1.1.0"
|
12
12
|
|
13
13
|
gem.files = `git ls-files`.split($OUTPUT_RECORD_SEPARATOR)
|
14
14
|
gem.executables = gem.files.grep(%r{^bin/}).map { |f| File.basename(f) }
|
@@ -16,6 +16,6 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.require_paths = ["lib"]
|
17
17
|
|
18
18
|
gem.add_runtime_dependency("aws-sdk-resources", "~> 2.1")
|
19
|
-
gem.add_runtime_dependency("blobby")
|
19
|
+
gem.add_runtime_dependency("blobby", "~> 1.1.0")
|
20
20
|
|
21
21
|
end
|
data/lib/blobby-s3.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "blobby/s3_store"
|
data/lib/blobby/s3_store.rb
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
require "aws-sdk-resources"
|
2
|
-
require "blobby
|
2
|
+
require "blobby"
|
3
|
+
require "blobby/key_transforming_store"
|
4
|
+
require "uri"
|
3
5
|
|
4
6
|
module Blobby
|
5
7
|
|
@@ -7,6 +9,19 @@ module Blobby
|
|
7
9
|
#
|
8
10
|
class S3Store
|
9
11
|
|
12
|
+
def self.from_uri(uri)
|
13
|
+
uri = URI(uri)
|
14
|
+
raise ArgumentError, "invalid S3 address: #{uri}" unless uri.scheme == "s3"
|
15
|
+
bucket_name = uri.host
|
16
|
+
prefix = uri.path.sub(%r{\A/}, "").sub(%r{/\Z}, "")
|
17
|
+
raise ArgumentError, "no bucket specified" if bucket_name.nil?
|
18
|
+
store = new(bucket_name)
|
19
|
+
unless prefix.empty?
|
20
|
+
store = KeyTransformingStore.new(store) { |key| prefix + "/" + key }
|
21
|
+
end
|
22
|
+
store
|
23
|
+
end
|
24
|
+
|
10
25
|
# Create a new instance.
|
11
26
|
#
|
12
27
|
# bucket_name - name of the bucket to store things in
|
@@ -44,14 +59,13 @@ module Blobby
|
|
44
59
|
end
|
45
60
|
|
46
61
|
def read
|
47
|
-
body = s3_object.get.body
|
48
62
|
if block_given?
|
49
|
-
|
50
|
-
yield force_binary(
|
63
|
+
s3_object.get do |chunk|
|
64
|
+
yield force_binary(chunk)
|
51
65
|
end
|
52
66
|
nil
|
53
67
|
else
|
54
|
-
force_binary(body.read)
|
68
|
+
force_binary(s3_object.get.body.read)
|
55
69
|
end
|
56
70
|
rescue Aws::S3::Errors::NoSuchKey
|
57
71
|
nil
|
@@ -110,4 +124,6 @@ module Blobby
|
|
110
124
|
|
111
125
|
end
|
112
126
|
|
127
|
+
register_store_factory "s3", S3Store
|
128
|
+
|
113
129
|
end
|
@@ -7,6 +7,62 @@ $LOAD_PATH << Gem.loaded_specs["blobby"].full_gem_path + "/spec"
|
|
7
7
|
|
8
8
|
require "blobby/store_behaviour"
|
9
9
|
|
10
|
+
describe Blobby::S3Store do
|
11
|
+
|
12
|
+
describe ".from_uri" do
|
13
|
+
|
14
|
+
context "with s3://bucket" do
|
15
|
+
|
16
|
+
let(:store) { described_class.from_uri("s3://bucket") }
|
17
|
+
|
18
|
+
it "creates an S3Store" do
|
19
|
+
expect(store).to be_a(described_class)
|
20
|
+
end
|
21
|
+
|
22
|
+
it "maps objects to the specified bucket" do
|
23
|
+
expect(store["object"].send(:s3_object).bucket.name).to eql("bucket")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "maps objects with the specified names" do
|
27
|
+
expect(store["object"].send(:s3_object).key).to eql("object")
|
28
|
+
end
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
context "with s3://bucket/prefix/" do
|
33
|
+
|
34
|
+
let(:store) { described_class.from_uri("s3://bucket/prefix/") }
|
35
|
+
|
36
|
+
it "maps objects with the specified prefix" do
|
37
|
+
expect(store["object"].send(:s3_object).key).to eql("prefix/object")
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
|
42
|
+
context "with non-S3 uri" do
|
43
|
+
|
44
|
+
it "raises ArgumentError" do
|
45
|
+
expect {
|
46
|
+
described_class.from_uri("http://bucket")
|
47
|
+
}.to raise_error(ArgumentError)
|
48
|
+
end
|
49
|
+
|
50
|
+
end
|
51
|
+
|
52
|
+
context "without a bucket" do
|
53
|
+
|
54
|
+
it "raises ArgumentError" do
|
55
|
+
expect {
|
56
|
+
described_class.from_uri("s3://")
|
57
|
+
}.to raise_error(ArgumentError)
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
10
66
|
describe Blobby::S3Store, :integration => true do
|
11
67
|
|
12
68
|
before(:all) do
|
@@ -17,7 +73,7 @@ describe Blobby::S3Store, :integration => true do
|
|
17
73
|
|
18
74
|
context "with a writable bucket" do
|
19
75
|
|
20
|
-
EXISTING_BUCKET_NAME = "fake-aws-sdk-s3-test"
|
76
|
+
EXISTING_BUCKET_NAME = ENV.fetch("BLOBBY_S3_TEST_BUCKET", "fake-aws-sdk-s3-test")
|
21
77
|
|
22
78
|
let(:s3_resource) { Aws::S3::Resource.new(:region => "us-east-1")}
|
23
79
|
let(:bucket) { s3_resource.bucket(EXISTING_BUCKET_NAME) }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blobby-s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Williams
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-05-22 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: aws-sdk-resources
|
@@ -28,16 +28,16 @@ dependencies:
|
|
28
28
|
name: blobby
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 1.1.0
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- - "
|
38
|
+
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 1.1.0
|
41
41
|
description:
|
42
42
|
email:
|
43
43
|
- mdub@dogbiscuit.org
|
@@ -48,10 +48,13 @@ files:
|
|
48
48
|
- ".gitignore"
|
49
49
|
- ".rspec"
|
50
50
|
- ".rubocop.yml"
|
51
|
+
- ".travis.yml"
|
52
|
+
- CHANGES.md
|
51
53
|
- Gemfile
|
52
54
|
- README.md
|
53
55
|
- Rakefile
|
54
56
|
- blobby-s3.gemspec
|
57
|
+
- lib/blobby-s3.rb
|
55
58
|
- lib/blobby/s3_store.rb
|
56
59
|
- spec/blobby/s3_store_spec.rb
|
57
60
|
homepage: https://github.com/realestate-com.au/blobby-s3
|
@@ -73,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
73
76
|
version: '0'
|
74
77
|
requirements: []
|
75
78
|
rubyforge_project:
|
76
|
-
rubygems_version: 2.
|
79
|
+
rubygems_version: 2.5.1
|
77
80
|
signing_key:
|
78
81
|
specification_version: 4
|
79
82
|
summary: Store BLOBs in S3
|