kt-paperclip 7.2.0 → 7.2.2

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
2
  SHA256:
3
- metadata.gz: ada7e8b864e1b23b9bd7064be5e30202ce2f89869de43d136df1a915951fc97d
4
- data.tar.gz: fbe391dc1f775274f4e3f6972991c2883fc30c5d4970c925b43a48c651c6f9e3
3
+ metadata.gz: a7308352f1d792e5e861ba828d1eb3994b5956fc51df06a4cbfedfe134ce105d
4
+ data.tar.gz: be4d4161c411a18edaf2a92b5a48d746d87d01f3d5a6e4fe5fecc20f87ad42a4
5
5
  SHA512:
6
- metadata.gz: bb686418ce534696a30cb0610b7af967b608a889c2f1efb68ce577ab65334df366177674887cadb98be6739b54c06158cae9de7d98a8adaf011d23e245128ed8
7
- data.tar.gz: b19cd6cd395d65fa25d90f63f597fbe4585890a2c257d0636791613410ea53b6d9df441512e581160e4c16e2d3e0e8dff55910038165449516a3c00067a99eb3
6
+ metadata.gz: e202f7d5a1a9466f69118e485c5c747f10942644337940b6141ffb41904118353cab09858fbdabf4e68ba87d9e5199109a1a1525d7eaeea4a1601ba9e384459f
7
+ data.tar.gz: 20fb1d6bd39a2d21a5b2f627d5ab92aba95ae88d523319de7b06e5e0983c281e76ae218a6bccf64fdc16362652cb1cc1251eab7fdacc14b6428b8dbafd2bdc81
data/NEWS CHANGED
@@ -1,5 +1,13 @@
1
1
  [UNRELEASED]
2
- Issue file delete only once per unique style when nullifying attachment or destroying an object. Avoids triggering a rate limit error on Google Cloud Storage.
2
+
3
+ 7.2.1 (2023-09-09)
4
+ * Improvement: Support file extension names both as symbols and strings for :content_type_mappings
5
+
6
+ 7.2.0 (2023-05-30)
7
+ * Paperclip schema statements are consistent with ActiveRecord::Migration::Compatibility versioning. Old migrations containing Paperclip schema statements perform the same schema changes both before and after an ActiveRecord version upgrade.
8
+
9
+ 7.0.1 (2021-10-06)
10
+ * Issue file delete only once per unique style when nullifying attachment or destroying an object. Avoids triggering a rate limit error on Google Cloud Storage.
3
11
 
4
12
  7.0.0 (2021-05-28)
5
13
  * Replace `mimemagic` gem with `marcel` due to licensing issues. See https://github.com/kreeti/kt-paperclip/pull/54 for details and limitations
@@ -7,7 +7,7 @@ module Paperclip
7
7
 
8
8
  def make
9
9
  geometry = GeometryParser.new(geometry_string.strip).make
10
- geometry || raise(Errors::NotIdentifiedByImageMagickError.new)
10
+ geometry || raise(Errors::NotIdentifiedByImageMagickError.new("Could not identify image size"))
11
11
  end
12
12
 
13
13
  private
@@ -4,14 +4,15 @@ require "paperclip/schema"
4
4
 
5
5
  module Paperclip
6
6
  module Glue
7
+ LOCALE_PATHS = Dir.glob("#{File.dirname(__FILE__)}/locales/*.{rb,yml}")
8
+
7
9
  def self.included(base)
8
10
  base.extend ClassMethods
9
11
  base.send :include, Callbacks
10
12
  base.send :include, Validators
11
13
  base.send :include, Schema if defined? ActiveRecord::Base
12
14
 
13
- locale_path = Dir.glob(File.dirname(__FILE__) + "/locales/*.{rb,yml}")
14
- I18n.load_path += locale_path unless I18n.load_path.include?(locale_path)
15
+ I18n.load_path += LOCALE_PATHS unless (LOCALE_PATHS - I18n.load_path).empty?
15
16
  end
16
17
  end
17
18
  end
@@ -0,0 +1,20 @@
1
+ gd:
2
+ errors:
3
+ messages:
4
+ in_between: "– feumaidh seo a bhith eadar %{min} ’s %{max}"
5
+ spoofed_media_type: "– tha susbaint ann nach eil a-rèir na chaidh aithris"
6
+
7
+ number:
8
+ human:
9
+ storage_units:
10
+ format: "%n %u"
11
+ units:
12
+ byte:
13
+ one: "bhaidht"
14
+ two: "bhaidht"
15
+ few: "baidhtean"
16
+ other: "baidht"
17
+ kb: "KB"
18
+ mb: "MB"
19
+ gb: "GB"
20
+ tb: "TB"
@@ -82,7 +82,8 @@ module Paperclip
82
82
  end
83
83
 
84
84
  def mapped_content_type
