s3_assets_uploader 0.1.0 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 11e410f5838a7cabe8b6667af204ec5cc8046d8a
4
- data.tar.gz: 72dc8d9467ad12d6d9bc8fdc7f9e629ad22e2bd8
2
+ SHA256:
3
+ metadata.gz: 4ef7284ec8a4e6f67ef449bd755accb7f66409512f856eb6c99056320167f528
4
+ data.tar.gz: 36ba9f6e43677cea5b177fc1584ce0bdaf171c6a3347508bfcd6b0f350aef2d3
5
5
  SHA512:
6
- metadata.gz: 41ce122ce3f3ca8e8741918c284d9348d97994b87927b6b3800dbef255aeaf7a1c605da07e574558c2c8c4047477b976a966b5946d2c6eee97c04fa60baa28bb
7
- data.tar.gz: 77ea586239f6b7c3168a50982200af7ef013133dbc38020eb8f945339d7b46c16a0d298bff70a6082fda073dba5117f032006c4442b78bd22ed3a6a6cd573b18
6
+ metadata.gz: 7288f6c0a161604163656568303961e425d38a66e8a686019db4cbadf24c1f96197084db96a8c68b6901ab420a0eb8ad8fb141a754f7ce563497c3a190ab58fc
7
+ data.tar.gz: 0f5a3f7226a34edb70e95f0fca1e283496d82aedf76801136f3d6da0d786c6b656414ad07033201b8399b0f37f812c7e887d80b39df7b66bd965567c5c9a4454
data/.travis.yml CHANGED
@@ -1,8 +1,8 @@
1
1
  language: ruby
2
2
  rvm:
3
- - 2.0.0
4
- - 2.1
5
3
  - 2.2
4
+ - 2.3
5
+ - 2.4
6
6
  - ruby-head
7
7
  matrix:
8
8
  allow_failures:
data/CHANGELOG.md CHANGED
@@ -1,2 +1,19 @@
1
+ # 0.5.0
2
+ - Add `config.content_type` option
3
+
4
+ # 0.4.0
5
+ - Use aws-sdk v3
6
+
7
+ # 0.3.0
8
+ - Add `config.cache_control` option
9
+ - The default value is `max-age=2592000, public` .
10
+
11
+ # 0.2.0
12
+ - Now Content-Type is automatically specified from asset's filename.
13
+ - https://github.com/eagletmt/s3_assets_uploader/pull/2
14
+
15
+ # 0.1.1
16
+ - Add `config.additional_paths`
17
+
1
18
  # 0.1.0
