paperclip 4.2.2 → 6.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (141) hide show
  1. checksums.yaml +5 -5
  2. data/.codeclimate.yml +17 -0
  3. data/.github/issue_template.md +3 -0
  4. data/.hound.yml +1055 -0
  5. data/.rubocop.yml +1 -0
  6. data/.travis.yml +17 -15
  7. data/Appraisals +4 -16
  8. data/CONTRIBUTING.md +19 -8
  9. data/Gemfile +5 -9
  10. data/LICENSE +1 -1
  11. data/MIGRATING-ES.md +317 -0
  12. data/MIGRATING.md +375 -0
  13. data/NEWS +184 -31
  14. data/README.md +371 -201
  15. data/RELEASING.md +17 -0
  16. data/Rakefile +2 -2
  17. data/UPGRADING +12 -9
  18. data/features/basic_integration.feature +10 -6
  19. data/features/migration.feature +0 -24
  20. data/features/step_definitions/attachment_steps.rb +41 -35
  21. data/features/step_definitions/html_steps.rb +2 -2
  22. data/features/step_definitions/rails_steps.rb +39 -38
  23. data/features/step_definitions/s3_steps.rb +2 -2
  24. data/features/step_definitions/web_steps.rb +1 -103
  25. data/features/support/env.rb +1 -0
  26. data/features/support/file_helpers.rb +2 -2
  27. data/features/support/paths.rb +1 -1
  28. data/features/support/rails.rb +0 -24
  29. data/gemfiles/4.2.gemfile +6 -8
  30. data/gemfiles/5.0.gemfile +17 -0
  31. data/lib/generators/paperclip/paperclip_generator.rb +9 -1
  32. data/lib/generators/paperclip/templates/paperclip_migration.rb.erb +1 -1
  33. data/lib/paperclip/attachment.rb +51 -26
  34. data/lib/paperclip/attachment_registry.rb +3 -2
  35. data/lib/paperclip/callbacks.rb +8 -6
  36. data/lib/paperclip/content_type_detector.rb +27 -11
  37. data/lib/paperclip/errors.rb +3 -1
  38. data/lib/paperclip/file_command_content_type_detector.rb +6 -8
  39. data/lib/paperclip/filename_cleaner.rb +0 -1
  40. data/lib/paperclip/geometry_detector_factory.rb +3 -3
  41. data/lib/paperclip/geometry_parser_factory.rb +1 -1
  42. data/lib/paperclip/glue.rb +1 -1
  43. data/lib/paperclip/has_attached_file.rb +9 -2
  44. data/lib/paperclip/helpers.rb +15 -11
  45. data/lib/paperclip/interpolations/plural_cache.rb +6 -5
  46. data/lib/paperclip/interpolations.rb +24 -14
  47. data/lib/paperclip/io_adapters/abstract_adapter.rb +32 -4
  48. data/lib/paperclip/io_adapters/attachment_adapter.rb +17 -6
  49. data/lib/paperclip/io_adapters/data_uri_adapter.rb +8 -8
  50. data/lib/paperclip/io_adapters/empty_string_adapter.rb +5 -4
  51. data/lib/paperclip/io_adapters/file_adapter.rb +12 -6
  52. data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +8 -7
  53. data/lib/paperclip/io_adapters/identity_adapter.rb +12 -6
  54. data/lib/paperclip/io_adapters/nil_adapter.rb +8 -5
  55. data/lib/paperclip/io_adapters/registry.rb +6 -2
  56. data/lib/paperclip/io_adapters/stringio_adapter.rb +9 -6
  57. data/lib/paperclip/io_adapters/uploaded_file_adapter.rb +10 -6
  58. data/lib/paperclip/io_adapters/uri_adapter.rb +43 -19
  59. data/lib/paperclip/logger.rb +1 -1
  60. data/lib/paperclip/matchers/validate_attachment_content_type_matcher.rb +4 -4
  61. data/lib/paperclip/media_type_spoof_detector.rb +13 -9
  62. data/lib/paperclip/processor.rb +15 -6
  63. data/lib/paperclip/rails_environment.rb +25 -0
  64. data/lib/paperclip/schema.rb +4 -10
  65. data/lib/paperclip/storage/filesystem.rb +13 -2
  66. data/lib/paperclip/storage/fog.rb +33 -20
  67. data/lib/paperclip/storage/s3.rb +89 -70
  68. data/lib/paperclip/style.rb +0 -1
  69. data/lib/paperclip/thumbnail.rb +24 -12
  70. data/lib/paperclip/url_generator.rb +17 -13
  71. data/lib/paperclip/validators/attachment_size_validator.rb +1 -7
  72. data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +4 -0
  73. data/lib/paperclip/validators.rb +1 -1
  74. data/lib/paperclip/version.rb +3 -1
  75. data/lib/paperclip.rb +27 -13
  76. data/lib/tasks/paperclip.rake +33 -3
  77. data/paperclip.gemspec +18 -15
  78. data/spec/paperclip/attachment_definitions_spec.rb +1 -1
  79. data/spec/paperclip/attachment_processing_spec.rb +2 -5
  80. data/spec/paperclip/attachment_registry_spec.rb +84 -13
  81. data/spec/paperclip/attachment_spec.rb +147 -41
  82. data/spec/paperclip/content_type_detector_spec.rb +9 -2
  83. data/spec/paperclip/file_command_content_type_detector_spec.rb +15 -2
  84. data/spec/paperclip/filename_cleaner_spec.rb +0 -1
  85. data/spec/paperclip/geometry_spec.rb +1 -1
  86. data/spec/paperclip/glue_spec.rb +44 -0
  87. data/spec/paperclip/has_attached_file_spec.rb +24 -8
  88. data/spec/paperclip/integration_spec.rb +42 -5
  89. data/spec/paperclip/interpolations_spec.rb +21 -9
  90. data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +106 -23
  91. data/spec/paperclip/io_adapters/attachment_adapter_spec.rb +6 -3
  92. data/spec/paperclip/io_adapters/data_uri_adapter_spec.rb +7 -1
  93. data/spec/paperclip/io_adapters/file_adapter_spec.rb +6 -3
  94. data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +51 -14
  95. data/spec/paperclip/io_adapters/identity_adapter_spec.rb +1 -1
  96. data/spec/paperclip/io_adapters/registry_spec.rb +2 -2
  97. data/spec/paperclip/io_adapters/stringio_adapter_spec.rb +5 -1
  98. data/spec/paperclip/io_adapters/uploaded_file_adapter_spec.rb +5 -5
  99. data/spec/paperclip/io_adapters/uri_adapter_spec.rb +126 -8
  100. data/spec/paperclip/matchers/validate_attachment_content_type_matcher_spec.rb +10 -0
  101. data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +1 -1
  102. data/spec/paperclip/media_type_spoof_detector_spec.rb +75 -11
  103. data/spec/paperclip/paperclip_spec.rb +15 -40
  104. data/spec/paperclip/plural_cache_spec.rb +17 -16
  105. data/spec/paperclip/processor_spec.rb +4 -4
  106. data/spec/paperclip/rails_environment_spec.rb +33 -0
  107. data/spec/paperclip/schema_spec.rb +46 -46
  108. data/spec/paperclip/storage/fog_spec.rb +63 -3
  109. data/spec/paperclip/storage/s3_live_spec.rb +20 -14
  110. data/spec/paperclip/storage/s3_spec.rb +400 -215
  111. data/spec/paperclip/style_spec.rb +0 -1
  112. data/spec/paperclip/tempfile_factory_spec.rb +4 -0
  113. data/spec/paperclip/tempfile_spec.rb +35 -0
  114. data/spec/paperclip/thumbnail_spec.rb +59 -38
  115. data/spec/paperclip/url_generator_spec.rb +55 -45
  116. data/spec/paperclip/validators/attachment_size_validator_spec.rb +26 -20
  117. data/spec/paperclip/validators_spec.rb +5 -5
  118. data/spec/spec_helper.rb +7 -1
  119. data/spec/support/assertions.rb +12 -1
  120. data/spec/support/fake_model.rb +4 -0
  121. data/spec/support/fixtures/empty.xlsx +0 -0
  122. data/spec/support/matchers/have_column.rb +11 -2
  123. data/spec/support/mock_attachment.rb +2 -0
  124. data/spec/support/mock_url_generator_builder.rb +2 -2
  125. data/spec/support/model_reconstruction.rb +11 -3
  126. data/spec/support/reporting.rb +11 -0
  127. metadata +110 -63
  128. data/RUNNING_TESTS.md +0 -4
  129. data/cucumber/paperclip_steps.rb +0 -6
  130. data/gemfiles/3.2.gemfile +0 -19
  131. data/gemfiles/4.0.gemfile +0 -19
  132. data/gemfiles/4.1.gemfile +0 -19
  133. data/lib/paperclip/locales/de.yml +0 -18
  134. data/lib/paperclip/locales/es.yml +0 -18
  135. data/lib/paperclip/locales/ja.yml +0 -18
  136. data/lib/paperclip/locales/pt-BR.yml +0 -18
  137. data/lib/paperclip/locales/zh-CN.yml +0 -18
  138. data/lib/paperclip/locales/zh-HK.yml +0 -18
  139. data/lib/paperclip/locales/zh-TW.yml +0 -18
  140. data/spec/support/mock_model.rb +0 -2
  141. 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.type] }