85
- Paperclip.options[:content_type_mappings][filename_extension]
85
+ content_type_mappings = Paperclip.options[:content_type_mappings]
86
+ content_type_mappings[filename_extension] || content_type_mappings[filename_extension.to_s]
86
87
  end
87
88
 
88
89
  def filename_extension
@@ -11,7 +11,7 @@ module Paperclip
11
11
  def self.included(_base)
12
12
  ActiveRecord::ConnectionAdapters::Table.include TableDefinition
13
13
  ActiveRecord::ConnectionAdapters::TableDefinition.include TableDefinition
14
- ActiveRecord::ConnectionAdapters::AbstractAdapter.include Statements
14
+ ActiveRecord::Migration.include Statements
15
15
  ActiveRecord::Migration::CommandRecorder.include CommandRecorder
16
16
  end
17
17
 
@@ -35,8 +35,8 @@ module Paperclip
35
35
  options.slice(*AVAILABLE_CHECKS).each do |option, option_value|
36
36
  option_value = option_value.call(record) if option_value.is_a?(Proc)
37
37
  option_value = extract_option_value(option, option_value)
38
- operator = ActiveRecord::VERSION::MAJOR >= 7 ? COMPARE_CHECKS[option] : CHECKS[option]
39
-
38
+ operator = ActiveModel::VERSION::MAJOR >= 7 ? COMPARE_CHECKS[option] : CHECKS[option]
39
+
40
40
  unless value.send(operator, option_value)
41
41
  error_message_key = options[:in] ? :in_between : option
42
42
  error_attrs.each do |error_attr_name|
@@ -1,3 +1,3 @@
1
1
  module Paperclip
2
- VERSION = "7.2.0" unless defined?(Paperclip::VERSION)
2
+ VERSION = "7.2.2" unless defined?(Paperclip::VERSION)
3
3
  end
data/paperclip.gemspec CHANGED
@@ -26,7 +26,7 @@ Gem::Specification.new do |s|
26
26
  s.add_dependency("activesupport", ">= 4.2.0")
27
27
  s.add_dependency("mime-types")
28
28
  s.add_dependency("marcel", "~> 1.0.1")
29
- s.add_dependency("terrapin", "~> 0.6.0")
29
+ s.add_dependency("terrapin", ">= 0.6.0", "< 2.0")
30
30
 
31
31
  s.add_development_dependency("activerecord", ">= 4.2.0")
32
32
  s.add_development_dependency("appraisal")
@@ -1333,7 +1333,7 @@ describe Paperclip::Attachment do
1333
1333
 
1334
1334
  context "An attachment with only a avatar_file_name column" do
1335
1335
  before do
1336
- ActiveRecord::Base.connection.create_table :dummies, force: true do |table|
1336
+ ActiveRecord::Migration.create_table :dummies, force: true do |table|
1337
1337
  table.column :avatar_file_name, :string
1338
1338
  end
1339
1339
  rebuild_class
@@ -1359,7 +1359,7 @@ describe Paperclip::Attachment do
1359
1359
 
1360
1360
  context "and avatar_created_at column" do
1361
1361
  before do
1362
- ActiveRecord::Base.connection.add_column :dummies, :avatar_created_at, :timestamp
1362
+ ActiveRecord::Migration.add_column :dummies, :avatar_created_at, :timestamp
1363
1363
  rebuild_class
1364
1364
  @dummy = Dummy.new
1365
1365
  end
@@ -1396,7 +1396,7 @@ describe Paperclip::Attachment do
1396
1396
 
1397
1397
  context "and avatar_updated_at column" do
1398
1398
  before do
1399
- ActiveRecord::Base.connection.add_column :dummies, :avatar_updated_at, :timestamp
1399
+ ActiveRecord::Migration.add_column :dummies, :avatar_updated_at, :timestamp
1400
1400
  rebuild_class
1401
1401
  @dummy = Dummy.new
1402
1402
  end
@@ -1426,7 +1426,7 @@ describe Paperclip::Attachment do
1426
1426
 
1427
1427
  context "and avatar_content_type column" do
1428
1428
  before do
1429
- ActiveRecord::Base.connection.add_column :dummies, :avatar_content_type, :string
1429
+ ActiveRecord::Migration.add_column :dummies, :avatar_content_type, :string
1430
1430
  rebuild_class
1431
1431
  @dummy = Dummy.new
1432
1432
  end
@@ -1443,7 +1443,7 @@ describe Paperclip::Attachment do
1443
1443
 
1444
1444
  context "and avatar_file_size column" do
1445
1445
  before do
1446
- ActiveRecord::Base.connection.add_column :dummies, :avatar_file_size, :bigint
1446
+ ActiveRecord::Migration.add_column :dummies, :avatar_file_size, :bigint
1447
1447
  rebuild_class
1448
1448
  @dummy = Dummy.new
1449
1449
  end
@@ -1467,7 +1467,7 @@ describe Paperclip::Attachment do
1467
1467
 
