webpacker_uploader 0.5.0 → 0.6.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/.gitignore +1 -0
- data/CHANGELOG.md +10 -0
- data/Gemfile.lock +13 -11
- data/README.md +14 -0
- data/Rakefile +8 -0
- data/lib/webpacker_uploader.rb +1 -0
- data/lib/webpacker_uploader/providers/aws.rb +41 -15
- data/lib/webpacker_uploader/version.rb +1 -1
- data/test/providers/aws_test.rb +16 -0
- data/webpacker_uploader.gemspec +1 -1
- metadata +5 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b1f1e410b9ed124323d818d4b436581aecd735717f47176bf9754091209e608d
|
4
|
+
data.tar.gz: e8732c0cab079cf51864b1addd8a3e8d94c1487fa371872213f5343f2473de03
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0c52c1f98939ca6338579e23fbe186fadfa1b22204bf62ceaffdb3ec4e2387c2f0763330a0db7cfcbc898e7a77035719749458b5828a0d5b7ba3b3b78ecde8e0
|
7
|
+
data.tar.gz: 2dde591f7f50548ad64a14f401b325aa3a4e83566c78463602406a458d6d6bc331843ab188fd7142c8be616722671574bf43ec36d0d0dcc9155f9253bdc61c84
|
data/.gitignore
CHANGED
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,16 @@ All notable changes to this project will be documented in this file. The format
|
|
4
4
|
|
5
5
|
## [Unreleased]
|
6
6
|
|
7
|
+
## [[0.6.0]](https://github.com/tlatsas/webpacker_uploader/releases/tag/v0.6.0) - 2021-07-20
|
8
|
+
|
9
|
+
### Added
|
10
|
+
|
11
|
+
- Allow passing arbitrary options to the AWS S3 Client through the AWS provider. ([#11](https://github.com/tlatsas/webpacker_uploader/pull/11), [@tlatsas](https://github.com/tlatsas))
|
12
|
+
|
13
|
+
### Fixed
|
14
|
+
|
15
|
+
- Fix undefined method delegate for WebpackerUploader:Module when using the console script. ([#13](https://github.com/tlatsas/webpacker_uploader/pull/13), [@tlatsas](https://github.com/tlatsas))
|
16
|
+
|
7
17
|
## [[0.5.0]](https://github.com/tlatsas/webpacker_uploader/releases/tag/v0.5.0) - 2021-07-12
|
8
18
|
|
9
19
|
### Fixed
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
webpacker_uploader (0.
|
4
|
+
webpacker_uploader (0.6.0)
|
5
5
|
mime-types
|
6
6
|
rack (~> 2.0)
|
7
7
|
webpacker (>= 5.1)
|
@@ -29,21 +29,21 @@ GEM
|
|
29
29
|
tzinfo (~> 2.0)
|
30
30
|
zeitwerk (~> 2.3)
|
31
31
|
ast (2.4.2)
|
32
|
-
aws-eventstream (1.1.
|
33
|
-
aws-partitions (1.
|
34
|
-
aws-sdk-core (3.
|
32
|
+
aws-eventstream (1.1.1)
|
33
|
+
aws-partitions (1.477.0)
|
34
|
+
aws-sdk-core (3.117.0)
|
35
35
|
aws-eventstream (~> 1, >= 1.0.2)
|
36
36
|
aws-partitions (~> 1, >= 1.239.0)
|
37
37
|
aws-sigv4 (~> 1.1)
|
38
38
|
jmespath (~> 1.0)
|
39
|
-
aws-sdk-kms (1.
|
40
|
-
aws-sdk-core (~> 3, >= 3.
|
39
|
+
aws-sdk-kms (1.44.0)
|
40
|
+
aws-sdk-core (~> 3, >= 3.112.0)
|
41
41
|
aws-sigv4 (~> 1.1)
|
42
|
-
aws-sdk-s3 (1.
|
43
|
-
aws-sdk-core (~> 3, >= 3.
|
42
|
+
aws-sdk-s3 (1.96.1)
|
43
|
+
aws-sdk-core (~> 3, >= 3.112.0)
|
44
44
|
aws-sdk-kms (~> 1)
|
45
45
|
aws-sigv4 (~> 1.1)
|
46
|
-
aws-sigv4 (1.2.
|
46
|
+
aws-sigv4 (1.2.4)
|
47
47
|
aws-eventstream (~> 1, >= 1.0.2)
|
48
48
|
builder (3.2.4)
|
49
49
|
concurrent-ruby (1.1.9)
|
@@ -58,9 +58,11 @@ GEM
|
|
58
58
|
method_source (1.0.0)
|
59
59
|
mime-types (3.3.1)
|
60
60
|
mime-types-data (~> 3.2015)
|
61
|
-
mime-types-data (3.2021.
|
61
|
+
mime-types-data (3.2021.0704)
|
62
|
+
mini_portile2 (2.5.3)
|
62
63
|
minitest (5.14.2)
|
63
|
-
nokogiri (1.11.7
|
64
|
+
nokogiri (1.11.7)
|
65
|
+
mini_portile2 (~> 2.5.0)
|
64
66
|
racc (~> 1.4)
|
65
67
|
parallel (1.20.1)
|
66
68
|
parser (3.0.0.0)
|
data/README.md
CHANGED
@@ -3,6 +3,7 @@
|
|
3
3
|
[](https://github.com/tlatsas/webpacker_uploader/actions)
|
4
4
|
[](https://github.com/tlatsas/webpacker_uploader/actions)
|
5
5
|
[](https://rubygems.org/gems/webpacker_uploader)
|
6
|
+
[](https://www.rubydoc.info/gems/webpacker_uploader)
|
6
7
|
|
7
8
|
Webpacker uploader provides an easy way to upload your assets to AWS S3.
|
8
9
|
It knows which files to upload by reading the `manifest.json` file.
|
@@ -147,6 +148,19 @@ interactive prompt that will allow you to experiment.
|
|
147
148
|
|
148
149
|
To install this gem onto your local machine, run `bundle exec rake install`.
|
149
150
|
|
151
|
+
## Integration tests
|
152
|
+
|
153
|
+
This gem also provides an integration test suite. It runs using [localstack](https://github.com/localstack/localstack/).
|
154
|
+
To run the integration tests, install docker on your system and spin up a localstack container running the s3 service.
|
155
|
+
|
156
|
+
```shell
|
157
|
+
docker compose -f "integration/docker-compose.yml" up --detach
|
158
|
+
```
|
159
|
+
|
160
|
+
To run the tests, use `rake test:integration`.
|
161
|
+
|
162
|
+
To stop the container once done run: `docker-compose -f "integration/docker-compose.yml" down`
|
163
|
+
|
150
164
|
## Contributing
|
151
165
|
|
152
166
|
Bug reports and pull requests are welcome on GitHub at https://github.com/tlatsas/webpacker_uploader.
|
data/Rakefile
CHANGED
@@ -12,4 +12,12 @@ Rake::TestTask.new(:test) do |t|
|
|
12
12
|
t.test_files = FileList["test/**/*_test.rb"]
|
13
13
|
end
|
14
14
|
|
15
|
+
namespace :test do
|
16
|
+
desc "Run integration tests using localstack"
|
17
|
+
Rake::TestTask.new(:integration) do |t|
|
18
|
+
t.libs << "integration"
|
19
|
+
t.test_files = FileList["integration/**/*_test.rb"]
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
15
23
|
task default: :test
|
data/lib/webpacker_uploader.rb
CHANGED
@@ -7,7 +7,8 @@ module WebpackerUploader
|
|
7
7
|
module Providers
|
8
8
|
# AWS provider uploads files to AWS S3. It uses the +aws-sdk-s3+ gem.
|
9
9
|
class Aws
|
10
|
-
|
10
|
+
# AWS provider error class. Raised when the provided AWS client credentials options are wrong.
|
11
|
+
class CredentialsError < StandardError; end
|
11
12
|
|
12
13
|
# @param [Hash] options
|
13
14
|
# * :region (String) The S3 region name.
|
@@ -18,7 +19,12 @@ module WebpackerUploader
|
|
18
19
|
# * :access_key_id (String) the AWS credentials access id.
|
19
20
|
# * :secret_access_key (String) the AWS credentials secret access key.
|
20
21
|
#
|
21
|
-
# @
|
22
|
+
# @note Any unknown options will be passed directly to the +Aws::S3::Client+ class
|
23
|
+
# during initialization.
|
24
|
+
#
|
25
|
+
# @raise [CredentialsError] if the credential options Hash is not correct.
|
26
|
+
#
|
27
|
+
# @example Initialize using a named profile:
|
22
28
|
#
|
23
29
|
# provider_options = {
|
24
30
|
# credentials: { profile_name: "staging" },
|
@@ -45,9 +51,11 @@ module WebpackerUploader
|
|
45
51
|
# }
|
46
52
|
# provider = WebpackerUploader::Providers::Aws.new(provider_options)
|
47
53
|
def initialize(options)
|
48
|
-
@
|
49
|
-
@
|
50
|
-
@
|
54
|
+
@region = options.delete(:region)
|
55
|
+
@bucket_name = options.delete(:bucket)
|
56
|
+
@credentials = credentials(options.delete(:credentials))
|
57
|
+
@aws_options = options
|
58
|
+
@resource = ::Aws::S3::Resource.new(client: client)
|
51
59
|
end
|
52
60
|
|
53
61
|
# Uploads a file to AWS S3.
|
@@ -57,25 +65,43 @@ module WebpackerUploader
|
|
57
65
|
# @param content_type [String] The content type that will be set to the S3 object.
|
58
66
|
# @return [void]
|
59
67
|
def upload!(object_key, file, content_type = "")
|
60
|
-
object = @bucket.object(object_key)
|
68
|
+
object = @resource.bucket(@bucket_name).object(object_key)
|
61
69
|
object.upload_file(file, content_type: content_type)
|
62
70
|
end
|
63
71
|
|
64
72
|
private
|
65
|
-
def client_options(options)
|
66
|
-
opts = { region: options[:region] }
|
67
|
-
opts[:profile] = options[:profile_name] if options.key? :profile_name
|
68
|
-
opts[:credentials] = credentials(options) if credentials(options)
|
69
|
-
opts
|
70
|
-
end
|
71
|
-
|
72
73
|
def credentials(options)
|
73
|
-
if options.key?(:
|
74
|
+
if options.key?(:profile_name)
|
75
|
+
{ profile: options[:profile_name] }
|
76
|
+
elsif options.key?(:instance_profile) && options[:instance_profile]
|
74
77
|
::Aws::InstanceProfileCredentials.new
|
75
|
-
elsif options.key?(:access_key_id)
|
78
|
+
elsif options.key?(:access_key_id) && options.key?(:secret_access_key)
|
76
79
|
::Aws::Credentials.new(options[:access_key_id], options[:secret_access_key])
|
80
|
+
else
|
81
|
+
raise CredentialsError, "Wrong AWS provider credentials options."
|
77
82
|
end
|
78
83
|
end
|
84
|
+
|
85
|
+
def profile?
|
86
|
+
@credentials.is_a?(Hash) && @credentials.key?(:profile)
|
87
|
+
end
|
88
|
+
|
89
|
+
def credentials_object?
|
90
|
+
!profile?
|
91
|
+
end
|
92
|
+
|
93
|
+
def client
|
94
|
+
::Aws::S3::Client.new(client_options)
|
95
|
+
end
|
96
|
+
|
97
|
+
def client_options
|
98
|
+
opts = {}
|
99
|
+
opts.merge!(@aws_options)
|
100
|
+
opts[:region] = @region
|
101
|
+
opts.merge!(@credentials) if profile?
|
102
|
+
opts[:credentials] = @credentials if credentials_object?
|
103
|
+
opts
|
104
|
+
end
|
79
105
|
end
|
80
106
|
end
|
81
107
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "test_helper"
|
4
|
+
require "webpacker_uploader/providers/aws"
|
5
|
+
|
6
|
+
class AwsTest < Minitest::Test
|
7
|
+
def test_credentials_initialization
|
8
|
+
assert_raises(WebpackerUploader::Providers::Aws::CredentialsError) do
|
9
|
+
WebpackerUploader::Providers::Aws.new(credentials: {})
|
10
|
+
end
|
11
|
+
|
12
|
+
assert_raises(WebpackerUploader::Providers::Aws::CredentialsError) do
|
13
|
+
WebpackerUploader::Providers::Aws.new(credentials: { access_key_id: "test" })
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
data/webpacker_uploader.gemspec
CHANGED
@@ -20,7 +20,7 @@ Gem::Specification.new do |s|
|
|
20
20
|
"source_code_uri" => "https://github.com/tlatsas/webpacker_uploader/tree/v#{s.version}"
|
21
21
|
}
|
22
22
|
|
23
|
-
s.files = `git ls-files`.split("\n").reject { |f| f.match(%r{^(bin|test|.github)/}) }
|
23
|
+
s.files = `git ls-files`.split("\n").reject { |f| f.match(%r{^(bin|test|integration|.github)/}) }
|
24
24
|
s.test_files = `git ls-files -- test/*`.split("\n")
|
25
25
|
s.require_paths = ["lib"]
|
26
26
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webpacker_uploader
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tasos Latsas
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: webpacker
|
@@ -135,6 +135,7 @@ files:
|
|
135
135
|
- test/configuration_test.rb
|
136
136
|
- test/manifest_test.rb
|
137
137
|
- test/mime_test.rb
|
138
|
+
- test/providers/aws_test.rb
|
138
139
|
- test/test_app/config/webpacker.yml
|
139
140
|
- test/test_app/public/packs/manifest.json
|
140
141
|
- test/test_helper.rb
|
@@ -147,7 +148,7 @@ metadata:
|
|
147
148
|
homepage_uri: https://github.com/tlatsas/webpacker_uploader
|
148
149
|
bug_tracker_uri: https://github.com/tlatsas/webpacker_uploader/issues
|
149
150
|
changelog_uri: https://github.com/tlatsas/webpacker_uploader/blob/main/CHANGELOG.md
|
150
|
-
source_code_uri: https://github.com/tlatsas/webpacker_uploader/tree/v0.
|
151
|
+
source_code_uri: https://github.com/tlatsas/webpacker_uploader/tree/v0.6.0
|
151
152
|
post_install_message:
|
152
153
|
rdoc_options: []
|
153
154
|
require_paths:
|
@@ -171,6 +172,7 @@ test_files:
|
|
171
172
|
- test/configuration_test.rb
|
172
173
|
- test/manifest_test.rb
|
173
174
|
- test/mime_test.rb
|
175
|
+
- test/providers/aws_test.rb
|
174
176
|
- test/test_app/config/webpacker.yml
|
175
177
|
- test/test_app/public/packs/manifest.json
|
176
178
|
- test/test_helper.rb
|