28
+ columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
29
29
 
30
- expect(columns).to include(['avatar_file_name', :string])
31
- expect(columns).to include(['avatar_content_type', :string])
32
- expect(columns).to include(['avatar_file_size', :integer])
33
- expect(columns).to include(['avatar_updated_at', :datetime])
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.type] }
53
+ columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
54
54
 
55
- expect(columns).to include(['avatar_file_name', :string])
56
- expect(columns).to include(['avatar_content_type', :string])
57
- expect(columns).to include(['avatar_file_size', :integer])
58
- expect(columns).to include(['avatar_updated_at', :datetime])
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.type] }
92
+ columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
93
93
 
94
- expect(columns).to include(['avatar_file_name', :string])
95
- expect(columns).to include(['avatar_content_type', :string])
96
- expect(columns).to include(['avatar_file_size', :integer])
97
- expect(columns).to include(['avatar_updated_at', :datetime])
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.type] }
122
+ columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
123
123
 
124
- expect(columns).to include(['avatar_file_name', :string])
125
- expect(columns).to include(['avatar_content_type', :string])
126
- expect(columns).to include(['avatar_file_size', :integer])
127
- expect(columns).to include(['avatar_updated_at', :datetime])
128
- expect(columns).to include(['photo_file_name', :string])
129
- expect(columns).to include(['photo_content_type', :string])
130
- expect(columns).to include(['photo_file_size', :integer])
131
- expect(columns).to include(['photo_updated_at', :datetime])
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, :integer
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.type] }
181
+ columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
182
182
 