1468
1468
  context "and avatar_fingerprint column" do
1469
1469
  before do
1470
- ActiveRecord::Base.connection.add_column :dummies, :avatar_fingerprint, :string
1470
+ ActiveRecord::Migration.add_column :dummies, :avatar_fingerprint, :string
1471
1471
  rebuild_class
1472
1472
  @dummy = Dummy.new
1473
1473
  end
@@ -35,4 +35,13 @@ describe Paperclip::GeometryDetector do
35
35
  Paperclip.options[:use_exif_orientation] = true
36
36
  end
37
37
  end
38
+
39
+ it "raises an exception with a message when the file is not an image" do
40
+ file = fixture_file("text.txt")
41
+ factory = Paperclip::GeometryDetector.new(file)
42
+
43
+ expect do
44
+ factory.make
45
+ end.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError, "Could not identify image size")
46
+ end
38
47
  end
@@ -147,23 +147,35 @@ describe Paperclip::Geometry do
147
147
 
148
148
  it "does not generate from a bad file" do
149
149
  file = "/home/This File Does Not Exist.omg"
150
- expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
150
+ expect do
151
+ @geo = Paperclip::Geometry.from_file(file)
152
+ end.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError,
153
+ "Could not identify image size")
151
154
  end
152
155
 
153
156
  it "does not generate from a blank filename" do
154
157
  file = ""
155
- expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
158
+ expect do
159
+ @geo = Paperclip::Geometry.from_file(file)
160
+ end.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError,
161
+ "Cannot find the geometry of a file with a blank name")
156
162
  end
157
163
 
158
164
  it "does not generate from a nil file" do
159
165
  file = nil
160
- expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
166
+ expect do
167
+ @geo = Paperclip::Geometry.from_file(file)
168
+ end.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError,
169
+ "Cannot find the geometry of a file with a blank name")
161
170
  end
162
171
 
163
172
  it "does not generate from a file with no path" do
164
173
  file = double("file", path: "")
165
174
  allow(file).to receive(:respond_to?).with(:path).and_return(true)
166
- expect { @geo = Paperclip::Geometry.from_file(file) }.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError)
175
+ expect do
176
+ @geo = Paperclip::Geometry.from_file(file)
177
+ end.to raise_error(Paperclip::Errors::NotIdentifiedByImageMagickError,
178
+ "Cannot find the geometry of a file with a blank name")
167
179
  end
168
180
 
169
181
  it "lets us know when a command isn't found versus a processing error" do
@@ -39,4 +39,25 @@ describe Paperclip::Glue do
39
39
  Object.send :remove_const, "NonActiveRecordModel"
40
40
  end
41
41
  end
42
+
43
+ describe "when included" do
44
+ it "does not mutate I18n.load_path more than once" do
45
+ before_load_path = I18n.load_path
46
+ I18n.load_path = []
47
+
48
+ # expect twice because the load_path is reset after creating the classes
49
+ expect(I18n.config).to receive(:load_path=).and_call_original.twice
50
+
51
+ FirstModel = Class.new
52
+ FirstModel.include Paperclip::Glue
53
+
54
+ SecondModel = Class.new
55
+ SecondModel.include Paperclip::Glue
56
+
57
+ ThirdModel = Class.new
58
+ ThirdModel.include Paperclip::Glue
59
+
60
+ I18n.load_path = before_load_path
61
+ end
62
+ end
42
63
  end
@@ -224,7 +224,7 @@ describe Paperclip::UriAdapter do
224
224
 
225
225
  it "calls open with read_timeout option" do
226
226
  expect(@uri_opener)
227
- .to receive(:open).with(@uri, read_timeout: 120).at_least(1).times
227
+ .to receive(:open).with(@uri, { read_timeout: 120 }).at_least(1).times
228
228
  end
229
229
  end
230
230
  end
@@ -32,12 +32,18 @@ describe Paperclip::MediaTypeSpoofDetector do
32
32
  end
33
33
 
34
34
  it "does not reject when the extension => content_type is in :content_type_mappings" do
35
+ file = Tempfile.open(["test", ".PEM"])
36
+ file.puts "Certificate!"
37
+ file.close
38
+
39
+ adapter = Paperclip.io_adapters.for(File.new(file.path))
40
+
35
41
  begin
36
42
  Paperclip.options[:content_type_mappings] = { pem: "text/plain" }
37
- file = Tempfile.open(["test", ".PEM"])
38
- file.puts "Certificate!"
39
- file.close
40
- adapter = Paperclip.io_adapters.for(File.new(file.path))
43
+ assert !Paperclip::MediaTypeSpoofDetector.using(adapter, adapter.original_filename, adapter.content_type).spoofed?
44
+
45
+ # As a string.
46
+ Paperclip.options[:content_type_mappings] = { "pem" => "text/plain" }
41
47
  assert !Paperclip::MediaTypeSpoofDetector.using(adapter, adapter.original_filename, adapter.content_type).spoofed?
