paperclip 6.0.0 → 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/.github/issue_template.md +3 -0
- data/MIGRATING-ES.md +317 -0
- data/MIGRATING.md +375 -0
- data/NEWS +17 -0
- data/README.md +26 -4
- data/UPGRADING +3 -3
- data/features/step_definitions/attachment_steps.rb +10 -10
- data/lib/paperclip.rb +1 -0
- data/lib/paperclip/attachment.rb +19 -6
- data/lib/paperclip/filename_cleaner.rb +0 -1
- data/lib/paperclip/geometry_detector_factory.rb +1 -1
- data/lib/paperclip/interpolations.rb +6 -1
- data/lib/paperclip/io_adapters/abstract_adapter.rb +11 -10
- data/lib/paperclip/io_adapters/attachment_adapter.rb +7 -1
- data/lib/paperclip/io_adapters/http_url_proxy_adapter.rb +2 -1
- data/lib/paperclip/io_adapters/uri_adapter.rb +8 -6
- data/lib/paperclip/logger.rb +1 -1
- data/lib/paperclip/media_type_spoof_detector.rb +8 -5
- data/lib/paperclip/processor.rb +10 -2
- data/lib/paperclip/schema.rb +1 -1
- data/lib/paperclip/storage/fog.rb +1 -1
- data/lib/paperclip/style.rb +0 -1
- data/lib/paperclip/thumbnail.rb +4 -1
- data/lib/paperclip/validators/media_type_spoof_detection_validator.rb +4 -0
- data/lib/paperclip/version.rb +1 -1
- data/spec/paperclip/attachment_processing_spec.rb +0 -1
- data/spec/paperclip/attachment_spec.rb +17 -2
- data/spec/paperclip/filename_cleaner_spec.rb +0 -1
- data/spec/paperclip/integration_spec.rb +41 -5
- data/spec/paperclip/interpolations_spec.rb +9 -0
- data/spec/paperclip/io_adapters/abstract_adapter_spec.rb +28 -0
- data/spec/paperclip/io_adapters/http_url_proxy_adapter_spec.rb +33 -16
- data/spec/paperclip/io_adapters/uri_adapter_spec.rb +56 -8
- data/spec/paperclip/matchers/validate_attachment_size_matcher_spec.rb +1 -1
- data/spec/paperclip/media_type_spoof_detector_spec.rb +26 -0
- data/spec/paperclip/schema_spec.rb +46 -46
- data/spec/paperclip/style_spec.rb +0 -1
- data/spec/paperclip/thumbnail_spec.rb +5 -3
- data/spec/paperclip/url_generator_spec.rb +0 -1
- data/spec/support/model_reconstruction.rb +2 -2
- metadata +9 -6
@@ -1,4 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require 'spec_helper'
|
3
2
|
|
4
3
|
describe Paperclip::Attachment do
|
@@ -54,6 +53,22 @@ describe Paperclip::Attachment do
|
|
54
53
|
expect(dummy.avatar.path(:original)).to exist
|
55
54
|
end
|
56
55
|
|
56
|
+
it "reprocess works with virtual content_type attribute" do
|
57
|
+
rebuild_class styles: { small: "100x>" }
|
58
|
+
modify_table { |t| t.remove :avatar_content_type }
|
59
|
+
Dummy.send :attr_accessor, :avatar_content_type
|
60
|
+
Dummy.validates_attachment_content_type(
|
61
|
+
:avatar,
|
62
|
+
content_type: %w(image/jpeg image/png)
|
63
|
+
)
|
64
|
+
Dummy.create!(avatar: File.new(fixture_file("50x50.png"), "rb"))
|
65
|
+
|
66
|
+
dummy = Dummy.first
|
67
|
+
dummy.avatar.reprocess!(:small)
|
68
|
+
|
69
|
+
expect(dummy.avatar.path(:small)).to exist
|
70
|
+
end
|
71
|
+
|
57
72
|
context "having a not empty hash as a default option" do
|
58
73
|
before do
|
59
74
|
@old_default_options = Paperclip::Attachment.default_options.dup
|
@@ -1401,7 +1416,7 @@ describe Paperclip::Attachment do
|
|
1401
1416
|
|
1402
1417
|
context "and avatar_file_size column" do
|
1403
1418
|
before do
|
1404
|
-
ActiveRecord::Base.connection.add_column :dummies, :avatar_file_size, :
|
1419
|
+
ActiveRecord::Base.connection.add_column :dummies, :avatar_file_size, :bigint
|
1405
1420
|
rebuild_class
|
1406
1421
|
@dummy = Dummy.new
|
1407
1422
|
end
|
@@ -1,16 +1,33 @@
|
|
1
|
-
# encoding: utf-8
|
2
1
|
require 'spec_helper'
|
3
2
|
require 'open-uri'
|
4
3
|
|
5
4
|
describe 'Paperclip' do
|
5
|
+
around do |example|
|
6
|
+
files_before = ObjectSpace.each_object(Tempfile).select do |file|
|
7
|
+
file.path && File.file?(file.path)
|
8
|
+
end
|
9
|
+
|
10
|
+
example.run
|
11
|
+
|
12
|
+
files_after = ObjectSpace.each_object(Tempfile).select do |file|
|
13
|
+
file.path && File.file?(file.path)
|
14
|
+
end
|
15
|
+
|
16
|
+
diff = files_after - files_before
|
17
|
+
expect(diff).to eq([]), "Leaked tempfiles: #{diff.inspect}"
|
18
|
+
end
|
19
|
+
|
6
20
|
context "Many models at once" do
|
7
21
|
before do
|
8
22
|
rebuild_model
|
9
23
|
@file = File.new(fixture_file("5k.png"), 'rb')
|
10
24
|
# Deals with `Too many open files` error
|
11
|
-
|
12
|
-
Dummy.import
|
13
|
-
|
25
|
+
dummies = Array.new(300) { Dummy.new avatar: @file }
|
26
|
+
Dummy.import dummies
|
27
|
+
# save attachment instances to run after hooks including tempfile cleanup
|
28
|
+
# since activerecord-import does not use our usually hooked-in hooks
|
29
|
+
# (such as after_save)
|
30
|
+
dummies.each { |dummy| dummy.avatar.save }
|
14
31
|
end
|
15
32
|
|
16
33
|
after { @file.close }
|
@@ -135,6 +152,14 @@ describe 'Paperclip' do
|
|
135
152
|
end
|
136
153
|
|
137
154
|
it "allows us to selectively create each thumbnail" do
|
155
|
+
skip <<-EXPLANATION
|
156
|
+
#reprocess! calls #assign which calls Paperclip.io_adapters.for
|
157
|
+
which creates the tempfile. #assign then calls #post_process_file which
|
158
|
+
calls MediaTypeSpoofDetectionValidator#validate_each which calls
|
159
|
+
Paperclip.io_adapters.for, which creates another tempfile. That first
|
160
|
+
tempfile is the one that leaks.
|
161
|
+
EXPLANATION
|
162
|
+
|
138
163
|
assert_file_not_exists(@thumb_small_path)
|
139
164
|
assert_file_not_exists(@thumb_large_path)
|
140
165
|
|
@@ -159,7 +184,11 @@ describe 'Paperclip' do
|
|
159
184
|
assert_not_equal File.size(@file.path), @dummy.avatar.size
|
160
185
|
end
|
161
186
|
|
162
|
-
after
|
187
|
+
after do
|
188
|
+
@file.close
|
189
|
+
# save attachment instance to run after hooks (including tempfile cleanup)
|
190
|
+
@dummy.avatar.save
|
191
|
+
end
|
163
192
|
end
|
164
193
|
|
165
194
|
context "A model with attachments scoped under an id" do
|
@@ -347,6 +376,8 @@ describe 'Paperclip' do
|
|
347
376
|
it "is not ok with bad files" do
|
348
377
|
@dummy.avatar = @bad_file
|
349
378
|
assert ! @dummy.valid?
|
379
|
+
# save attachment instance to run after hooks (including tempfile cleanup)
|
380
|
+
@dummy.avatar.save
|
350
381
|
end
|
351
382
|
|
352
383
|
it "knows the difference between good files, bad files, and not files when validating" do
|
@@ -354,8 +385,13 @@ describe 'Paperclip' do
|
|
354
385
|
@d2 = Dummy.find(@dummy.id)
|
355
386
|
@d2.avatar = @file
|
356
387
|
assert @d2.valid?, @d2.errors.full_messages.inspect
|
388
|
+
# save attachment instance to run after hooks (including tempfile cleanup)
|
389
|
+
@d2.avatar.save
|
390
|
+
|
357
391
|
@d2.avatar = @bad_file
|
358
392
|
assert ! @d2.valid?
|
393
|
+
# save attachment instance to run after hooks (including tempfile cleanup)
|
394
|
+
@d2.avatar.save
|
359
395
|
end
|
360
396
|
|
361
397
|
it "is able to reload without saving and not have the file disappear" do
|
@@ -139,6 +139,15 @@ describe Paperclip::Interpolations do
|
|
139
139
|
assert_equal "000/000/023", Paperclip::Interpolations.id_partition(attachment, :style)
|
140
140
|
end
|
141
141
|
|
142
|
+
it "returns the partitioned id when the id is above 999_999_999" do
|
143
|
+
attachment = mock
|
144
|
+
attachment.expects(:id).
|
145
|
+
returns(Paperclip::Interpolations::ID_PARTITION_LIMIT)
|
146
|
+
attachment.expects(:instance).returns(attachment)
|
147
|
+
assert_equal "001/000/000/000",
|
148
|
+
Paperclip::Interpolations.id_partition(attachment, :style)
|
149
|
+
end
|
150
|
+
|
142
151
|
it "returns the partitioned id of the attachment when the id is a string" do
|
143
152
|
attachment = mock
|
144
153
|
attachment.expects(:id).returns("32fnj23oio2f")
|
@@ -93,6 +93,34 @@ describe Paperclip::AbstractAdapter do
|
|
93
93
|
end
|
94
94
|
end
|
95
95
|
|
96
|
+
context "#copy_to_tempfile" do
|
97
|
+
around do |example|
|
98
|
+
FileUtils.module_eval do
|
99
|
+
class << self
|
100
|
+
alias paperclip_ln ln
|
101
|
+
|
102
|
+
def ln(*)
|
103
|
+
raise Errno::EXDEV
|
104
|
+
end
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
108
|
+
example.run
|
109
|
+
|
110
|
+
FileUtils.module_eval do
|
111
|
+
class << self
|
112
|
+
alias ln paperclip_ln
|
113
|
+
undef paperclip_ln
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
it "should return a readable file even when linking fails" do
|
119
|
+
src = open(fixture_file("5k.png"), "rb")
|
120
|
+
expect(subject.send(:copy_to_tempfile, src).read).to eq src.read
|
121
|
+
end
|
122
|
+
end
|
123
|
+
|
96
124
|
context "#original_filename=" do
|
97
125
|
it "should not fail with a nil original filename" do
|
98
126
|
expect { subject.original_filename = nil }.not_to raise_error
|
@@ -3,10 +3,9 @@ require 'spec_helper'
|
|
3
3
|
describe Paperclip::HttpUrlProxyAdapter do
|
4
4
|
before do
|
5
5
|
@open_return = StringIO.new("xxx")
|
6
|
-
@open_return.stubs(:
|
7
|
-
|
8
|
-
|
9
|
-
stubs(:download_content).returns(@open_return)
|
6
|
+
@open_return.stubs(:meta).returns("content-type" => "image/png")
|
7
|
+
Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).
|
8
|
+
returns(@open_return)
|
10
9
|
Paperclip::HttpUrlProxyAdapter.register
|
11
10
|
end
|
12
11
|
|
@@ -69,17 +68,18 @@ describe Paperclip::HttpUrlProxyAdapter do
|
|
69
68
|
end
|
70
69
|
|
71
70
|
context "a url with query params" do
|
72
|
-
|
73
|
-
@url = "https://github.com/thoughtbot/paperclip?file=test"
|
74
|
-
@subject = Paperclip.io_adapters.for(@url)
|
75
|
-
end
|
71
|
+
subject { Paperclip.io_adapters.for(url) }
|
76
72
|
|
77
|
-
after
|
78
|
-
|
79
|
-
|
73
|
+
after { subject.close }
|
74
|
+
|
75
|
+
let(:url) { "https://github.com/thoughtbot/paperclip?file=test" }
|
80
76
|
|
81
77
|
it "returns a file name" do
|
82
|
-
assert_equal "paperclip",
|
78
|
+
assert_equal "paperclip", subject.original_filename
|
79
|
+
end
|
80
|
+
|
81
|
+
it "preserves params" do
|
82
|
+
assert_equal url, subject.instance_variable_get(:@target).to_s
|
83
83
|
end
|
84
84
|
end
|
85
85
|
|
@@ -107,15 +107,32 @@ describe Paperclip::HttpUrlProxyAdapter do
|
|
107
107
|
end
|
108
108
|
|
109
109
|
context "a url with special characters in the filename" do
|
110
|
-
|
110
|
+
before do
|
111
111
|
Paperclip::HttpUrlProxyAdapter.any_instance.stubs(:download_content).
|
112
112
|
returns(@open_return)
|
113
|
-
|
114
|
-
|
115
|
-
|
113
|
+
end
|
114
|
+
|
115
|
+
let(:filename) do
|
116
|
+
"paperclip-%C3%B6%C3%A4%C3%BC%E5%AD%97%C2%B4%C2%BD%E2%99%A5"\
|
116
117
|
"%C3%98%C2%B2%C3%88.png"
|
118
|
+
end
|
119
|
+
let(:url) { "https://github.com/thoughtbot/paperclip-öäü字´½♥زÈ.png" }
|
117
120
|
|
121
|
+
subject { Paperclip.io_adapters.for(url) }
|
122
|
+
|
123
|
+
it "returns a encoded filename" do
|
118
124
|
assert_equal filename, subject.original_filename
|
119
125
|
end
|
126
|
+
|
127
|
+
context "when already URI encoded" do
|
128
|
+
let(:url) do
|
129
|
+
"https://github.com/thoughtbot/paperclip-%C3%B6%C3%A4%C3%BC%E5%AD%97"\
|
130
|
+
"%C2%B4%C2%BD%E2%99%A5%C3%98%C2%B2%C3%88.png"
|
131
|
+
end
|
132
|
+
|
133
|
+
it "returns a encoded filename" do
|
134
|
+
assert_equal filename, subject.original_filename
|
135
|
+
end
|
136
|
+
end
|
120
137
|
end
|
121
138
|
end
|
@@ -16,6 +16,8 @@ describe Paperclip::UriAdapter do
|
|
16
16
|
end
|
17
17
|
|
18
18
|
context "a new instance" do
|
19
|
+
let(:meta) { { "content-type" => "image/png" } }
|
20
|
+
|
19
21
|
before do
|
20
22
|
Paperclip::UriAdapter.any_instance.
|
21
23
|
stubs(:download_content).returns(@open_return)
|
@@ -62,7 +64,7 @@ describe Paperclip::UriAdapter do
|
|
62
64
|
assert_equal 'image/png', @subject.content_type
|
63
65
|
end
|
64
66
|
|
65
|
-
it
|
67
|
+
it "accepts an original_filename" do
|
66
68
|
@subject.original_filename = 'image.png'
|
67
69
|
assert_equal 'image.png', @subject.original_filename
|
68
70
|
end
|
@@ -71,6 +73,7 @@ describe Paperclip::UriAdapter do
|
|
71
73
|
|
72
74
|
context "a directory index url" do
|
73
75
|
let(:content_type) { "text/html" }
|
76
|
+
let(:meta) { { "content-type" => "text/html" } }
|
74
77
|
|
75
78
|
before do
|
76
79
|
Paperclip::UriAdapter.any_instance.
|
@@ -105,23 +108,68 @@ describe Paperclip::UriAdapter do
|
|
105
108
|
|
106
109
|
context "a url with content disposition headers" do
|
107
110
|
let(:file_name) { "test_document.pdf" }
|
108
|
-
let(:
|
109
|
-
{
|
110
|
-
"content-disposition" => "attachment; filename=\"#{file_name}\";",
|
111
|
-
}
|
112
|
-
end
|
111
|
+
let(:filename_from_path) { "paperclip" }
|
113
112
|
|
114
113
|
before do
|
115
114
|
Paperclip::UriAdapter.any_instance.
|
116
115
|
stubs(:download_content).returns(@open_return)
|
117
116
|
|
118
|
-
@uri = URI.parse(
|
117
|
+
@uri = URI.parse(
|
118
|
+
"https://github.com/thoughtbot/#{filename_from_path}?file=test")
|
119
|
+
end
|
120
|
+
|
121
|
+
it "returns file name from path" do
|
122
|
+
meta["content-disposition"] = "inline;"
|
123
|
+
|
119
124
|
@subject = Paperclip.io_adapters.for(@uri)
|
125
|
+
|
126
|
+
assert_equal filename_from_path, @subject.original_filename
|
120
127
|
end
|
121
128
|
|
122
|
-
it "returns a file name" do
|
129
|
+
it "returns a file name enclosed in double quotes" do
|
130
|
+
file_name = "john's test document.pdf"
|
131
|
+
meta["content-disposition"] = "attachment; filename=\"#{file_name}\";"
|
132
|
+
|
133
|
+
@subject = Paperclip.io_adapters.for(@uri)
|
134
|
+
|
135
|
+
assert_equal file_name, @subject.original_filename
|
136
|
+
end
|
137
|
+
|
138
|
+
it "returns a file name not enclosed in double quotes" do
|
139
|
+
meta["content-disposition"] = "ATTACHMENT; FILENAME=#{file_name};"
|
140
|
+
|
141
|
+
@subject = Paperclip.io_adapters.for(@uri)
|
142
|
+
|
143
|
+
assert_equal file_name, @subject.original_filename
|
144
|
+
end
|
145
|
+
|
146
|
+
it "does not crash when an empty filename is given" do
|
147
|
+
meta["content-disposition"] = "ATTACHMENT; FILENAME=\"\";"
|
148
|
+
|
149
|
+
@subject = Paperclip.io_adapters.for(@uri)
|
150
|
+
|
151
|
+
assert_equal "", @subject.original_filename
|
152
|
+
end
|
153
|
+
|
154
|
+
it "returns a file name ignoring RFC 5987 encoding" do
|
155
|
+
meta["content-disposition"] =
|
156
|
+
"attachment; filename=#{file_name}; filename* = utf-8''%e2%82%ac%20rates"
|
157
|
+
|
158
|
+
@subject = Paperclip.io_adapters.for(@uri)
|
159
|
+
|
123
160
|
assert_equal file_name, @subject.original_filename
|
124
161
|
end
|
162
|
+
|
163
|
+
context "when file name has consecutive periods" do
|
164
|
+
let(:file_name) { "test_document..pdf" }
|
165
|
+
|
166
|
+
it "returns a file name" do
|
167
|
+
@uri = URI.parse(
|
168
|
+
"https://github.com/thoughtbot/#{file_name}?file=test")
|
169
|
+
@subject = Paperclip.io_adapters.for(@uri)
|
170
|
+
assert_equal file_name, @subject.original_filename
|
171
|
+
end
|
172
|
+
end
|
125
173
|
end
|
126
174
|
|
127
175
|
context "a url with restricted characters in the filename" do
|
@@ -7,7 +7,7 @@ describe Paperclip::Shoulda::Matchers::ValidateAttachmentSizeMatcher do
|
|
7
7
|
before do
|
8
8
|
reset_table("dummies") do |d|
|
9
9
|
d.string :avatar_file_name
|
10
|
-
d.
|
10
|
+
d.bigint :avatar_file_size
|
11
11
|
end
|
12
12
|
reset_class "Dummy"
|
13
13
|
Dummy.do_not_validate_attachment_file_type :avatar
|
@@ -58,6 +58,32 @@ describe Paperclip::MediaTypeSpoofDetector do
|
|
58
58
|
end
|
59
59
|
end
|
60
60
|
|
61
|
+
context "GIF file named without extension, but we're told GIF" do
|
62
|
+
let(:file) { File.open(fixture_file("animated")) }
|
63
|
+
let(:spoofed?) do
|
64
|
+
Paperclip::MediaTypeSpoofDetector.
|
65
|
+
using(file, "animated", "image/gif").
|
66
|
+
spoofed?
|
67
|
+
end
|
68
|
+
|
69
|
+
it "accepts the file" do
|
70
|
+
assert !spoofed?
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "GIF file named without extension, but we're told HTML" do
|
75
|
+
let(:file) { File.open(fixture_file("animated")) }
|
76
|
+
let(:spoofed?) do
|
77
|
+
Paperclip::MediaTypeSpoofDetector.
|
78
|
+
using(file, "animated", "text/html").
|
79
|
+
spoofed?
|
80
|
+
end
|
81
|
+
|
82
|
+
it "rejects the file" do
|
83
|
+
assert spoofed?
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
61
87
|
it "does not reject if content_type is empty but otherwise checks out" do
|
62
88
|
file = File.open(fixture_file("empty.html"))
|
63
89
|
assert ! Paperclip::MediaTypeSpoofDetector.using(file, "empty.html", "").spoofed?
|
@@ -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
|
|