2
19
  - Initial release
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # S3AssetsUploader
2
+ [![Gem Version](https://badge.fury.io/rb/s3_assets_uploader.svg)](http://badge.fury.io/rb/s3_assets_uploader)
3
+ [![Build Status](https://travis-ci.org/eagletmt/s3_assets_uploader.svg?branch=master)](https://travis-ci.org/eagletmt/s3_assets_uploader)
2
4
 
3
5
  Upload Rails assets to S3.
4
6
 
@@ -32,6 +34,31 @@ namespace :assets do
32
34
  end
33
35
  ```
34
36
 
37
+ ### Configurations
38
+ - `config.s3_client`
39
+ - Aws::S3::Client instance to upload files
40
+ - Default: `Aws::S3::Client.new`
41
+ - `config.bucket`
42
+ - S3 bucket name
43
+ - **Required**
44
+ - `config.assets_path`
45
+ - Local path to assets directory
46
+ - Default: `"public/assets"`
47
+ - `config.assets_prefix`
48
+ - Remote assets path prefix
49
+ - If set, public/assets/foo.png will be uploaded to `"#{assets_prefix}/assets/foo.png"`
50
+ - Default: `nil`
51
+ - `config.additional_paths`
52
+ - Additional directories to upload
53
+ - Default: `[]`
54
+ - `config.cache_control`
55
+ - cache_control option for S3
56
+ - Default: `"max-age=2592000, public"`
57
+ - `config.content_type`
58
+ - Set custom handler to determine content-type of the object
59
+ - When the handler returns nil, the content-type is guessed from its extension
60
+ - Default: `nil`
61
+
35
62
  ## Development
36
63
 
37
64
  After checking out the repo, run `bin/setup` to install dependencies. Then, run `bin/console` for an interactive prompt that will allow you to experiment.
@@ -1,14 +1,18 @@
1
- require 'aws-sdk'
1
+ require 'aws-sdk-s3'
2
2
 
3
3
  module S3AssetsUploader
4
- class Config < Struct.new(:s3_client, :bucket, :assets_path, :assets_prefix)
4
+ class Config < Struct.new(:s3_client, :bucket, :assets_path, :assets_prefix, :additional_paths, :cache_control, :content_type)
5
5
  class ValidationError < StandardError
6
6
  end
7
7
 
8
8
  DEFAULT_ASSETS_PATH = 'public/assets'.freeze
9
+ DEFAULT_CACHE_CONTROL = 'max-age=2592000, public'
9
10
 
10
11
  def initialize
11
12
  self.assets_path = DEFAULT_ASSETS_PATH
13
+ self.cache_control = DEFAULT_CACHE_CONTROL
14
+ self.additional_paths = []
15
+ self.content_type = nil
12
16
  end
13
17
 
14
18
  def assets_path
@@ -23,14 +27,34 @@ module S3AssetsUploader
23
27
  if bucket.nil?
24
28
  raise ValidationError.new('config.bucket must be set')
25
29
  end
30
+ additional_paths.each do |path|
31
+ assert_under_public_path!(path)
32
+ end
26
33
  self.s3_client ||= create_default_client
27
34
  true
28
35
  end
29
36
 
37
+ def content_type(&block)
38
+ self[:content_type] = block
39
+ end
40
+
41
+ def guess_content_type(path)
42
+ return unless self[:content_type]
43
+
44
+ self[:content_type].call(path)
45
+ end
46
+
30
47
  private
31
48
 
32
49
  def create_default_client
33
50
  Aws::S3::Client.new
34
51
  end
52
+
53
+ def assert_under_public_path!(path)
54
+ if Pathname.new(path).relative_path_from(public_path).to_s.start_with?('../')
55
+ raise ValidationError.new("#{path} must be under #{public_path}")
56
+ end
57
+ true
58
+ end
35
59
  end
36
60
  end
@@ -1,4 +1,5 @@
1
1
  require 's3_assets_uploader/config'
2
+ require 'mime/types'
2
3
 
3
4
  module S3AssetsUploader
4
5
  class Uploader
@@ -10,6 +11,9 @@ module S3AssetsUploader
10
11
 
11
12
  def upload
12
13
  upload_path(@config.assets_path)
14
+ @config.additional_paths.each do |path|
15
+ upload_path(Pathname.new(path))
16
+ end
13
17
  end
14
18
 
15
19
  private
@@ -25,6 +29,8 @@ module S3AssetsUploader
25
29
  body: f,
26
30
  bucket: @config.bucket,
27
31
  key: compute_asset_key(path),
32
+ content_type: guess_content_type(path),
33
+ cache_control: @config.cache_control,
28
34
  )
29
35
  end
30
36
  end
@@ -38,6 +44,18 @@ module S3AssetsUploader
38
44
  end
39
45
  end
40
46
 
47
+ def guess_content_type(path)
48
+ content_type = @config.guess_content_type(path)
49
+ return content_type if content_type
50
+
51
+ mime_type = MIME::Types.type_for(path.basename.to_s).first
52
+ if mime_type
53
+ mime_type.content_type
54
+ else
55
+ 'application/octet-stream'
56
+ end
57
+ end
58
+
41
59
  def relative_path(path)
42
60
  path.relative_path_from(@config.public_path)
43
61
  end
@@ -1,3 +1,3 @@
1
1
  module S3AssetsUploader
2
- VERSION = "0.1.0"
2
+ VERSION = "0.5.0"
3
3
  end
@@ -19,7 +19,8 @@ Gem::Specification.new do |spec|
19
19
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
20
20
  spec.require_paths = ["lib"]
21
21
 
22
- spec.add_dependency "aws-sdk", ">= 2.0"
22
+ spec.add_dependency "aws-sdk-s3", ">= 1.0"
23
+ spec.add_dependency "mime-types"
23
24
  spec.add_development_dependency "bundler"
24
25
  spec.add_development_dependency "rake"
25
26
  spec.add_development_dependency "rspec", ">= 3.0"
metadata CHANGED
@@ -1,29 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: s3_assets_uploader
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kohei Suzuki
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-04-30 00:00:00.000000000 Z
11
+ date: 2021-04-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: aws-sdk
14
+ name: aws-sdk-s3
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '2.0'
19
+ version: '1.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '2.0'
26
+ version: '1.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mime-types
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'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: bundler
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -93,7 +107,7 @@ homepage: https://github.com/eagletmt/s3_assets_uploader
93
107
  licenses:
94
108
  - MIT
95
109
  metadata: {}
96
- post_install_message:
110
+ post_install_message:
97
111
  rdoc_options: []
98
112
  require_paths:
99
113
  - lib
@@ -108,9 +122,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
108
122
  - !ruby/object:Gem::Version
109
123
  version: '0'
110
124
  requirements: []
111
- rubyforge_project:
112
- rubygems_version: 2.4.5
113
- signing_key:
125
+ rubygems_version: 3.2.13
126
+ signing_key:
114
127
  specification_version: 4
115
128
  summary: Upload Rails assets to S3.
116
129
  test_files: []