42
48
  ensure
43
49
  Paperclip.options[:content_type_mappings] = {}
@@ -49,7 +49,7 @@ describe "Missing Attachment Styles" do
49
49
  expected_hash = { Dummy: { avatar: [:export, :thumb] } }
50
50
  assert_equal expected_hash, Paperclip.missing_attachments_styles
51
51
 
52
- ActiveRecord::Base.connection.create_table :books, force: true
52
+ ActiveRecord::Migration.create_table :books, force: true
53
53
  class ::Book < ActiveRecord::Base
54
54
  has_attached_file :cover, styles: { small: "x100", large: "1000x1000>" }
55
55
  has_attached_file :sample, styles: { thumb: "x100" }
@@ -63,7 +63,7 @@ describe Paperclip do
63
63
  context "Calling Paperclip.run with a logger" do
64
64
  it "passes the defined logger if :log_command is set" do
65
65
  Paperclip.options[:log_command] = true
66
- expect(Terrapin::CommandLine).to receive(:new).with("convert", "stuff", logger: Paperclip.logger).and_return(double(run: nil))
66
+ expect(Terrapin::CommandLine).to receive(:new).with("convert", "stuff", { logger: Paperclip.logger }).and_return(double(run: nil))
67
67
  Paperclip.run("convert", "stuff")
68
68
  end
69
69
  end
@@ -11,7 +11,7 @@ describe Paperclip::Schema do
11
11
 
12
12
  after do
13
13
  begin
14
- Dummy.connection.drop_table :dummies
14
+ ActiveRecord::Migration.drop_table :dummies
15
15
  rescue StandardError
16
16
  nil
17
17
  end
@@ -23,7 +23,7 @@ describe Paperclip::Schema do
23
23
  ActiveSupport::Deprecation.silenced = false
24
24
  end
25
25
  it "creates attachment columns" do
26
- Dummy.connection.create_table :dummies, force: true do |t|
26
+ ActiveRecord::Migration.create_table :dummies, force: true do |t|
27
27
  ActiveSupport::Deprecation.silence do
28
28
  t.has_attached_file :avatar
29
29
  end
@@ -38,7 +38,7 @@ describe Paperclip::Schema do
38
38
  end
39
39
 
40
40
  it "displays deprecation warning" do
41
- Dummy.connection.create_table :dummies, force: true do |t|
41
+ ActiveRecord::Migration.create_table :dummies, force: true do |t|
42
42
  assert_deprecated do
43
43
  t.has_attached_file :avatar
44
44
  end
@@ -48,7 +48,7 @@ describe Paperclip::Schema do
48
48
 
49
49
  context "using #attachment" do
50
50
  before do
51
- Dummy.connection.create_table :dummies, force: true do |t|
51
+ ActiveRecord::Migration.create_table :dummies, force: true do |t|
52
52
  t.attachment :avatar
53
53
  end
54
54
  end
@@ -65,7 +65,7 @@ describe Paperclip::Schema do
65
65
 
66
66
  context "using #attachment with options" do
67
67
  before do
68
- Dummy.connection.create_table :dummies, force: true do |t|
68
+ ActiveRecord::Migration.create_table :dummies, force: true do |t|
69
69
  t.attachment :avatar, default: 1, file_name: { default: "default" }
70
70
  end
71
71
  end
@@ -83,13 +83,13 @@ describe Paperclip::Schema do
83
83
 
84
84
  context "within schema statement" do
85
85
  before do
86
- Dummy.connection.create_table :dummies, force: true
86
+ ActiveRecord::Migration.create_table :dummies, force: true
87
87
  end
88
88
 
89
89
  context "migrating up" do
90
90
  context "with single attachment" do
91
91
  before do
92
- Dummy.connection.add_attachment :dummies, :avatar
92
+ ActiveRecord::Migration.add_attachment :dummies, :avatar
93
93
  end
94
94
 
95
95
  it "creates attachment columns" do
@@ -104,7 +104,7 @@ describe Paperclip::Schema do
104
104
 
105
105
  context "with single attachment and options" do
106
106
  before do
107
- Dummy.connection.add_attachment :dummies, :avatar, default: "1", file_name: { default: "default" }
107
+ ActiveRecord::Migration.add_attachment :dummies, :avatar, default: "1", file_name: { default: "default" }
108
108
  end
109
109
 
110
110
  it "sets defaults on columns" do
@@ -119,7 +119,7 @@ describe Paperclip::Schema do
119
119
 
120
120
  context "with multiple attachments" do
121
121
  before do
122
- Dummy.connection.add_attachment :dummies, :avatar, :photo
122
+ ActiveRecord::Migration.add_attachment :dummies, :avatar, :photo
123
123
  end
124
124
 
125
125
  it "creates attachment columns" do
@@ -138,7 +138,7 @@ describe Paperclip::Schema do
138
138
 
