paperclip 4.2.2 → 6.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.codeclimate.yml +17 -0
- data/.github/issue_template.md +3 -0
- data/.hound.yml +1055 -0
- data/.rubocop.yml +1 -0
- data/.travis.yml +17 -15
- data/Appraisals +4 -16
- data/CONTRIBUTING.md +19 -8
- data/Gemfile +5 -9
- data/LICENSE +1 -1
- data/MIGRATING-ES.md +317 -0
- data/MIGRATING.md +375 -0
- data/NEWS +184 -31
- data/README.md +371 -201
- data/RELEASING.md +17 -0
- data/Rakefile +2 -2
- data/UPGRADING +12 -9
- data/features/basic_integration.feature +10 -6
- data/features/migration.feature +0 -24
- data/features/step_definitions/attachment_steps.rb +41 -35
- data/features/step_definitions/html_steps.rb +2 -2
- data/features/step_definitions/rails_steps.rb +39 -38
- data/features/step_definitions/s3_steps.rb +2 -2
- data/features/step_definitions/web_steps.rb +1 -103
- data/features/support/env.rb +1 -0
- data/features/support/file_helpers.rb +2 -2
- data/features/support/paths.rb +1 -1
- data/features/support/rails.rb +0 -24
- data/gemfiles/4.2.gemfile +6 -8
- data/gemfiles/5.0.gemfile +17 -0
- data/lib/generators/paperclip/paperclip_generator.rb +9 -1
- data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
- data/lib/paperclip/attachment.rb +51 -26
- data/lib/paperclip/attachment_registry.rb +3 -2
- data/lib/paperclip/callbacks.rb +8 -6
- data/lib/paperclip/content_type_detector.rb +27 -11
- data/lib/paperclip/errors.rb +3 -1
- data/lib/paperclip/file_command_content_type_detector.rb +6 -8
- data/lib/paperclip/filename_cleaner.rb +0 -1
- data/lib/paperclip/geometry_detector_factory.rb +3 -3
- data/lib/paperclip/geometry_parser_factory.rb +1 -1
- data/lib/paperclip/glue.rb +1 -1
- data/lib/paperclip/has_attached_file.rb +9 -2
- data/lib/paperclip/helpers.rb +15 -11
- data/lib/paperclip/interpolations/plural_cache.rb +6 -5
- data/lib/paperclip/interpolations.rb +24 -14
- data/lib/paperclip/io_adapters/abstract_adapter.rb +32 -4
- data/lib/paperclip/io_adapters/attachment_adapter.rb +17 -6
- data/lib/paperclip/io_adapters/data_uri_adapter.rb +8 -8
- data/lib/paperclip/io_adapters/empty_string_adapter.rb +5 -4
- data/lib/paperclip/io_adapters/file_adapter.rb +12 -6
- data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +8 -7
- data/lib/paperclip/io_adapters/identity_adapter.rb +12 -6
- data/lib/paperclip/io_adapters/nil_adapter.rb +8 -5
- data/lib/paperclip/io_adapters/registry.rb +6 -2
- data/lib/paperclip/io_adapters/stringio_adapter.rb +9 -6
- data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +10 -6
- data/lib/paperclip/io_adapters/uri_adapter.rb +43 -19
- data/lib/paperclip/logger.rb +1 -1
- data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +4 -4
- data/lib/paperclip/media_type_spoof_detector.rb +13 -9
- data/lib/paperclip/processor.rb +15 -6
- data/lib/paperclip/rails_environment.rb +25 -0
- data/lib/paperclip/schema.rb +4 -10
- data/lib/paperclip/storage/filesystem.rb +13 -2
- data/lib/paperclip/storage/fog.rb +33 -20
- data/lib/paperclip/storage/s3.rb +89 -70
- data/lib/paperclip/style.rb +0 -1
- data/lib/paperclip/thumbnail.rb +24 -12
- data/lib/paperclip/url_generator.rb +17 -13
- data/lib/paperclip/validators/attachment_size_validator.rb +1 -7
- data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +4 -0
- data/lib/paperclip/validators.rb +1 -1
- data/lib/paperclip/version.rb +3 -1
- data/lib/paperclip.rb +27 -13
- data/lib/tasks/paperclip.rake +33 -3
- data/paperclip.gemspec +18 -15
- data/spec/paperclip/attachment_definitions_spec.rb +1 -1
- data/spec/paperclip/attachment_processing_spec.rb +2 -5
- data/spec/paperclip/attachment_registry_spec.rb +84 -13
- data/spec/paperclip/attachment_spec.rb +147 -41
- data/spec/paperclip/content_type_detector_spec.rb +9 -2
- data/spec/paperclip/file_command_content_type_detector_spec.rb +15 -2
- data/spec/paperclip/filename_cleaner_spec.rb +0 -1
- data/spec/paperclip/geometry_spec.rb +1 -1
- data/spec/paperclip/glue_spec.rb +44 -0
- data/spec/paperclip/has_attached_file_spec.rb +24 -8
- data/spec/paperclip/integration_spec.rb +42 -5
- data/spec/paperclip/interpolations_spec.rb +21 -9
- data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +106 -23
- data/spec/paperclip/io_adapters/attachment_adapter_spec.rb +6 -3
- data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +7 -1
- data/spec/paperclip/io_adapters/file_adapter_spec.rb +6 -3
- data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +51 -14
- data/spec/paperclip/io_adapters/identity_adapter_spec.rb +1 -1
- data/spec/paperclip/io_adapters/registry_spec.rb +2 -2
- data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +5 -1
- data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +5 -5
- data/spec/paperclip/io_adapters/uri_adapter_spec.rb +126 -8
- data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +10 -0
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +1 -1
- data/spec/paperclip/media_type_spoof_detector_spec.rb +75 -11
- data/spec/paperclip/paperclip_spec.rb +15 -40
- data/spec/paperclip/plural_cache_spec.rb +17 -16
- data/spec/paperclip/processor_spec.rb +4 -4
- data/spec/paperclip/rails_environment_spec.rb +33 -0
- data/spec/paperclip/schema_spec.rb +46 -46
- data/spec/paperclip/storage/fog_spec.rb +63 -3
- data/spec/paperclip/storage/s3_live_spec.rb +20 -14
- data/spec/paperclip/storage/s3_spec.rb +400 -215
- data/spec/paperclip/style_spec.rb +0 -1
- data/spec/paperclip/tempfile_factory_spec.rb +4 -0
- data/spec/paperclip/tempfile_spec.rb +35 -0
- data/spec/paperclip/thumbnail_spec.rb +59 -38
- data/spec/paperclip/url_generator_spec.rb +55 -45
- data/spec/paperclip/validators/attachment_size_validator_spec.rb +26 -20
- data/spec/paperclip/validators_spec.rb +5 -5
- data/spec/spec_helper.rb +7 -1
- data/spec/support/assertions.rb +12 -1
- data/spec/support/fake_model.rb +4 -0
- data/spec/support/fixtures/empty.xlsx +0 -0
- data/spec/support/matchers/have_column.rb +11 -2
- data/spec/support/mock_attachment.rb +2 -0
- data/spec/support/mock_url_generator_builder.rb +2 -2
- data/spec/support/model_reconstruction.rb +11 -3
- data/spec/support/reporting.rb +11 -0
- metadata +110 -63
- data/RUNNING_TESTS.md +0 -4
- data/cucumber/paperclip_steps.rb +0 -6
- data/gemfiles/3.2.gemfile +0 -19
- data/gemfiles/4.0.gemfile +0 -19
- data/gemfiles/4.1.gemfile +0 -19
- data/lib/paperclip/locales/de.yml +0 -18
- data/lib/paperclip/locales/es.yml +0 -18
- data/lib/paperclip/locales/ja.yml +0 -18
- data/lib/paperclip/locales/pt-BR.yml +0 -18
- data/lib/paperclip/locales/zh-CN.yml +0 -18
- data/lib/paperclip/locales/zh-HK.yml +0 -18
- data/lib/paperclip/locales/zh-TW.yml +0 -18
- data/spec/support/mock_model.rb +0 -2
- data/spec/support/rails_helpers.rb +0 -7
@@ -25,12 +25,12 @@ describe Paperclip::Schema do
|
|
25
25
|
end
|
26
26
|
end
|
27
27
|
|
28
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
28
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
29
29
|
|
30
|
-
expect(columns).to include(['avatar_file_name',
|
31
|
-
expect(columns).to include(['avatar_content_type',
|
32
|
-
expect(columns).to include(['avatar_file_size',
|
33
|
-
expect(columns).to include(['avatar_updated_at',
|
30
|
+
expect(columns).to include(['avatar_file_name', "varchar"])
|
31
|
+
expect(columns).to include(['avatar_content_type', "varchar"])
|
32
|
+
expect(columns).to include(['avatar_file_size', "bigint"])
|
33
|
+
expect(columns).to include(['avatar_updated_at', "datetime"])
|
34
34
|
end
|
35
35
|
|
36
36
|
it "displays deprecation warning" do
|
@@ -50,12 +50,12 @@ describe Paperclip::Schema do
|
|
50
50
|
end
|
51
51
|
|
52
52
|
it "creates attachment columns" do
|
53
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
53
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
54
54
|
|
55
|
-
expect(columns).to include(['avatar_file_name',
|
56
|
-
expect(columns).to include(['avatar_content_type',
|
57
|
-
expect(columns).to include(['avatar_file_size',
|
58
|
-
expect(columns).to include(['avatar_updated_at',
|
55
|
+
expect(columns).to include(['avatar_file_name', "varchar"])
|
56
|
+
expect(columns).to include(['avatar_content_type', "varchar"])
|
57
|
+
expect(columns).to include(['avatar_file_size', "bigint"])
|
58
|
+
expect(columns).to include(['avatar_updated_at', "datetime"])
|
59
59
|
end
|
60
60
|
end
|
61
61
|
|
@@ -89,12 +89,12 @@ describe Paperclip::Schema do
|
|
89
89
|
end
|
90
90
|
|
91
91
|
it "creates attachment columns" do
|
92
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
92
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
93
93
|
|
94
|
-
expect(columns).to include(['avatar_file_name',
|
95
|
-
expect(columns).to include(['avatar_content_type',
|
96
|
-
expect(columns).to include(['avatar_file_size',
|
97
|
-
expect(columns).to include(['avatar_updated_at',
|
94
|
+
expect(columns).to include(['avatar_file_name', "varchar"])
|
95
|
+
expect(columns).to include(['avatar_content_type', "varchar"])
|
96
|
+
expect(columns).to include(['avatar_file_size', "bigint"])
|
97
|
+
expect(columns).to include(['avatar_updated_at', "datetime"])
|
98
98
|
end
|
99
99
|
end
|
100
100
|
|
@@ -119,16 +119,16 @@ describe Paperclip::Schema do
|
|
119
119
|
end
|
120
120
|
|
121
121
|
it "creates attachment columns" do
|
122
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
122
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
123
123
|
|
124
|
-
expect(columns).to include(['avatar_file_name',
|
125
|
-
expect(columns).to include(['avatar_content_type',
|
126
|
-
expect(columns).to include(['avatar_file_size',
|
127
|
-
expect(columns).to include(['avatar_updated_at',
|
128
|
-
expect(columns).to include(['photo_file_name',
|
129
|
-
expect(columns).to include(['photo_content_type',
|
130
|
-
expect(columns).to include(['photo_file_size',
|
131
|
-
expect(columns).to include(['photo_updated_at',
|
124
|
+
expect(columns).to include(['avatar_file_name', "varchar"])
|
125
|
+
expect(columns).to include(['avatar_content_type', "varchar"])
|
126
|
+
expect(columns).to include(['avatar_file_size', "bigint"])
|
127
|
+
expect(columns).to include(['avatar_updated_at', "datetime"])
|
128
|
+
expect(columns).to include(['photo_file_name', "varchar"])
|
129
|
+
expect(columns).to include(['photo_content_type', "varchar"])
|
130
|
+
expect(columns).to include(['photo_file_size', "bigint"])
|
131
|
+
expect(columns).to include(['photo_updated_at', "datetime"])
|
132
132
|
end
|
133
133
|
end
|
134
134
|
|
@@ -164,7 +164,7 @@ describe Paperclip::Schema do
|
|
164
164
|
Dummy.connection.change_table :dummies do |t|
|
165
165
|
t.column :avatar_file_name, :string
|
166
166
|
t.column :avatar_content_type, :string
|
167
|
-
t.column :avatar_file_size, :
|
167
|
+
t.column :avatar_file_size, :bigint
|
168
168
|
t.column :avatar_updated_at, :datetime
|
169
169
|
end
|
170
170
|
end
|
@@ -178,12 +178,12 @@ describe Paperclip::Schema do
|
|
178
178
|
Dummy.connection.drop_attached_file :dummies, :avatar
|
179
179
|
end
|
180
180
|
|
181
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
181
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
182
182
|
|
183
|
-
expect(columns).to_not include(['avatar_file_name',
|
184
|
-
expect(columns).to_not include(['avatar_content_type',
|
185
|
-
expect(columns).to_not include(['avatar_file_size',
|
186
|
-
expect(columns).to_not include(['avatar_updated_at',
|
183
|
+
expect(columns).to_not include(['avatar_file_name', "varchar"])
|
184
|
+
expect(columns).to_not include(['avatar_content_type', "varchar"])
|
185
|
+
expect(columns).to_not include(['avatar_file_size', "bigint"])
|
186
|
+
expect(columns).to_not include(['avatar_updated_at', "datetime"])
|
187
187
|
end
|
188
188
|
|
189
189
|
it "displays a deprecation warning" do
|
@@ -200,12 +200,12 @@ describe Paperclip::Schema do
|
|
200
200
|
end
|
201
201
|
|
202
202
|
it "removes the attachment columns" do
|
203
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
203
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
204
204
|
|
205
|
-
expect(columns).to_not include(['avatar_file_name',
|
206
|
-
expect(columns).to_not include(['avatar_content_type',
|
207
|
-
expect(columns).to_not include(['avatar_file_size',
|
208
|
-
expect(columns).to_not include(['avatar_updated_at',
|
205
|
+
expect(columns).to_not include(['avatar_file_name', "varchar"])
|
206
|
+
expect(columns).to_not include(['avatar_content_type', "varchar"])
|
207
|
+
expect(columns).to_not include(['avatar_file_size', "bigint"])
|
208
|
+
expect(columns).to_not include(['avatar_updated_at', "datetime"])
|
209
209
|
end
|
210
210
|
end
|
211
211
|
|
@@ -214,7 +214,7 @@ describe Paperclip::Schema do
|
|
214
214
|
Dummy.connection.change_table :dummies do |t|
|
215
215
|
t.column :photo_file_name, :string
|
216
216
|
t.column :photo_content_type, :string
|
217
|
-
t.column :photo_file_size, :
|
217
|
+
t.column :photo_file_size, :bigint
|
218
218
|
t.column :photo_updated_at, :datetime
|
219
219
|
end
|
220
220
|
|
@@ -222,16 +222,16 @@ describe Paperclip::Schema do
|
|
222
222
|
end
|
223
223
|
|
224
224
|
it "removes the attachment columns" do
|
225
|
-
columns = Dummy.columns.map{ |column| [column.name, column.
|
226
|
-
|
227
|
-
expect(columns).to_not include(['avatar_file_name',
|
228
|
-
expect(columns).to_not include(['avatar_content_type',
|
229
|
-
expect(columns).to_not include(['avatar_file_size',
|
230
|
-
expect(columns).to_not include(['avatar_updated_at',
|
231
|
-
expect(columns).to_not include(['photo_file_name',
|
232
|
-
expect(columns).to_not include(['photo_content_type',
|
233
|
-
expect(columns).to_not include(['photo_file_size',
|
234
|
-
expect(columns).to_not include(['photo_updated_at',
|
225
|
+
columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
|
226
|
+
|
227
|
+
expect(columns).to_not include(['avatar_file_name', "varchar"])
|
228
|
+
expect(columns).to_not include(['avatar_content_type', "varchar"])
|
229
|
+
expect(columns).to_not include(['avatar_file_size', "bigint"])
|
230
|
+
expect(columns).to_not include(['avatar_updated_at', "datetime"])
|
231
|
+
expect(columns).to_not include(['photo_file_name', "varchar"])
|
232
|
+
expect(columns).to_not include(['photo_content_type', "varchar"])
|
233
|
+
expect(columns).to_not include(['photo_file_size', "bigint"])
|
234
|
+
expect(columns).to_not include(['photo_updated_at', "datetime"])
|
235
235
|
end
|
236
236
|
end
|
237
237
|
|
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'spec_helper'
|
2
|
-
require 'fog'
|
2
|
+
require 'fog/aws'
|
3
|
+
require 'fog/local'
|
3
4
|
require 'timecop'
|
4
5
|
|
5
6
|
describe Paperclip::Storage::Fog do
|
@@ -182,6 +183,13 @@ describe Paperclip::Storage::Fog do
|
|
182
183
|
tempfile.close
|
183
184
|
end
|
184
185
|
|
186
|
+
it 'is able to be handled when missing while copying to a local file' do
|
187
|
+
tempfile = Tempfile.new("known_location")
|
188
|
+
tempfile.binmode
|
189
|
+
assert_equal false, @dummy.avatar.copy_to_local_file(:original, tempfile.path)
|
190
|
+
tempfile.close
|
191
|
+
end
|
192
|
+
|
185
193
|
it "passes the content type to the Fog::Storage::AWS::Files instance" do
|
186
194
|
Fog::Storage::AWS::Files.any_instance.expects(:create).with do |hash|
|
187
195
|
hash[:content_type]
|
@@ -198,6 +206,11 @@ describe Paperclip::Storage::Fog do
|
|
198
206
|
assert @dummy.save
|
199
207
|
assert @connection.directories.get(@fog_directory)
|
200
208
|
end
|
209
|
+
|
210
|
+
it "sucessfully rewinds the file during bucket creation" do
|
211
|
+
assert @dummy.save
|
212
|
+
expect(Paperclip.io_adapters.for(@dummy.avatar).read.length).to be > 0
|
213
|
+
end
|
201
214
|
end
|
202
215
|
|
203
216
|
context "with a bucket" do
|
@@ -265,6 +278,22 @@ describe Paperclip::Storage::Fog do
|
|
265
278
|
end
|
266
279
|
end
|
267
280
|
|
281
|
+
context "with fog_public as a proc" do
|
282
|
+
let(:proc) { ->(attachment) { !attachment } }
|
283
|
+
|
284
|
+
before do
|
285
|
+
rebuild_model(@options.merge(fog_public: proc))
|
286
|
+
@dummy = Dummy.new
|
287
|
+
@dummy.avatar = StringIO.new(".")
|
288
|
+
@dummy.save
|
289
|
+
end
|
290
|
+
|
291
|
+
it "sets the @fog_public instance variable to false" do
|
292
|
+
assert_equal proc, @dummy.avatar.instance_variable_get("@options")[:fog_public]
|
293
|
+
assert_equal false, @dummy.avatar.fog_public
|
294
|
+
end
|
295
|
+
end
|
296
|
+
|
268
297
|
context "with styles set and fog_public set to false" do
|
269
298
|
before do
|
270
299
|
rebuild_model(@options.merge(fog_public: false, styles: { medium: "300x300>", thumb: "100x100>" }))
|
@@ -320,6 +349,9 @@ describe Paperclip::Storage::Fog do
|
|
320
349
|
it "honors the scheme in public url" do
|
321
350
|
assert_match(/^http:\/\//, @dummy.avatar.url)
|
322
351
|
end
|
352
|
+
it "honors the scheme in expiring url" do
|
353
|
+
assert_match(/^http:\/\//, @dummy.avatar.expiring_url)
|
354
|
+
end
|
323
355
|
end
|
324
356
|
|
325
357
|
context "with scheme not set" do
|
@@ -334,15 +366,20 @@ describe Paperclip::Storage::Fog do
|
|
334
366
|
it "provides HTTPS public url" do
|
335
367
|
assert_match(/^https:\/\//, @dummy.avatar.url)
|
336
368
|
end
|
369
|
+
it "provides HTTPS expiring url" do
|
370
|
+
assert_match(/^https:\/\//, @dummy.avatar.expiring_url)
|
371
|
+
end
|
337
372
|
end
|
338
373
|
|
339
374
|
context "with a valid bucket name for a subdomain" do
|
375
|
+
before { @dummy.stubs(:new_record?).returns(false) }
|
376
|
+
|
340
377
|
it "provides an url in subdomain style" do
|
341
378
|
assert_match(/^https:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png/, @dummy.avatar.url)
|
342
379
|
end
|
343
380
|
|
344
381
|
it "provides an url that expires in subdomain style" do
|
345
|
-
assert_match(/^
|
382
|
+
assert_match(/^https:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png.+Expires=.+$/, @dummy.avatar.expiring_url)
|
346
383
|
end
|
347
384
|
end
|
348
385
|
|
@@ -390,7 +427,7 @@ describe Paperclip::Storage::Fog do
|
|
390
427
|
end
|
391
428
|
|
392
429
|
it "provides a url that expires in folder style" do
|
393
|
-
assert_match(/^
|
430
|
+
assert_match(/^https:\/\/s3.amazonaws.com\/this_is_invalid\/avatars\/5k.png.+Expires=.+$/, @dummy.avatar.expiring_url)
|
394
431
|
end
|
395
432
|
|
396
433
|
end
|
@@ -409,6 +446,9 @@ describe Paperclip::Storage::Fog do
|
|
409
446
|
assert @connection.directories.get(@dynamic_fog_directory).inspect
|
410
447
|
end
|
411
448
|
|
449
|
+
it "provides an url using dynamic bucket name" do
|
450
|
+
assert_match(/^https:\/\/dynamicpaperclip.s3.amazonaws.com\/avatars\/5k.png\?\d*$/, @dummy.avatar.url)
|
451
|
+
end
|
412
452
|
end
|
413
453
|
|
414
454
|
context "with a proc for the fog_host evaluating a model method" do
|
@@ -475,6 +515,25 @@ describe Paperclip::Storage::Fog do
|
|
475
515
|
assert_equal @dummy.avatar.fog_credentials, @dynamic_fog_credentials
|
476
516
|
end
|
477
517
|
end
|
518
|
+
|
519
|
+
context "with custom fog_options" do
|
520
|
+
before do
|
521
|
+
rebuild_model(
|
522
|
+
@options.merge(fog_options: { multipart_chunk_size: 104857600 }),
|
523
|
+
)
|
524
|
+
@dummy = Dummy.new
|
525
|
+
@dummy.avatar = @file
|
526
|
+
end
|
527
|
+
|
528
|
+
it "applies the options to the fog #create call" do
|
529
|
+
files = stub
|
530
|
+
@dummy.avatar.stubs(:directory).returns stub(files: files)
|
531
|
+
files.expects(:create).with(
|
532
|
+
has_entries(multipart_chunk_size: 104857600),
|
533
|
+
)
|
534
|
+
@dummy.save
|
535
|
+
end
|
536
|
+
end
|
478
537
|
end
|
479
538
|
|
480
539
|
end
|
@@ -492,6 +551,7 @@ describe Paperclip::Storage::Fog do
|
|
492
551
|
@file = File.new(fixture_file('5k.png'), 'rb')
|
493
552
|
@dummy = Dummy.new
|
494
553
|
@dummy.avatar = @file
|
554
|
+
@dummy.stubs(:new_record?).returns(false)
|
495
555
|
end
|
496
556
|
|
497
557
|
after do
|
@@ -8,9 +8,10 @@ unless ENV["S3_BUCKET"].blank?
|
|
8
8
|
storage: :s3,
|
9
9
|
bucket: ENV["S3_BUCKET"],
|
10
10
|
path: ":class/:attachment/:id/:style.:extension",
|
11
|
+
s3_region: ENV["S3_REGION"],
|
11
12
|
s3_credentials: {
|
12
|
-
|
13
|
-
|
13
|
+
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
|
14
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
14
15
|
}
|
15
16
|
|
16
17
|
@file = File.new(fixture_file("5k.png"))
|
@@ -45,9 +46,10 @@ unless ENV["S3_BUCKET"].blank?
|
|
45
46
|
storage: :s3,
|
46
47
|
bucket: ENV["S3_BUCKET"],
|
47
48
|
path: ":class/:attachment/:id/:style.:extension",
|
49
|
+
s3_region: ENV["S3_REGION"],
|
48
50
|
s3_credentials: {
|
49
|
-
|
50
|
-
|
51
|
+
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
|
52
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
51
53
|
}
|
52
54
|
|
53
55
|
@dummy = Dummy.new
|
@@ -64,9 +66,10 @@ unless ENV["S3_BUCKET"].blank?
|
|
64
66
|
storage: :s3,
|
65
67
|
bucket: ENV["S3_BUCKET"],
|
66
68
|
path: ":class/:attachment/:id/:style.:extension",
|
69
|
+
s3_region: ENV["S3_REGION"],
|
67
70
|
s3_credentials: {
|
68
|
-
|
69
|
-
|
71
|
+
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
|
72
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
70
73
|
}
|
71
74
|
|
72
75
|
Dummy.delete_all
|
@@ -105,9 +108,12 @@ unless ENV["S3_BUCKET"].blank?
|
|
105
108
|
rebuild_model styles: { thumb: "100x100", square: "32x32#" },
|
106
109
|
storage: :s3,
|
107
110
|
bucket: ENV["S3_BUCKET"],
|
111
|
+
s3_region: ENV["S3_REGION"],
|
112
|
+
url: ":s3_domain_url",
|
113
|
+
path: "/:class/:attachment/:id_partition/:style/:filename",
|
108
114
|
s3_credentials: {
|
109
|
-
|
110
|
-
|
115
|
+
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
|
116
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
111
117
|
}
|
112
118
|
|
113
119
|
Dummy.delete_all
|
@@ -136,7 +142,7 @@ unless ENV["S3_BUCKET"].blank?
|
|
136
142
|
it "is destroyable" do
|
137
143
|
url = @dummy.avatar.url
|
138
144
|
@dummy.destroy
|
139
|
-
|
145
|
+
assert_forbidden_response url
|
140
146
|
end
|
141
147
|
end
|
142
148
|
|
@@ -146,12 +152,12 @@ unless ENV["S3_BUCKET"].blank?
|
|
146
152
|
storage: :s3,
|
147
153
|
bucket: ENV["S3_BUCKET"],
|
148
154
|
path: ":class/:attachment/:id/:style.:extension",
|
155
|
+
s3_region: ENV["S3_REGION"],
|
149
156
|
s3_credentials: {
|
150
|
-
|
151
|
-
|
157
|
+
access_key_id: ENV['AWS_ACCESS_KEY_ID'],
|
158
|
+
secret_access_key: ENV['AWS_SECRET_ACCESS_KEY']
|
152
159
|
},
|
153
|
-
s3_server_side_encryption:
|
154
|
-
|
160
|
+
s3_server_side_encryption: "AES256"
|
155
161
|
Dummy.delete_all
|
156
162
|
@dummy = Dummy.new
|
157
163
|
end
|
@@ -173,7 +179,7 @@ unless ENV["S3_BUCKET"].blank?
|
|
173
179
|
end
|
174
180
|
|
175
181
|
it "is encrypted on S3" do
|
176
|
-
assert @dummy.avatar.s3_object.server_side_encryption ==
|
182
|
+
assert @dummy.avatar.s3_object.server_side_encryption == "AES256"
|
177
183
|
end
|
178
184
|
end
|
179
185
|
end
|