carrierwave-aws 1.3.0 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: b08e5e5ca8483cb1079391083b6da62061a0552d
4
- data.tar.gz: 1044c413b9168267762ba1a3b862bb3eaa32e6c9
2
+ SHA256:
3
+ metadata.gz: b420ef988503bad151d75b1794b45ef1d3c2906077df034ddbdf067369f003aa
4
+ data.tar.gz: 167626ab412b4b49d26927c7044445974120a273c7fda2398faea3f3d549ff0c
5
5
  SHA512:
6
- metadata.gz: 3d62d9d5fd5ecdb09df295da2eac7b6d6398ccf76384c1b0eb94405fb003136e351c16d83233f92d51a88d61944aee83e9672f01e197137bf512dbbdc3f17547
7
- data.tar.gz: e0ebf6479be16ee6d41082cbcd0034b33c54c1fbc95403fb7494a72f0fcdf4166116ce83632ef9f1e5c3a04936839aa77582773c1eecc00af458284b86a92abd
6
+ metadata.gz: 0f1c69cf12347fa87723f671de01166a1b6373e3863b36acca438f6cc253d1e50cd76f6835c55d860078003d08d9d9692b596d40736f7eade764a458de5cb826
7
+ data.tar.gz: c153eaa6992b88e00c34d3eeca7e8666b6f5f9a665a137b365214f3dc2be9520ef8701cbd3a4b6451d854d160466b4a4e16b3469171a0eac2540553f28d3fc5f
@@ -29,6 +29,7 @@ module CarrierWave
29
29
  add_config :aws_write_options
30
30
  add_config :aws_acl
31
31
  add_config :aws_signer
32
+ add_config :asset_host_public
32
33
 
33
34
  configure do |config|
34
35
  config.storage_engines[:aws] = 'CarrierWave::Storage::AWS'
@@ -83,6 +84,14 @@ module CarrierWave
83
84
  self.class.aws_signer
84
85
  end
85
86
  end
87
+
88
+ def asset_host_public
89
+ if instance_variable_defined?('@asset_host_public')
90
+ @asset_host_public
91
+ else
92
+ self.class.asset_host_public
93
+ end || false
94
+ end
86
95
  end
87
96
  end
88
97
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Carrierwave
4
4
  module AWS
5
- VERSION = '1.3.0'
5
+ VERSION = '1.5.0'
6
6
  end
7
7
  end
@@ -62,15 +62,15 @@ module CarrierWave
62
62
 
63
63
  def copy_to(new_path)
64
64
  bucket.object(new_path).copy_from(
65
- copy_source: "#{bucket.name}/#{file.key}",
66
- acl: uploader.aws_acl
65
+ "#{bucket.name}/#{file.key}",
66
+ aws_options.copy_options(self)
67
67
  )
68
68
  end
69
69
 
70
70
  def move_to(new_path)
71
71
  file.move_to(
72
72
  "#{bucket.name}/#{new_path}",
73
- acl: uploader.aws_acl
73
+ aws_options.move_options(self)
74
74
  )
75
75
  end
76
76
 
@@ -84,7 +84,7 @@ module CarrierWave
84
84
 
85
85
  def public_url
86
86
  if uploader.asset_host
87
- "#{uploader.asset_host}/#{path}"
87
+ "#{uploader.asset_host}/#{uri_path}"
88
88
  else
89
89
  file.public_url.to_s
90
90
  end
@@ -93,10 +93,10 @@ module CarrierWave
93
93
  def url(options = {})
94
94
  if signer
95
95
  signed_url(options)
96
- elsif uploader.aws_acl.to_s != 'public-read'
97
- authenticated_url(options)
98
- else
96
+ elsif public?
99
97
  public_url
98
+ else
99
+ authenticated_url(options)
100
100
  end
101
101
  end
102
102
 
@@ -109,6 +109,14 @@ module CarrierWave
109
109
  def signer
110
110
  uploader.aws_signer
111
111
  end
112
+
113
+ def uri_path
114
+ path.gsub(%r{[^/]+}) { |segment| Seahorse::Util.uri_escape(segment) }
115
+ end
116
+
117
+ def public?
118
+ uploader.aws_acl.to_s == 'public-read' || uploader.asset_host_public
119
+ end
112
120
  end
113
121
  end
114
122
  end
@@ -3,6 +3,8 @@
3
3
  module CarrierWave
4
4
  module Storage
5
5
  class AWSOptions
6
+ MULTIPART_TRESHOLD = 15 * 1024 * 1024
7
+
6
8
  attr_reader :uploader
7
9
 
8
10
  def initialize(uploader)
@@ -21,6 +23,14 @@ module CarrierWave
21
23
  }.merge(aws_attributes).merge(aws_write_options)
22
24
  end
23
25
 
26
+ def move_options(file)
27
+ {
28
+ acl: uploader.aws_acl,
29
+ multipart_copy: file.size >= MULTIPART_TRESHOLD
30
+ }.merge(aws_attributes).merge(aws_write_options)
31
+ end
32
+ alias copy_options move_options
33
+
24
34
  def expiration_options(options = {})
25
35
  uploader_expiration = uploader.aws_authenticated_url_expiration
26
36
 
@@ -30,7 +40,9 @@ module CarrierWave
30
40
  private
31
41
 
32
42
  def aws_attributes