139
139
  context "with multiple attachments and options" do
140
140
  before do
141
- Dummy.connection.add_attachment :dummies, :avatar, :photo, default: "1", file_name: { default: "default" }
141
+ ActiveRecord::Migration.add_attachment :dummies, :avatar, :photo, default: "1", file_name: { default: "default" }
142
142
  end
143
143
 
144
144
  it "sets defaults on columns" do
@@ -157,7 +157,7 @@ describe Paperclip::Schema do
157
157
  context "with no attachment" do
158
158
  it "raises an error" do
159
159
  assert_raises ArgumentError do
160
- Dummy.connection.add_attachment :dummies
160
+ ActiveRecord::Migration.add_attachment :dummies
161
161
  end
162
162
  end
163
163
  end
@@ -165,7 +165,7 @@ describe Paperclip::Schema do
165
165
 
166
166
  context "migrating down" do
167
167
  before do
168
- Dummy.connection.change_table :dummies do |t|
168
+ ActiveRecord::Migration.change_table :dummies do |t|
169
169
  t.column :avatar_file_name, :string
170
170
  t.column :avatar_content_type, :string
171
171
  t.column :avatar_file_size, :bigint
@@ -179,7 +179,7 @@ describe Paperclip::Schema do
179
179
  end
180
180
  it "removes the attachment columns" do
181
181
  ActiveSupport::Deprecation.silence do
182
- Dummy.connection.drop_attached_file :dummies, :avatar
182
+ ActiveRecord::Migration.drop_attached_file :dummies, :avatar
183
183
  end
184
184
 
185
185
  columns = Dummy.columns.map { |column| [column.name, column.sql_type] }
@@ -192,7 +192,7 @@ describe Paperclip::Schema do
192
192
 
193
193
  it "displays a deprecation warning" do
194
194
  assert_deprecated do
195
- Dummy.connection.drop_attached_file :dummies, :avatar
195
+ ActiveRecord::Migration.drop_attached_file :dummies, :avatar
196
196
  end
197
197
  end
198
198
  end
@@ -200,7 +200,7 @@ describe Paperclip::Schema do
200
200
  context "using #remove_attachment" do
201
201
  context "with single attachment" do
202
202
  before do
203
- Dummy.connection.remove_attachment :dummies, :avatar
203
+ ActiveRecord::Migration.remove_attachment :dummies, :avatar
204
204
  end
205
205
 
206
206
  it "removes the attachment columns" do
@@ -215,14 +215,14 @@ describe Paperclip::Schema do
215
215
 
216
216
  context "with multiple attachments" do
217
217
  before do
218
- Dummy.connection.change_table :dummies do |t|
218
+ ActiveRecord::Migration.change_table :dummies do |t|
219
219
  t.column :photo_file_name, :string
220
220
  t.column :photo_content_type, :string
221
221
  t.column :photo_file_size, :bigint
222
222
  t.column :photo_updated_at, :datetime
223
223
  end
224
224
 
225
- Dummy.connection.remove_attachment :dummies, :avatar, :photo
225
+ ActiveRecord::Migration.remove_attachment :dummies, :avatar, :photo
226
226
  end
227
227
 
228
228
  it "removes the attachment columns" do
@@ -242,7 +242,7 @@ describe Paperclip::Schema do
242
242
  context "with no attachment" do
243
243
  it "raises an error" do
244
244
  assert_raises ArgumentError do
245
- Dummy.connection.remove_attachment :dummies
245
+ ActiveRecord::Migration.remove_attachment :dummies
246
246
  end
247
247
  end
248
248
  end
@@ -395,12 +395,22 @@ describe Paperclip::Storage::S3 do
395
395
  allow(@dummy.avatar).to receive(:s3_object).with(:thumbnail).and_return(object)
396
396
 
397
397
  expect(object).to receive(:upload_file).
398
- with(anything, content_type: "image/png",
399
- acl: :"public-read")
398
+ with(
399
+ anything,
400
+ {
401
+ content_type: "image/png",
402
+ acl: :"public-read",
403
+ },
404
+ )
400
405
  expect(object).to receive(:upload_file).
401
- with(anything, content_type: "image/png",
402
- acl: :"public-read",
403
- cache_control: "max-age=31557600")
406
+ with(
407
+ anything,
408
+ {
409
+ content_type: "image/png",
410
+ acl: :"public-read",
411
+ cache_control: "max-age=31557600",
412
+ },
413
+ )
404
414
  @dummy.save
405
415
  end
406
416
 
@@ -445,12 +455,12 @@ describe Paperclip::Storage::S3 do
445
455
  it "uploads original" do
446
456
  expect(@object).to receive(:upload_file).with(
447
457
  anything,
448
- content_type: "image/png",
458
+ { content_type: "image/png" },
449
459
  ).and_return(true)
450
460
  @dummy.avatar.reprocess!
