usmu-s3 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +9 -0
- data/README.md +22 -3
- data/lib/usmu/s3.rb +3 -3
- data/lib/usmu/s3/s3_configuration.rb +4 -0
- data/lib/usmu/s3/uploader.rb +4 -0
- data/lib/usmu/s3/version.rb +1 -1
- data/spec/s3/s3_configuration_spec.rb +11 -0
- data/spec/s3/uploader_spec.rb +21 -2
- data/spec/s3_spec.rb +8 -6
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ed718f2274fba13642f76b974506164780db8d06
|
4
|
+
data.tar.gz: 88a9c13316372475e68922edeca87e80089c6d73
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 02e856d7c49ab50309c0a5c3dc6858d51ef12b4fe5a766884c756847972c11a2b16adc44437746283a1f2ea3f2acfc9d313ebe3fd10cc9e30527bae6d068de7e
|
7
|
+
data.tar.gz: 72d2601cdf3c358452dc6034a11f720d3614aa2fde9d6554b1cf3402df213e72e4cc5c895ad2a3858cec9bfa02779f75bd636eea35037eee85a15a27538f6f8b
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,14 @@
|
|
1
1
|
# Usmu S3 Upload plugin changelog
|
2
2
|
|
3
|
+
## 1.1.0.pre
|
4
|
+
|
5
|
+
Matthew Scharley <matt.scharley@gmail.com>
|
6
|
+
|
7
|
+
* Bump to 1.1.0.pre for further dev (7778eab819fcbd07560615fa2e6333f8d339201e)
|
8
|
+
* [ci skip] Update README (8638b8202aef9b9662fdbc738c209c485d206842)
|
9
|
+
* [#9] Add reduced redundancy support (63506a00ac84e38f171e9386cd54ea2e0df8fab2)
|
10
|
+
* Fix command's tests (788741ef5d95c766140e20bed7ea167f23451d22)
|
11
|
+
|
3
12
|
## 1.0.0
|
4
13
|
|
5
14
|
Matthew Scharley <matt.scharley@gmail.com>
|
data/README.md
CHANGED
@@ -16,15 +16,34 @@
|
|
16
16
|
|
17
17
|
Allows you to deploy your [Usmu][usmu] website to Amazon's S3 service.
|
18
18
|
|
19
|
-
TODO: Write synopsis here
|
20
|
-
|
21
19
|
## Installation
|
22
20
|
|
23
21
|
$ gem install usmu-s3
|
24
22
|
|
23
|
+
OR
|
24
|
+
|
25
|
+
$ echo 'gem "usmu-s3"' >> Gemfile
|
26
|
+
$ bundle install
|
27
|
+
|
28
|
+
Usmu will automatically detect any plugins available and automatically make them available.
|
29
|
+
|
30
|
+
## Configuration
|
31
|
+
|
32
|
+
You can configure this plugin in your `usmu.yml` file:
|
33
|
+
|
34
|
+
plugin:
|
35
|
+
s3:
|
36
|
+
access_key: '%env{AWS_ACCESS_KEY_ID}'
|
37
|
+
secret_key: '%env{AWS_SECRET_ACCESS_KEY}'
|
38
|
+
region: 'us-east-1'
|
39
|
+
bucket: 'usmu.org'
|
40
|
+
|
41
|
+
All S3 configuration options can be pulled from environment variables as shown above. Your access key and secret key
|
42
|
+
will default to the above environment variables (the same ones used by the SDK) if not specified.
|
43
|
+
|
25
44
|
## Usage
|
26
45
|
|
27
|
-
|
46
|
+
$ usmu s3 deploy
|
28
47
|
|
29
48
|
[gh-contrib]: https://github.com/usmu/usmu-s3/graphs/contributors
|
30
49
|
[gh-issues]: https://github.com/usmu/usmu-s3/issues
|
data/lib/usmu/s3.rb
CHANGED
@@ -30,9 +30,9 @@ module Usmu
|
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
33
|
-
def command_deploy(args
|
34
|
-
raise 'This command does not take arguments
|
35
|
-
raise 'Invalid options
|
33
|
+
def command_deploy(args, options)
|
34
|
+
raise 'This command does not take arguments' unless args.empty?
|
35
|
+
raise 'Invalid options' unless options.inspect.start_with? '<Commander::Command::Options '
|
36
36
|
|
37
37
|
configuration = @ui.configuration
|
38
38
|
s3_configuration = S3Configuration.new(configuration['plugin', 's3', default: {}])
|
@@ -23,6 +23,10 @@ module Usmu
|
|
23
23
|
substitute_env @config['bucket'] || ''
|
24
24
|
end
|
25
25
|
|
26
|
+
def reduced_redundancy
|
27
|
+
@config['reduced redundancy'] || false
|
28
|
+
end
|
29
|
+
|
26
30
|
def inspect
|
27
31
|
"\#<#{self.class} region=\"#{region}\" access_key=\"#{access_key}\" bucket=\"#{bucket}\">"
|
28
32
|
end
|
data/lib/usmu/s3/uploader.rb
CHANGED
@@ -7,6 +7,7 @@ module Usmu
|
|
7
7
|
def initialize(configuration, s3_configuration)
|
8
8
|
@log = Logging.logger[self]
|
9
9
|
@configuration = configuration
|
10
|
+
@s3_configuration = s3_configuration
|
10
11
|
s3 = Aws::S3::Resource.new(credentials: s3_configuration.credentials, region: s3_configuration.region)
|
11
12
|
@bucket = s3.bucket(s3_configuration.bucket)
|
12
13
|
end
|
@@ -21,15 +22,18 @@ module Usmu
|
|
21
22
|
|
22
23
|
attr_reader :log
|
23
24
|
attr_reader :configuration
|
25
|
+
attr_reader :s3_configuration
|
24
26
|
attr_reader :bucket
|
25
27
|
|
26
28
|
def push_local(files)
|
29
|
+
storage_class = @s3_configuration.reduced_redundancy ? 'REDUCED_REDUNDANCY' : 'STANDARD'
|
27
30
|
for file in files
|
28
31
|
@log.success("Uploading #{file}")
|
29
32
|
File.open(File.join(@configuration.destination_path, file), 'r') do |io|
|
30
33
|
@bucket.put_object({
|
31
34
|
key: file,
|
32
35
|
body: io,
|
36
|
+
storage_class: storage_class
|
33
37
|
})
|
34
38
|
end
|
35
39
|
end
|
data/lib/usmu/s3/version.rb
CHANGED
@@ -10,6 +10,7 @@ RSpec.describe Usmu::S3::S3Configuration do
|
|
10
10
|
'access key' => 'replace %env{TEST_ACCESS_KEY}',
|
11
11
|
'secret key' => 'replace %env{TEST_SECRET_KEY}',
|
12
12
|
'bucket' => 'replace %env{TEST_BUCKET}',
|
13
|
+
'reduced redundancy' => true,
|
13
14
|
}
|
14
15
|
)
|
15
16
|
}
|
@@ -86,6 +87,16 @@ RSpec.describe Usmu::S3::S3Configuration do
|
|
86
87
|
end
|
87
88
|
end
|
88
89
|
|
90
|
+
context '#reduced_redundancy' do
|
91
|
+
it 'has a default value of false' do
|
92
|
+
expect(empty_configuration.reduced_redundancy).to eq(false)
|
93
|
+
end
|
94
|
+
|
95
|
+
it 'returns the "reduced redundancy" key' do
|
96
|
+
expect(configuration.reduced_redundancy).to eq(true)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
|
89
100
|
context '#substitute_env' do
|
90
101
|
it 'replaces environment variables' do
|
91
102
|
expect(empty_configuration.send :substitute_env, '%env{AWS_REGION}').to eq('us-east-1')
|
data/spec/s3/uploader_spec.rb
CHANGED
@@ -21,13 +21,14 @@ RSpec.describe Usmu::S3::Uploader do
|
|
21
21
|
let (:uploader) { Usmu::S3::Uploader.new(configuration, s3_configuration) }
|
22
22
|
|
23
23
|
before do
|
24
|
-
|
24
|
+
allow(s3_configuration).to receive(:credentials).and_return(creds)
|
25
25
|
expect(Aws::S3::Resource).to receive(:new).with({credentials: creds, region: 'us-east-1'}).and_return(s3)
|
26
26
|
end
|
27
27
|
|
28
28
|
context '#initialize' do
|
29
29
|
it 'sets up instance variables' do
|
30
30
|
expect(uploader.send :configuration).to eq(configuration)
|
31
|
+
expect(uploader.send :s3_configuration).to eq(s3_configuration)
|
31
32
|
expect(uploader.send :bucket).to eq(s3)
|
32
33
|
expect(s3.get_bucket).to eq('bucket')
|
33
34
|
expect(uploader.send(:log).is_a? Logging::Logger).to eq(true)
|
@@ -51,16 +52,34 @@ RSpec.describe Usmu::S3::Uploader do
|
|
51
52
|
|
52
53
|
context '#push_local' do
|
53
54
|
let (:io) { OpenStruct.new {} }
|
55
|
+
let (:rr_configuration) {
|
56
|
+
Usmu::S3::S3Configuration.new(
|
57
|
+
{
|
58
|
+
'access key' => 'access',
|
59
|
+
'secret key' => 'secret',
|
60
|
+
'region' => 'us-east-1',
|
61
|
+
'bucket' => 'bucket',
|
62
|
+
'reduced redundancy' => true,
|
63
|
+
}
|
64
|
+
)
|
65
|
+
}
|
66
|
+
let (:rr_uploader) { Usmu::S3::Uploader.new(configuration, rr_configuration) }
|
54
67
|
|
55
68
|
before do
|
56
69
|
allow(File).to receive(:open).with('site/local.html', 'r').and_yield(io)
|
70
|
+
allow(rr_configuration).to receive(:credentials).and_return(creds)
|
57
71
|
end
|
58
72
|
|
59
73
|
it 'sends a request to S3 to push named files' do
|
60
|
-
expect(s3).to receive(:put_object).with({key: 'local.html', body: io})
|
74
|
+
expect(s3).to receive(:put_object).with({key: 'local.html', body: io, storage_class: 'STANDARD'})
|
61
75
|
uploader.send :push_local, ['local.html']
|
62
76
|
end
|
63
77
|
|
78
|
+
it 'uses reduced redundancy if requested' do
|
79
|
+
expect(s3).to receive(:put_object).with({key: 'local.html', body: io, storage_class: 'REDUCED_REDUNDANCY'})
|
80
|
+
rr_uploader.send :push_local, ['local.html']
|
81
|
+
end
|
82
|
+
|
64
83
|
it 'logs files as they are pushed' do
|
65
84
|
uploader.send :push_local, ['local.html']
|
66
85
|
expect(@log_output.readline).to eq("SUCCESS Usmu::S3::Uploader : Uploading local.html\n")
|
data/spec/s3_spec.rb
CHANGED
@@ -3,6 +3,7 @@ require 'usmu/configuration'
|
|
3
3
|
require 'usmu/uploader_mock'
|
4
4
|
require 'usmu/commander_mock'
|
5
5
|
require 'ostruct'
|
6
|
+
require 'commander'
|
6
7
|
|
7
8
|
RSpec.describe Usmu::S3 do
|
8
9
|
let(:plugin) { Usmu::S3.new }
|
@@ -39,7 +40,7 @@ RSpec.describe Usmu::S3 do
|
|
39
40
|
plugin.commands(ui, commander)
|
40
41
|
expect(commander.get_command(:'s3 deploy')[:syntax]).to eq('usmu s3 deploy')
|
41
42
|
expect(commander.get_command(:'s3 deploy')[:description]).to eq('Deploys your website to S3')
|
42
|
-
expect(commander.get_command(:'s3 deploy')[:action]
|
43
|
+
expect(commander.get_command(:'s3 deploy')[:action]).to be_a(Proc)
|
43
44
|
end
|
44
45
|
end
|
45
46
|
|
@@ -63,13 +64,14 @@ RSpec.describe Usmu::S3 do
|
|
63
64
|
let(:diffs) { OpenStruct.new }
|
64
65
|
let(:uploader) { Usmu::UploaderMock.new }
|
65
66
|
let(:remote_files) { OpenStruct.new }
|
67
|
+
let (:options) { Commander::Command::Options.new }
|
66
68
|
|
67
69
|
it 'raises an error when arguments are specified' do
|
68
|
-
expect { plugin.command_deploy(['foo']) }.to raise_error('This command does not take arguments
|
70
|
+
expect { plugin.command_deploy(['foo'], options) }.to raise_error('This command does not take arguments')
|
69
71
|
end
|
70
72
|
|
71
73
|
it 'raises an error when invalid options are specified' do
|
72
|
-
expect { plugin.command_deploy([], []) }.to raise_error('Invalid options
|
74
|
+
expect { plugin.command_deploy([], []) }.to raise_error('Invalid options')
|
73
75
|
end
|
74
76
|
|
75
77
|
it 'gets a DirectoryDiff and passes that to an Uploader' do
|
@@ -78,7 +80,7 @@ RSpec.describe Usmu::S3 do
|
|
78
80
|
expect(Usmu::Deployment::DirectoryDiff).to receive(:new).with(configuration, remote_files).and_return(differ)
|
79
81
|
expect(Usmu::S3::Uploader).to receive(:new).with(configuration, s3_configuration).and_return(uploader)
|
80
82
|
expect(Usmu::S3::S3Configuration).to receive(:new).with({'bucket' => 'test'}).and_return(s3_configuration)
|
81
|
-
plugin.command_deploy
|
83
|
+
plugin.command_deploy [], options
|
82
84
|
expect(uploader.diffs).to eq(diffs)
|
83
85
|
end
|
84
86
|
|
@@ -88,7 +90,7 @@ RSpec.describe Usmu::S3 do
|
|
88
90
|
expect(Usmu::Deployment::DirectoryDiff).to receive(:new).with(empty_configuration, remote_files).and_return(differ)
|
89
91
|
expect(Usmu::S3::Uploader).to receive(:new).with(empty_configuration, s3_configuration).and_return(uploader)
|
90
92
|
expect(Usmu::S3::S3Configuration).to receive(:new).with({}).and_return(s3_configuration)
|
91
|
-
plugin.command_deploy
|
93
|
+
plugin.command_deploy [], options
|
92
94
|
end
|
93
95
|
|
94
96
|
it 'logs progress' do
|
@@ -97,7 +99,7 @@ RSpec.describe Usmu::S3 do
|
|
97
99
|
expect(Usmu::Deployment::DirectoryDiff).to receive(:new).with(configuration, remote_files).and_return(differ)
|
98
100
|
expect(Usmu::S3::Uploader).to receive(:new).with(configuration, s3_configuration).and_return(uploader)
|
99
101
|
expect(Usmu::S3::S3Configuration).to receive(:new).with({'bucket' => 'test'}).and_return(s3_configuration)
|
100
|
-
plugin.command_deploy
|
102
|
+
plugin.command_deploy [], options
|
101
103
|
|
102
104
|
# Discard the line from initialization
|
103
105
|
@log_output.readline
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: usmu-s3
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Matthew Scharley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: usmu
|