183
- expect(columns).to_not include(['avatar_file_name', :string])
184
- expect(columns).to_not include(['avatar_content_type', :string])
185
- expect(columns).to_not include(['avatar_file_size', :integer])
186
- expect(columns).to_not include(['avatar_updated_at', :datetime])
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.type] }
203
+ columns = Dummy.columns.map{ |column| [column.name, column.sql_type] }
204
204
 
205
- expect(columns).to_not include(['avatar_file_name', :string])
206
- expect(columns).to_not include(['avatar_content_type', :string])
207
- expect(columns).to_not include(['avatar_file_size', :integer])
208
- expect(columns).to_not include(['avatar_updated_at', :datetime])
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, :integer
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.type] }
226
-
227
- expect(columns).to_not include(['avatar_file_name', :string])
228
- expect(columns).to_not include(['avatar_content_type', :string])
229
- expect(columns).to_not include(['avatar_file_size', :integer])
230
- expect(columns).to_not include(['avatar_updated_at', :datetime])
231
- expect(columns).to_not include(['photo_file_name', :string])
232
- expect(columns).to_not include(['photo_content_type', :string])
233
- expect(columns).to_not include(['photo_file_size', :integer])
234
- expect(columns).to_not include(['photo_updated_at', :datetime])
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(/^http:\/\/papercliptests.s3.amazonaws.com\/avatars\/5k.png.+Expires=.+$/, @dummy.avatar.expiring_url)
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(/^http:\/\/s3.amazonaws.com\/this_is_invalid\/avatars\/5k.png.+Expires=.+$/, @dummy.avatar.expiring_url)
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
- aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
13
- aws_secre_access_key: ENV['AWS_SECRET_ACCESS_KEY']
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
- aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
50
- aws_secre_access_key: ENV['AWS_SECRET_ACCESS_KEY']
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
- aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
69
- aws_secre_access_key: ENV['AWS_SECRET_ACCESS_KEY']
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
- aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
110
- aws_secre_access_key: ENV['AWS_SECRET_ACCESS_KEY']
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
- assert_not_found_response url
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
- aws_access_key_id: ENV['AWS_ACCESS_KEY_ID'],
151
- aws_secre_access_key: ENV['AWS_SECRET_ACCESS_KEY']
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: :aes256
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 == :aes256
182
+ assert @dummy.avatar.s3_object.server_side_encryption == "AES256"
177
183
  end
178
184
  end
179
185
  end