451
461
  expect(@object).to receive(:upload_file).with(
452
462
  anything,
453
- content_type: "image/png",
463
+ { content_type: "image/png" },
454
464
  ).and_return(true)
455
465
  @dummy.avatar.reprocess!
456
466
  end
@@ -458,7 +468,7 @@ describe Paperclip::Storage::S3 do
458
468
  it "doesn't upload original" do
459
469
  expect(@object).to receive(:upload_file).with(
460
470
  anything,
461
- content_type: "image/png",
471
+ { content_type: "image/png" },
462
472
  ).and_return(true)
463
473
  @dummy.avatar.reprocess!
464
474
  end
@@ -500,14 +510,18 @@ describe Paperclip::Storage::S3 do
500
510
  it "uploads original" do
501
511
  expect(@object).to receive(:upload_file).with(
502
512
  anything,
503
- content_type: "image/png",
504
- acl: :"public-read"
513
+ {
514
+ content_type: "image/png",
515
+ acl: :"public-read",
516
+ },
505
517
  ).and_return(true)
506
518
  @dummy.avatar.reprocess!
507
519
  expect(@object).to receive(:upload_file).with(
508
520
  anything,
509
- content_type: "image/png",
510
- acl: :"public-read"
521
+ {
522
+ content_type: "image/png",
523
+ acl: :"public-read",
524
+ },
511
525
  ).and_return(true)
512
526
  @dummy.avatar.reprocess!
513
527
  end
@@ -515,8 +529,10 @@ describe Paperclip::Storage::S3 do
515
529
  it "doesn't upload original" do
516
530
  expect(@object).to receive(:upload_file).with(
517
531
  anything,
518
- content_type: "image/png",
519
- acl: :"public-read"
532
+ {
533
+ content_type: "image/png",
534
+ acl: :"public-read",
535
+ },
520
536
  ).and_return(true)
521
537
  @dummy.avatar.reprocess!
522
538
  end
@@ -725,7 +741,7 @@ describe Paperclip::Storage::S3 do
725
741
  object = double
726
742
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
727
743
 
728
- expect(object).to receive(:presigned_url).with(:get, expires_in: 3600)
744
+ expect(object).to receive(:presigned_url).with(:get, { expires_in: 3600 })
729
745
  @dummy.avatar.expiring_url
730
746
  end
731
747
  end
@@ -740,8 +756,13 @@ describe Paperclip::Storage::S3 do
740
756
  object = double
741
757
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
742
758
  expect(object).to receive(:presigned_url).
743
- with(:get, expires_in: 3600,
744
- response_content_disposition: "inline")
759
+ with(
760
+ :get,
761
+ {
762
+ expires_in: 3600,
763
+ response_content_disposition: "inline",
764
+ },
765
+ )
745
766
  @dummy.avatar.expiring_url
746
767
  end
747
768
  end
@@ -763,7 +784,13 @@ describe Paperclip::Storage::S3 do
763
784
  object = double
764
785
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
765
786
  expect(object).to receive(:presigned_url).
766
- with(:get, expires_in: 3600, response_content_type: "image/png")
787
+ with(
788
+ :get,
789
+ {
790
+ expires_in: 3600,
791
+ response_content_type: "image/png",
792
+ },
793
+ )
767
794
  @dummy.avatar.expiring_url
768
795
  end
769
796
  end
@@ -810,14 +837,14 @@ describe Paperclip::Storage::S3 do
810
837
  it "generates a url for the thumb" do
811
838
  object = double
812
839
  allow(@dummy.avatar).to receive(:s3_object).with(:thumb).and_return(object)
813
- expect(object).to receive(:presigned_url).with(:get, expires_in: 1800)
840
+ expect(object).to receive(:presigned_url).with(:get, { expires_in: 1800 })
814
841
  @dummy.avatar.expiring_url(1800, :thumb)
815
842
  end
816
843
 
817
844
  it "generates a url for the default style" do
818
845
  object = double
819
846
  allow(@dummy.avatar).to receive(:s3_object).with(:original).and_return(object)
820
- expect(object).to receive(:presigned_url).with(:get, expires_in: 1800)
847
+ expect(object).to receive(:presigned_url).with(:get, { expires_in: 1800 })
821
848
  @dummy.avatar.expiring_url(1800)
822
849
  end
823
850
  end
@@ -962,7 +989,7 @@ describe Paperclip::Storage::S3 do
962
989
  object = double
963
990
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
964
991
  expect(object).to receive(:upload_file).
965
- with(anything, content_type: "image/png", acl: :"public-read")
992
+ with(anything, { content_type: "image/png", acl: :"public-read" })
966
993
  @dummy.save
967
994
  end
968
995
 
@@ -1122,10 +1149,14 @@ describe Paperclip::Storage::S3 do
1122
1149
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1123
1150
 
1124
1151
  expect(object).to receive(:upload_file).
