kt-paperclip 7.2.0 → 7.2.2
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 +4 -4
- data/NEWS +9 -1
- data/lib/paperclip/geometry_detector_factory.rb +1 -1
- data/lib/paperclip/glue.rb +3 -2
- data/lib/paperclip/locales/gd.yml +20 -0
- data/lib/paperclip/media_type_spoof_detector.rb +2 -1
- data/lib/paperclip/schema.rb +1 -1
- data/lib/paperclip/validators/attachment_size_validator.rb +2 -2
- data/lib/paperclip/version.rb +1 -1
- data/paperclip.gemspec +1 -1
- data/spec/paperclip/attachment_spec.rb +6 -6
- data/spec/paperclip/geometry_detector_spec.rb +9 -0
- data/spec/paperclip/geometry_spec.rb +16 -4
- data/spec/paperclip/glue_spec.rb +21 -0
- data/spec/paperclip/io_adapters/uri_adapter_spec.rb +1 -1
- data/spec/paperclip/media_type_spoof_detector_spec.rb +10 -4
- data/spec/paperclip/paperclip_missing_attachment_styles_spec.rb +1 -1
- data/spec/paperclip/paperclip_spec.rb +1 -1
- data/spec/paperclip/schema_spec.rb +18 -18
- data/spec/paperclip/storage/s3_spec.rb +113 -50
- data/spec/spec_helper.rb +1 -0
- data/spec/support/model_reconstruction.rb +3 -3
- metadata +11 -4
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a7308352f1d792e5e861ba828d1eb3994b5956fc51df06a4cbfedfe134ce105d
|
|
4
|
+
data.tar.gz: be4d4161c411a18edaf2a92b5a48d746d87d01f3d5a6e4fe5fecc20f87ad42a4
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: e202f7d5a1a9466f69118e485c5c747f10942644337940b6141ffb41904118353cab09858fbdabf4e68ba87d9e5199109a1a1525d7eaeea4a1601ba9e384459f
|
|
7
|
+
data.tar.gz: 20fb1d6bd39a2d21a5b2f627d5ab92aba95ae88d523319de7b06e5e0983c281e76ae218a6bccf64fdc16362652cb1cc1251eab7fdacc14b6428b8dbafd2bdc81
|
data/NEWS
CHANGED
|
@@ -1,5 +1,13 @@
|
|
|
1
1
|
[UNRELEASED]
|
|
2
|
-
|
|
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
|
data/lib/paperclip/glue.rb
CHANGED
|
@@ -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
|
-
|
|
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]
|
|
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
|
data/lib/paperclip/schema.rb
CHANGED
|
@@ -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::
|
|
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 =
|
|
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|
|
data/lib/paperclip/version.rb
CHANGED
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", "
|
|
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::
|
|
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::
|
|
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::
|
|
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::
|
|
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::
|
|
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::
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
data/spec/paperclip/glue_spec.rb
CHANGED
|
@@ -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
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
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::
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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(
|
|
399
|
-
|
|
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(
|
|
402
|
-
|
|
403
|
-
|
|
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
|
-
|
|
504
|
-
|
|
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
|
-
|
|
510
|
-
|
|
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
|
-
|
|
519
|
-
|
|
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(
|
|
744
|
-
|
|
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(
|
|
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(
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
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(
|
|
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(
|
|
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(
|
|
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(
|
|
1346
|
-
|
|
1347
|
-
|
|
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(
|
|
1430
|
-
|
|
1431
|
-
|
|
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(
|
|
1470
|
-
|
|
1471
|
-
|
|
1472
|
-
|
|
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
|
-
|
|
1701
|
-
|
|
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(
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
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::
|
|
31
|
+
ActiveRecord::Migration.create_table :dummies, **{ force: true }, &block
|
|
32
32
|
end
|
|
33
33
|
|
|
34
34
|
def modify_table(&block)
|
|
35
|
-
ActiveRecord::
|
|
35
|
+
ActiveRecord::Migration.change_table :dummies, &block
|
|
36
36
|
end
|
|
37
37
|
|
|
38
38
|
def rebuild_model(options = {})
|
|
39
|
-
ActiveRecord::
|
|
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.
|
|
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:
|
|
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
|