breadbox 1.2.1 → 1.3.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/README.md +1 -0
- data/breadbox.gemspec +1 -1
- data/lib/breadbox/configuration.rb +10 -0
- data/lib/breadbox/s3_client.rb +22 -18
- data/lib/breadbox/version.rb +1 -1
- data/spec/breadbox/s3_client_spec.rb +39 -18
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 864b92924c79c0de55813778e21139799b6a535c
|
4
|
+
data.tar.gz: 737a51e54067aa9f171f4db91a936696cf830782
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ef2deb7707fc28b3b6deca9467acf318ab55a49f50a1b465a5f7fa066adf69671064e6fa58cdfc01455675626f85a34c1fc3377fab640122a3d1233cf39cd597
|
7
|
+
data.tar.gz: b88fc9242b7ee9a250ce5283dbaa17519b556939933db998965693773c3ffa8914d1e1b094f4f0caa20a67fd7d469d5e2e30aa9b981217f98f21eb7485311355
|
data/README.md
CHANGED
@@ -50,6 +50,7 @@ end
|
|
50
50
|
# config/initializers/breadbox.rb
|
51
51
|
|
52
52
|
Breadbox.configure do |config|
|
53
|
+
config.s3_region = xxxxxxxx # OPTIONAL - defaults to "us-east-1"
|
53
54
|
config.s3_bucket = "name of the bucket" # THIS IS REQUIRED
|
54
55
|
config.s3_secret_access_key = xxxxxx # THIS IS REQUIRED
|
55
56
|
config.s3_access_key_id = xxxxxxx # THIS IS REQUIRED
|
data/breadbox.gemspec
CHANGED
@@ -19,7 +19,7 @@ Gem::Specification.new do |spec|
|
|
19
19
|
spec.require_paths = ["lib"]
|
20
20
|
|
21
21
|
spec.add_dependency "dropbox-sdk", "~> 1.6"
|
22
|
-
spec.add_dependency "aws-sdk", "~> 1.
|
22
|
+
spec.add_dependency "aws-sdk", "~> 2.1.7"
|
23
23
|
|
24
24
|
spec.add_development_dependency "bundler", "~> 1.6"
|
25
25
|
spec.add_development_dependency "rake"
|
@@ -7,6 +7,8 @@ module Breadbox
|
|
7
7
|
:provider,
|
8
8
|
:root_path
|
9
9
|
|
10
|
+
attr_writer :s3_region
|
11
|
+
|
10
12
|
def initialize
|
11
13
|
@root_path = default_root_path
|
12
14
|
end
|
@@ -19,8 +21,16 @@ module Breadbox
|
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
24
|
+
def s3_region
|
25
|
+
@s3_region || default_s3_region
|
26
|
+
end
|
27
|
+
|
22
28
|
protected
|
23
29
|
|
30
|
+
def default_s3_region
|
31
|
+
"us-east-1"
|
32
|
+
end
|
33
|
+
|
24
34
|
def default_root_path
|
25
35
|
"/"
|
26
36
|
end
|
data/lib/breadbox/s3_client.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require "aws"
|
1
|
+
require "aws-sdk"
|
2
2
|
require "breadbox/client"
|
3
3
|
|
4
4
|
module Breadbox
|
@@ -8,35 +8,39 @@ module Breadbox
|
|
8
8
|
end
|
9
9
|
|
10
10
|
def s3_bucket_object
|
11
|
-
@bucket ||=
|
11
|
+
@bucket ||= Aws::S3::Resource.new(client: s3_client_object).bucket(bucket)
|
12
12
|
end
|
13
13
|
|
14
14
|
def upload(options = {})
|
15
|
-
path
|
16
|
-
file
|
17
|
-
acl
|
18
|
-
content_type
|
19
|
-
filepath
|
20
|
-
|
15
|
+
path = options[:path]
|
16
|
+
file = options[:file]
|
17
|
+
acl = options[:public] ? :public_read : :private
|
18
|
+
content_type = options[:content_type]
|
19
|
+
filepath = filepath_from_paths_and_file(root_path, path, file)[1..-1]
|
20
|
+
s3_object = s3_bucket_object.object(filepath)
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
result = s3_object.put(body: file, acl: acl, content_type: content_type)
|
23
|
+
|
24
|
+
if result && result.successful?
|
25
|
+
s3_object.public_url.to_s
|
24
26
|
end
|
25
27
|
end
|
26
28
|
|
29
|
+
def s3_client_object
|
30
|
+
@client ||= Aws::S3::Client.new(
|
31
|
+
region: configuration.s3_region,
|
32
|
+
credentials: Aws::Credentials.new(
|
33
|
+
configuration.s3_access_key_id,
|
34
|
+
configuration.s3_secret_access_key,
|
35
|
+
)
|
36
|
+
)
|
37
|
+
end
|
38
|
+
|
27
39
|
protected
|
28
40
|
|
29
41
|
def post_initialize
|
30
42
|
validate_bucket
|
31
43
|
validate_tokens
|
32
|
-
setup_s3
|
33
|
-
end
|
34
|
-
|
35
|
-
def setup_s3
|
36
|
-
AWS.config(
|
37
|
-
access_key_id: configuration.s3_access_key_id,
|
38
|
-
secret_access_key: configuration.s3_secret_access_key
|
39
|
-
)
|
40
44
|
end
|
41
45
|
|
42
46
|
def validate_bucket
|
data/lib/breadbox/version.rb
CHANGED
@@ -51,22 +51,32 @@ module Breadbox
|
|
51
51
|
end
|
52
52
|
end
|
53
53
|
|
54
|
-
describe "
|
55
|
-
it "
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
}
|
60
|
-
expect(AWS).to receive(:config).with(options)
|
61
|
-
S3Client.new(configuration)
|
54
|
+
describe "#s3_bucket_object" do
|
55
|
+
it "returns a new bucket object from Aws::S3" do
|
56
|
+
client = S3Client.new(configuration)
|
57
|
+
bucket_object = client.s3_bucket_object
|
58
|
+
expect(bucket_object).to be_kind_of Aws::S3::Bucket
|
62
59
|
end
|
63
60
|
end
|
64
61
|
|
65
|
-
describe "#
|
66
|
-
|
62
|
+
describe "#s3_client_object" do
|
63
|
+
let(:credentials) { double(:credentials) }
|
64
|
+
|
65
|
+
before do
|
66
|
+
allow(Aws::Credentials).to receive(:new).with(
|
67
|
+
configuration.s3_access_key_id,
|
68
|
+
configuration.s3_secret_access_key,
|
69
|
+
).and_return(credentials)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "initializes with the correct data" do
|
73
|
+
expect(Aws::S3::Client).to receive(:new).with(
|
74
|
+
region: configuration.s3_region,
|
75
|
+
credentials: credentials
|
76
|
+
)
|
77
|
+
|
67
78
|
client = S3Client.new(configuration)
|
68
|
-
|
69
|
-
expect(bucket_object).to be_kind_of AWS::S3::Bucket
|
79
|
+
client.s3_client_object
|
70
80
|
end
|
71
81
|
end
|
72
82
|
|
@@ -78,19 +88,30 @@ module Breadbox
|
|
78
88
|
|
79
89
|
it "writes a file to an S3 Bucket Object" do
|
80
90
|
file = File.open("./tmp/new-file.jpg")
|
81
|
-
options = { acl: :public_read, content_type: nil }
|
82
|
-
expect_any_instance_of(
|
83
|
-
|
91
|
+
options = { body: file, acl: :public_read, content_type: nil }
|
92
|
+
expect_any_instance_of(Aws::S3::Object)
|
93
|
+
.to receive(:put).with(options)
|
94
|
+
|
84
95
|
client.upload(path: "/", file: file, public: true)
|
85
96
|
end
|
86
97
|
|
87
98
|
it "passes content-type parameter" do
|
88
99
|
file = File.open("./tmp/new-file.jpg")
|
89
|
-
options = { content_type: "image/jpeg"
|
90
|
-
expect_any_instance_of(
|
91
|
-
|
100
|
+
options = { body: file, acl: :private, content_type: "image/jpeg" }
|
101
|
+
expect_any_instance_of(Aws::S3::Object)
|
102
|
+
.to receive(:put).with(options)
|
103
|
+
|
92
104
|
client.upload(path: "/", file: file, content_type: "image/jpeg")
|
93
105
|
end
|
106
|
+
|
107
|
+
it "defaults to private :acl" do
|
108
|
+
file = File.open("./tmp/new-file.jpg")
|
109
|
+
options = { body: file, acl: :private, content_type: "image/jpeg" }
|
110
|
+
expect_any_instance_of(Aws::S3::Object)
|
111
|
+
.to receive(:put).with(options)
|
112
|
+
|
113
|
+
client.upload(path: "/", file: file, public: nil, content_type: "image/jpeg")
|
114
|
+
end
|
94
115
|
end
|
95
116
|
end
|
96
117
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: breadbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Nathaniel Watts
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: dropbox-sdk
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 2.1.7
|
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: 2.1.7
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: bundler
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|