1125
- with(anything,
1126
- content_type: "image/png",
1127
- acl: :"public-read",
1128
- cache_control: "max-age=31557600")
1152
+ with(
1153
+ anything,
1154
+ {
1155
+ content_type: "image/png",
1156
+ acl: :"public-read",
1157
+ cache_control: "max-age=31557600",
1158
+ },
1159
+ )
1129
1160
  @dummy.save
1130
1161
  end
1131
1162
 
@@ -1163,10 +1194,14 @@ describe Paperclip::Storage::S3 do
1163
1194
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1164
1195
 
1165
1196
  expect(object).to receive(:upload_file).
1166
- with(anything,
1197
+ with(
1198
+ anything,
1199
+ {
1167
1200
  content_type: "image/png",
1168
1201
  acl: :"public-read",
1169
- metadata: { "color" => "red" })
1202
+ metadata: { "color" => "red" },
1203
+ },
1204
+ )
1170
1205
  @dummy.save
1171
1206
  end
1172
1207
 
@@ -1204,10 +1239,14 @@ describe Paperclip::Storage::S3 do
1204
1239
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1205
1240
 
1206
1241
  expect(object).to receive(:upload_file).
1207
- with(anything,
1242
+ with(
1243
+ anything,
1244
+ {
1208
1245
  content_type: "image/png",
1209
1246
  acl: :"public-read",
1210
- metadata: { "color" => "red" })
1247
+ metadata: { "color" => "red" },
1248
+ },
1249
+ )
1211
1250
  @dummy.save
1212
1251
  end
1213
1252
 
@@ -1246,10 +1285,14 @@ describe Paperclip::Storage::S3 do
1246
1285
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1247
1286
 
1248
1287
  expect(object).to receive(:upload_file).
1249
- with(anything,
1288
+ with(
1289
+ anything,
1290
+ {
1250
1291
  content_type: "image/png",
1251
1292
  acl: :"public-read",
1252
- storage_class: "reduced_redundancy")
1293
+ storage_class: "reduced_redundancy",
1294
+ },
1295
+ )
1253
1296
  @dummy.save
1254
1297
  end
1255
1298
 
@@ -1342,9 +1385,14 @@ describe Paperclip::Storage::S3 do
1342
1385
  allow(@dummy.avatar).to receive(:s3_object).with(style).and_return(object)
1343
1386
 
1344
1387
  expect(object).to receive(:upload_file).
1345
- with(anything, content_type: "image/png",
1346
- acl: :"public-read",
1347
- storage_class: :reduced_redundancy)
1388
+ with(
1389
+ anything,
1390
+ {
1391
+ content_type: "image/png",
1392
+ acl: :"public-read",
1393
+ storage_class: :reduced_redundancy,
1394
+ },
1395
+ )
1348
1396
  end
1349
1397
  @dummy.save
1350
1398
  end
@@ -1387,7 +1435,7 @@ describe Paperclip::Storage::S3 do
1387
1435
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1388
1436
 
1389
1437
  expect(object).to receive(:upload_file).
1390
- with(anything, content_type: "image/png", acl: :"public-read")
1438
+ with(anything, { content_type: "image/png", acl: :"public-read" })
1391
1439
  @dummy.save
1392
1440
  end
1393
1441
 
@@ -1426,9 +1474,14 @@ describe Paperclip::Storage::S3 do
1426
1474
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1427
1475
 
1428
1476
  expect(object).to receive(:upload_file).
1429
- with(anything, content_type: "image/png",
1430
- acl: :"public-read",
1431
- server_side_encryption: "AES256")
1477
+ with(
1478
+ anything,
1479
+ {
1480
+ content_type: "image/png",
1481
+ acl: :"public-read",
1482
+ server_side_encryption: "AES256",
1483
+ },
1484
+ )
1432
1485
  @dummy.save
1433
1486
  end
1434
1487
 
@@ -1466,10 +1519,14 @@ describe Paperclip::Storage::S3 do
1466
1519
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1467
1520
 
1468
1521
  expect(object).to receive(:upload_file).
1469
- with(anything,
1470
- content_type: "image/png",
1471
- acl: :"public-read",
1472
- storage_class: :reduced_redundancy)
1522
+ with(
1523
+ anything,
1524
+ {
1525
+ content_type: "image/png",
1526
+ acl: :"public-read",
1527
+ storage_class: :reduced_redundancy,
1528
+ },
1529
+ )
1473
1530
  @dummy.save
1474
1531
  end
1475
1532
 
@@ -1613,7 +1670,7 @@ describe Paperclip::Storage::S3 do
1613
1670
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1614
1671
 
1615
1672
  expect(object).to receive(:upload_file).
1616
- with(anything, content_type: "image/png", acl: :"public-read")
1673
+ with(anything, { content_type: "image/png", acl: :"public-read" })
1617
1674
  @dummy.save
1618
1675
  end
1619
1676
 