33
- uploader.aws_attributes || {}
43
+ attributes = uploader.aws_attributes
44
+ return {} if attributes.nil?
45
+ attributes.respond_to?(:call) ? attributes.call : attributes
34
46
  end
35
47
 
36
48
  def aws_read_options
@@ -6,7 +6,7 @@ module CarrierWave
6
6
  def self.filename(url)
7
7
  path = url.split('?').first
8
8
 
9
- URI.decode(path).gsub(%r{.*/(.*?$)}, '\1')
9
+ CGI.unescape(path).gsub(%r{.*/(.*?$)}, '\1')
10
10
  end
11
11
  end
12
12
  end
@@ -138,4 +138,43 @@ describe CarrierWave::Uploader::Base do
138
138
  expect(uploader.aws_signer).to eql(signer_proc)
139
139
  end
140
140
  end
141
+
142
+ describe '#asset_host_public' do
143
+ it 'can be overridden on an instance level' do
144
+ instance = uploader.new
145
+
146
+ uploader.asset_host_public = true
147
+ instance.asset_host_public = false
148
+
149
+ expect(uploader.asset_host_public).to eq(true)
150
+ expect(instance.asset_host_public).to eq(false)
151
+ end
152
+
153
+ it 'can be looked up from superclass' do
154
+ uploader.asset_host_public = true
155
+ instance = derived_uploader.new
156
+
157
+ expect(derived_uploader.asset_host_public).to eq(true)
158
+ expect(instance.asset_host_public).to eq(true)
159
+ end
160
+
161
+ it 'can be overridden on a class level' do
162
+ uploader.asset_host_public = true
163
+ derived_uploader.asset_host_public = false
164
+
165
+ base = uploader.new
166
+ expect(base.asset_host_public).to eq(true)
167
+
168
+ instance = derived_uploader.new
169
+ expect(instance.asset_host_public).to eq(false)
170
+ end
171
+
172
+ it 'can be set with the configure block' do
173
+ uploader.configure do |config|
174
+ config.asset_host_public = true
175
+ end
176
+
177
+ expect(uploader.asset_host_public).to eq(true)
178
+ end
179
+ end
141
180
  end
@@ -72,9 +72,19 @@ describe CarrierWave::Storage::AWSFile do
72
72
  aws_file.url
73
73
  end
74
74
 
75
+ it 'requests a public url if asset_host_public' do
76
+ allow(uploader).to receive(:aws_acl) { :'authenticated-read' }
77
+ allow(uploader).to receive(:asset_host_public) { true }
78
+
79
+ expect(file).to receive(:public_url)
80
+
81
+ aws_file.url
82
+ end
83
+
75
84
  it 'requests an authenticated url if acl is not public readable' do
76
85
  allow(uploader).to receive(:aws_acl) { :private }
77
86
  allow(uploader).to receive(:aws_authenticated_url_expiration) { 60 }
87
+ allow(uploader).to receive(:asset_host_public) { false }
78
88
 
79
89
  expect(file).to receive(:presigned_url).with(:get, expires_in: 60)
80
90
 
@@ -126,4 +136,12 @@ describe CarrierWave::Storage::AWSFile do
126
136
  end
127
137
  end
128
138
  end
139
+
140
+ describe '#public_url' do
141
+ it 'uri-encodes the path' do
142
+ allow(uploader).to receive(:asset_host) { 'http://example.com' }
143
+ aws_file.path = 'uploads/images/jekyll+and+hyde.txt'
144
+ expect(aws_file.public_url).to eq 'http://example.com/uploads/images/jekyll%2Band%2Bhyde.txt'
145
+ end
146
+ end
129
147
  end
@@ -52,6 +52,14 @@ describe CarrierWave::Storage::AWSOptions do
52
52
  expect { options.write_options(file) }.to_not raise_error
53
53
  end
54
54
 
55
+ it 'works if aws_attributes is a Proc' do
56
+ expect(uploader).to receive(:aws_attributes).and_return(
57
+ -> { { expires: 1.week.from_now.httpdate } }
58
+ )
59
+
60
+ expect { options.write_options(file) }.to_not raise_error
61
+ end
62
+
55
63
  it 'works if aws_write_options is nil' do
56
64
  expect(uploader).to receive(:aws_write_options) { nil }
57
65
 
metadata CHANGED
@@ -1,33 +1,27 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave-aws
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Parker Selbert
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-09-27 00:00:00.000000000 Z
11
+ date: 2020-04-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: carrierwave
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
18
- - !ruby/object:Gem::Version
19
- version: '0.7'
20
- - - "<"
17
+ - - "~>"
21
18
  - !ruby/object:Gem::Version
22
19
  version: '2.0'
23
20
  type: :runtime
24
21
  prerelease: false
25
22
  version_requirements: !ruby/object:Gem::Requirement
26
23
  requirements:
27
- - - ">="
28
- - !ruby/object:Gem::Version
29
- version: '0.7'
30
- - - "<"
24
+ - - "~>"
31
25
  - !ruby/object:Gem::Version
32
26
  version: '2.0'
33
27
  - !ruby/object:Gem::Dependency
@@ -114,8 +108,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
108
  - !ruby/object:Gem::Version
115
109
  version: '0'
116
110
  requirements: []
117
- rubyforge_project:
118
- rubygems_version: 2.5.2.1
111
+ rubygems_version: 3.0.3
119
112
  signing_key:
120
113
  specification_version: 4
121
114
  summary: Native aws-sdk support for S3 in CarrierWave