@@ -1651,7 +1708,7 @@ describe Paperclip::Storage::S3 do
1651
1708
  allow(@dummy.avatar).to receive(:s3_object).and_return(object)
1652
1709
 
1653
1710
  expect(object).to receive(:upload_file).
1654
- with(anything, content_type: "image/png", acl: :private)
1711
+ with(anything, { content_type: "image/png", acl: :private })
1655
1712
  @dummy.save
1656
1713
  end
1657
1714
 
@@ -1697,8 +1754,10 @@ describe Paperclip::Storage::S3 do
1697
1754
 
1698
1755
  expect(object).to receive(:upload_file).
1699
1756
  with(anything,
1700
- content_type: "image/png",
1701
- acl: style == :thumb ? :public_read : :private)
1757
+ {
1758
+ content_type: "image/png",
1759
+ acl: style == :thumb ? :public_read : :private
1760
+ })
1702
1761
  end
1703
1762
  @dummy.save
1704
1763
  end
@@ -1767,10 +1826,14 @@ describe Paperclip::Storage::S3 do
1767
1826
  allow(@dummy.avatar).to receive(:s3_object).with(style).and_return(object)
1768
1827
 
1769
1828
  expect(object).to receive(:upload_file).
1770
- with(anything,
1771
- content_type: "image/png",
1772
- acl: :"public-read",
1773
- content_disposition: 'attachment; filename="Custom Avatar Name.png"')
1829
+ with(
1830
+ anything,
1831
+ {
1832
+ content_type: "image/png",
1833
+ acl: :"public-read",
1834
+ content_disposition: 'attachment; filename="Custom Avatar Name.png"',
1835
+ },
1836
+ )
1774
1837
  end
1775
1838
  @dummy.save
1776
1839
  end
data/spec/spec_helper.rb CHANGED
@@ -21,6 +21,7 @@ FIXTURES_DIR = File.join(File.dirname(__FILE__), "fixtures")
21
21
  config = YAML::safe_load(IO.read(File.dirname(__FILE__) + "/database.yml"))
22
22
  ActiveRecord::Base.logger = Logger.new(File.dirname(__FILE__) + "/debug.log")
23
23
  ActiveRecord::Base.establish_connection(config["test"])
24
+ ActiveRecord::Migration.verbose = false
24
25
  if ActiveRecord::VERSION::STRING >= "4.2" &&
25
26
  ActiveRecord::VERSION::STRING < "5.0"
26
27
  ActiveRecord::Base.raise_in_transactional_callbacks = true
@@ -28,15 +28,15 @@ module ModelReconstruction
28
28
 
29
29
  def reset_table(_table_name, &block)
30
30
  block ||= lambda { |_table| true }
31
- ActiveRecord::Base.connection.create_table :dummies, **{ force: true }, &block
31
+ ActiveRecord::Migration.create_table :dummies, **{ force: true }, &block
32
32
  end
33
33
 
34
34
  def modify_table(&block)
35
- ActiveRecord::Base.connection.change_table :dummies, &block
35
+ ActiveRecord::Migration.change_table :dummies, &block
36
36
  end
37
37
 
38
38
  def rebuild_model(options = {})
39
- ActiveRecord::Base.connection.create_table :dummies, force: true do |table|
39
+ ActiveRecord::Migration.create_table :dummies, force: true do |table|
40
40
  table.column :title, :string
41
41
  table.column :other, :string
42
42
  table.column :avatar_file_name, :string
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kt-paperclip
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.2.0
4
+ version: 7.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Surendra Singhi
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-05-30 00:00:00.000000000 Z
11
+ date: 2024-01-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -70,16 +70,22 @@ dependencies:
70
70
  name: terrapin
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
- - - "~>"
73
+ - - ">="
74
74
  - !ruby/object:Gem::Version
75
75
  version: 0.6.0
76
+ - - "<"
77
+ - !ruby/object:Gem::Version
78
+ version: '2.0'
76
79
  type: :runtime
77
80
  prerelease: false
78
81
  version_requirements: !ruby/object:Gem::Requirement
79
82
  requirements:
80
- - - "~>"
83
+ - - ">="
81
84
  - !ruby/object:Gem::Version
82
85
  version: 0.6.0
86
+ - - "<"
87
+ - !ruby/object:Gem::Version
88
+ version: '2.0'
83
89
  - !ruby/object:Gem::Dependency
84
90
  name: activerecord
85
91
  requirement: !ruby/object:Gem::Requirement
@@ -428,6 +434,7 @@ files:
428
434
  - lib/paperclip/io_adapters/uploaded_file_adapter.rb
429
435
  - lib/paperclip/io_adapters/uri_adapter.rb
430
436
  - lib/paperclip/locales/en.yml
437
+ - lib/paperclip/locales/gd.yml
431
438
  - lib/paperclip/logger.rb
432
439
  - lib/paperclip/matchers.rb
433
440
  - lib/paperclip/matchers/have_attached_file_matcher.rb