uploadcolumn 0.3.0
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.
- data/.gitignore +3 -0
- data/CHANGELOG +123 -0
- data/LICENSE +22 -0
- data/README.rdoc +206 -0
- data/Rakefile +90 -0
- data/VERSION +1 -0
- data/init.rb +15 -0
- data/lib/upload_column/active_record_extension.rb +154 -0
- data/lib/upload_column/configuration.rb +49 -0
- data/lib/upload_column/magic_columns.rb +50 -0
- data/lib/upload_column/manipulators/image_science.rb +86 -0
- data/lib/upload_column/manipulators/rmagick.rb +75 -0
- data/lib/upload_column/rails/action_controller_extension.rb +61 -0
- data/lib/upload_column/rails/asset_tag_extension.rb +17 -0
- data/lib/upload_column/rails/upload_column_helper.rb +45 -0
- data/lib/upload_column/sanitized_file.rb +176 -0
- data/lib/upload_column/uploaded_file.rb +299 -0
- data/lib/upload_column.rb +12 -0
- data/spec/active_record_extension_spec.rb +514 -0
- data/spec/custom_matchers.rb +148 -0
- data/spec/fixtures/animated.gif +0 -0
- data/spec/fixtures/animated_solarized.gif +0 -0
- data/spec/fixtures/invalid-image.jpg +1 -0
- data/spec/fixtures/kerb.jpg +0 -0
- data/spec/fixtures/kerb_solarized.jpg +0 -0
- data/spec/fixtures/netscape.gif +0 -0
- data/spec/fixtures/skanthak.png +0 -0
- data/spec/image_science_manipulator_spec.rb +195 -0
- data/spec/integration_spec.rb +668 -0
- data/spec/magic_columns_spec.rb +120 -0
- data/spec/rmagick_manipulator_spec.rb +186 -0
- data/spec/sanitized_file_spec.rb +496 -0
- data/spec/spec_helper.rb +90 -0
- data/spec/upload_column_spec.rb +65 -0
- data/spec/uploaded_file_spec.rb +1053 -0
- metadata +108 -0
@@ -0,0 +1,668 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'spec_helper')
|
2
|
+
|
3
|
+
gem 'activerecord'
|
4
|
+
require 'active_record'
|
5
|
+
|
6
|
+
require File.join(File.dirname(__FILE__), '../lib/upload_column')
|
7
|
+
|
8
|
+
# change this if sqlite is unavailable
|
9
|
+
dbconfig = {
|
10
|
+
:adapter => 'sqlite3',
|
11
|
+
:database => 'db/test.sqlite3'
|
12
|
+
}
|
13
|
+
|
14
|
+
ActiveRecord::Base.establish_connection(dbconfig)
|
15
|
+
ActiveRecord::Migration.verbose = false
|
16
|
+
|
17
|
+
class TestMigration < ActiveRecord::Migration
|
18
|
+
def self.up
|
19
|
+
create_table :events, :force => true do |t|
|
20
|
+
t.column :image, :string
|
21
|
+
t.column :textfile, :string
|
22
|
+
end
|
23
|
+
|
24
|
+
create_table :movies, :force => true do |t|
|
25
|
+
t.column :movie, :string
|
26
|
+
t.column :name, :string
|
27
|
+
t.column :description, :text
|
28
|
+
end
|
29
|
+
|
30
|
+
create_table :shrooms, :force => true do |t|
|
31
|
+
t.column :image, :string
|
32
|
+
t.column :image_size, :integer
|
33
|
+
t.column :image_public_path, :string
|
34
|
+
t.column :image_path, :string
|
35
|
+
t.column :image_monkey, :string
|
36
|
+
t.column :image_extension, :string
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def self.down
|
41
|
+
drop_table :events
|
42
|
+
drop_table :movies
|
43
|
+
drop_table :shrooms
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
class Event < ActiveRecord::Base; end # setup a basic AR class for testing
|
48
|
+
class Movie < ActiveRecord::Base; end # setup a basic AR class for testing
|
49
|
+
class Shroom < ActiveRecord::Base; end # setup a basic AR class for testing
|
50
|
+
|
51
|
+
def migrate
|
52
|
+
before(:all) do
|
53
|
+
TestMigration.down rescue nil
|
54
|
+
TestMigration.up
|
55
|
+
end
|
56
|
+
|
57
|
+
after(:all) { TestMigration.down }
|
58
|
+
end
|
59
|
+
|
60
|
+
# TODO: RSpec syntax and integration really don't mix. In the long run, it would
|
61
|
+
# be nice to rewrite this stuff with the Story runner.
|
62
|
+
|
63
|
+
describe "normally instantiating and saving a record" do
|
64
|
+
|
65
|
+
migrate
|
66
|
+
|
67
|
+
it "shouldn't fail" do
|
68
|
+
Event.reflect_on_upload_columns.should == {}
|
69
|
+
running { @event = Event.new }.should_not raise_error
|
70
|
+
@event.image = "monkey"
|
71
|
+
running { @event.save }.should_not raise_error
|
72
|
+
end
|
73
|
+
|
74
|
+
end
|
75
|
+
|
76
|
+
describe "uploading a single file" do
|
77
|
+
|
78
|
+
migrate
|
79
|
+
|
80
|
+
before do
|
81
|
+
Event.upload_column(:image)
|
82
|
+
@event = Event.new
|
83
|
+
@event.image = stub_tempfile('kerb.jpg')
|
84
|
+
end
|
85
|
+
|
86
|
+
it "should set the correct path" do
|
87
|
+
@event.image.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb.jpg' )
|
88
|
+
end
|
89
|
+
|
90
|
+
it "should copy the file to temp." do
|
91
|
+
File.exists?(@event.image.path).should === true
|
92
|
+
@event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
93
|
+
end
|
94
|
+
|
95
|
+
it "should set the correct url" do
|
96
|
+
@event.image.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb.jpg}
|
97
|
+
end
|
98
|
+
|
99
|
+
after do
|
100
|
+
FileUtils.rm_rf(PUBLIC)
|
101
|
+
end
|
102
|
+
end
|
103
|
+
|
104
|
+
describe "uploading a file and then saving the record" do
|
105
|
+
|
106
|
+
migrate
|
107
|
+
|
108
|
+
before do
|
109
|
+
Event.upload_column(:image)
|
110
|
+
@event = Event.new
|
111
|
+
@event.image = stub_tempfile('kerb.jpg')
|
112
|
+
@event.save
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should set the correct path" do
|
116
|
+
@event.image.path.should match_path(PUBLIC, 'image', 'kerb.jpg')
|
117
|
+
end
|
118
|
+
|
119
|
+
it "should copy the file to the correct location" do
|
120
|
+
File.exists?(@event.image.path)
|
121
|
+
@event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
122
|
+
end
|
123
|
+
|
124
|
+
it "should set the correct url" do
|
125
|
+
@event.image.url.should == "/image/kerb.jpg"
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should save the filename to the database" do
|
129
|
+
Event.find(@event.id)['image'].should == 'kerb.jpg'
|
130
|
+
end
|
131
|
+
|
132
|
+
after do
|
133
|
+
FileUtils.rm_rf(PUBLIC)
|
134
|
+
end
|
135
|
+
|
136
|
+
end
|
137
|
+
|
138
|
+
describe "uploading a file with versions" do
|
139
|
+
|
140
|
+
migrate
|
141
|
+
|
142
|
+
before do
|
143
|
+
Event.upload_column(:image, :versions => [ :thumb, :large ] )
|
144
|
+
@event = Event.new
|
145
|
+
@event.image = stub_tempfile('kerb.jpg')
|
146
|
+
end
|
147
|
+
|
148
|
+
it "should set the correct path" do
|
149
|
+
@event.image.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb.jpg' )
|
150
|
+
@event.image.thumb.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb-thumb.jpg' )
|
151
|
+
@event.image.large.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb-large.jpg' )
|
152
|
+
end
|
153
|
+
|
154
|
+
it "should copy the file to temp." do
|
155
|
+
File.exists?(@event.image.path).should === true
|
156
|
+
File.exists?(@event.image.thumb.path).should === true
|
157
|
+
File.exists?(@event.image.large.path).should === true
|
158
|
+
@event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
159
|
+
@event.image.thumb.path.should be_identical_with(file_path('kerb.jpg'))
|
160
|
+
@event.image.large.path.should be_identical_with(file_path('kerb.jpg'))
|
161
|
+
end
|
162
|
+
|
163
|
+
it "should set the correct url" do
|
164
|
+
@event.image.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb.jpg}
|
165
|
+
@event.image.thumb.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb-thumb.jpg}
|
166
|
+
@event.image.large.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb-large.jpg}
|
167
|
+
end
|
168
|
+
|
169
|
+
after do
|
170
|
+
FileUtils.rm_rf(PUBLIC)
|
171
|
+
end
|
172
|
+
|
173
|
+
end
|
174
|
+
|
175
|
+
describe "uploading a file with versions and then saving the record" do
|
176
|
+
|
177
|
+
migrate
|
178
|
+
|
179
|
+
before do
|
180
|
+
Event.upload_column(:image, :versions => [ :thumb, :large ] )
|
181
|
+
@event = Event.new
|
182
|
+
@event.image = stub_tempfile('kerb.jpg')
|
183
|
+
@event.save
|
184
|
+
end
|
185
|
+
|
186
|
+
it "should set the correct path" do
|
187
|
+
@event.image.path.should match_path(PUBLIC, 'image', 'kerb.jpg' )
|
188
|
+
@event.image.thumb.path.should match_path(PUBLIC, 'image', 'kerb-thumb.jpg' )
|
189
|
+
@event.image.large.path.should match_path(PUBLIC, 'image', 'kerb-large.jpg' )
|
190
|
+
end
|
191
|
+
|
192
|
+
it "should copy the file to the correct location." do
|
193
|
+
File.exists?(@event.image.path).should === true
|
194
|
+
File.exists?(@event.image.thumb.path).should === true
|
195
|
+
File.exists?(@event.image.large.path).should === true
|
196
|
+
@event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
197
|
+
@event.image.thumb.path.should be_identical_with(file_path('kerb.jpg'))
|
198
|
+
@event.image.large.path.should be_identical_with(file_path('kerb.jpg'))
|
199
|
+
end
|
200
|
+
|
201
|
+
it "should set the correct url" do
|
202
|
+
@event.image.url.should == "/image/kerb.jpg"
|
203
|
+
@event.image.thumb.url.should == "/image/kerb-thumb.jpg"
|
204
|
+
@event.image.large.url.should == "/image/kerb-large.jpg"
|
205
|
+
end
|
206
|
+
|
207
|
+
it "should save the filename to the database" do
|
208
|
+
Event.find(@event.id)['image'].should == 'kerb.jpg'
|
209
|
+
end
|
210
|
+
|
211
|
+
after do
|
212
|
+
FileUtils.rm_rf(PUBLIC)
|
213
|
+
end
|
214
|
+
|
215
|
+
end
|
216
|
+
|
217
|
+
|
218
|
+
describe "assigning a file from temp with versions" do
|
219
|
+
|
220
|
+
migrate
|
221
|
+
|
222
|
+
before do
|
223
|
+
Event.upload_column(:image, :versions => [ :thumb, :large ] )
|
224
|
+
@blah = Event.new
|
225
|
+
|
226
|
+
@event = Event.new
|
227
|
+
|
228
|
+
@blah.image = stub_tempfile('kerb.jpg') # we've alredy tested this...
|
229
|
+
|
230
|
+
@event.image_temp = @blah.image_temp
|
231
|
+
end
|
232
|
+
|
233
|
+
it "should set the correct path" do
|
234
|
+
@event.image.path.should == @blah.image.path
|
235
|
+
@event.image.thumb.path.should == @blah.image.thumb.path
|
236
|
+
@event.image.large.path.should == @blah.image.large.path
|
237
|
+
end
|
238
|
+
|
239
|
+
it "should set the correct url" do
|
240
|
+
@event.image.url.should == @blah.image.url
|
241
|
+
@event.image.thumb.url.should == @blah.image.thumb.url
|
242
|
+
@event.image.large.url.should == @blah.image.large.url
|
243
|
+
end
|
244
|
+
|
245
|
+
after do
|
246
|
+
FileUtils.rm_rf(PUBLIC)
|
247
|
+
end
|
248
|
+
|
249
|
+
end
|
250
|
+
|
251
|
+
|
252
|
+
describe "assigning a file from temp with versions and then saving the record" do
|
253
|
+
|
254
|
+
migrate
|
255
|
+
|
256
|
+
before do
|
257
|
+
Event.upload_column(:image, :versions => [ :thumb, :large ] )
|
258
|
+
@blah = Event.new
|
259
|
+
|
260
|
+
@event = Event.new
|
261
|
+
|
262
|
+
@blah.image = stub_tempfile('kerb.jpg') # we've alredy tested this...
|
263
|
+
|
264
|
+
@event.image_temp = @blah.image_temp
|
265
|
+
|
266
|
+
@event.save
|
267
|
+
end
|
268
|
+
|
269
|
+
it "should set the correct path" do
|
270
|
+
@event.image.path.should match_path(PUBLIC, 'image', 'kerb.jpg' )
|
271
|
+
@event.image.thumb.path.should match_path(PUBLIC, 'image', 'kerb-thumb.jpg' )
|
272
|
+
@event.image.large.path.should match_path(PUBLIC, 'image', 'kerb-large.jpg' )
|
273
|
+
end
|
274
|
+
|
275
|
+
it "should copy the file to the correct location." do
|
276
|
+
File.exists?(@event.image.path).should === true
|
277
|
+
File.exists?(@event.image.thumb.path).should === true
|
278
|
+
File.exists?(@event.image.large.path).should === true
|
279
|
+
@event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
280
|
+
@event.image.thumb.path.should be_identical_with(file_path('kerb.jpg'))
|
281
|
+
@event.image.large.path.should be_identical_with(file_path('kerb.jpg'))
|
282
|
+
end
|
283
|
+
|
284
|
+
it "should set the correct url" do
|
285
|
+
@event.image.url.should == "/image/kerb.jpg"
|
286
|
+
@event.image.thumb.url.should == "/image/kerb-thumb.jpg"
|
287
|
+
@event.image.large.url.should == "/image/kerb-large.jpg"
|
288
|
+
end
|
289
|
+
|
290
|
+
it "should save the filename to the database" do
|
291
|
+
Event.find(@event.id)['image'].should == 'kerb.jpg'
|
292
|
+
end
|
293
|
+
|
294
|
+
after do
|
295
|
+
FileUtils.rm_rf(PUBLIC)
|
296
|
+
end
|
297
|
+
|
298
|
+
end
|
299
|
+
|
300
|
+
describe "an upload_column with an uploaded file" do
|
301
|
+
|
302
|
+
migrate
|
303
|
+
|
304
|
+
before do
|
305
|
+
Event.upload_column(:image)
|
306
|
+
@event = Event.new
|
307
|
+
@event.image = stub_tempfile('kerb.jpg')
|
308
|
+
@event.save
|
309
|
+
end
|
310
|
+
|
311
|
+
it "should not be overwritten by an empty String" do
|
312
|
+
@e2 = Event.find(@event.id)
|
313
|
+
lambda {
|
314
|
+
@e2.image = ""
|
315
|
+
@e2.save
|
316
|
+
}.should_not change(@e2.image, :path)
|
317
|
+
@e2[:image].should == "kerb.jpg"
|
318
|
+
end
|
319
|
+
|
320
|
+
it "should not be overwritten by an empty StringIO" do
|
321
|
+
@e2 = Event.find(@event.id)
|
322
|
+
lambda {
|
323
|
+
@e2.image = StringIO.new('')
|
324
|
+
@e2.save
|
325
|
+
}.should_not change(@e2.image, :path)
|
326
|
+
@e2[:image].should == "kerb.jpg"
|
327
|
+
end
|
328
|
+
|
329
|
+
it "should not be overwritten by an empty file" do
|
330
|
+
@e2 = Event.find(@event.id)
|
331
|
+
lambda {
|
332
|
+
file = stub_file('kerb.jpg')
|
333
|
+
file.stub!(:size).and_return(0)
|
334
|
+
@e2.image = file
|
335
|
+
@e2.save
|
336
|
+
}.should_not change(@e2.image, :path)
|
337
|
+
@e2[:image].should == "kerb.jpg"
|
338
|
+
end
|
339
|
+
|
340
|
+
it "should be overwritten by another file" do
|
341
|
+
@e2 = Event.find(@event.id)
|
342
|
+
lambda {
|
343
|
+
file = stub_file('skanthak.png')
|
344
|
+
@e2.image = file
|
345
|
+
@e2.save
|
346
|
+
}.should_not change(@e2.image, :path)
|
347
|
+
@e2[:image].should == "skanthak.png"
|
348
|
+
end
|
349
|
+
|
350
|
+
it "should be marshallable" do
|
351
|
+
running { Marshal.dump(@entry) }.should_not raise_error
|
352
|
+
end
|
353
|
+
|
354
|
+
after do
|
355
|
+
FileUtils.rm_rf(PUBLIC)
|
356
|
+
end
|
357
|
+
end
|
358
|
+
|
359
|
+
describe "uploading an image with several versions, the rmagick manipulator and instructions to rescale" do
|
360
|
+
|
361
|
+
migrate
|
362
|
+
|
363
|
+
# buuhuu so sue me. This spec runs a whole second faster if we do this before all instead of
|
364
|
+
# before each.
|
365
|
+
before(:all) do
|
366
|
+
Event.upload_column(:image,
|
367
|
+
:versions => { :thumb => 'c100x100', :large => '200x200' },
|
368
|
+
:manipulator => UploadColumn::Manipulators::RMagick
|
369
|
+
)
|
370
|
+
@event = Event.new
|
371
|
+
@event.image = stub_tempfile('kerb.jpg')
|
372
|
+
end
|
373
|
+
|
374
|
+
it "should set the correct path" do
|
375
|
+
@event.image.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb.jpg' )
|
376
|
+
@event.image.thumb.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb-thumb.jpg' )
|
377
|
+
@event.image.large.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb-large.jpg' )
|
378
|
+
end
|
379
|
+
|
380
|
+
it "should copy the files to temp." do
|
381
|
+
File.exists?(@event.image.path).should === true
|
382
|
+
File.exists?(@event.image.thumb.path).should === true
|
383
|
+
File.exists?(@event.image.large.path).should === true
|
384
|
+
end
|
385
|
+
|
386
|
+
it "should set the correct url" do
|
387
|
+
@event.image.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb.jpg}
|
388
|
+
@event.image.thumb.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb-thumb.jpg}
|
389
|
+
@event.image.large.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb-large.jpg}
|
390
|
+
end
|
391
|
+
|
392
|
+
it "should preserve the main file" do
|
393
|
+
@event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
394
|
+
end
|
395
|
+
|
396
|
+
it "should change the versions" do
|
397
|
+
@event.image.thumb.path.should_not be_identical_with(file_path('kerb.jpg'))
|
398
|
+
@event.image.large.path.should_not be_identical_with(file_path('kerb.jpg'))
|
399
|
+
end
|
400
|
+
|
401
|
+
it "should rescale the images to the correct sizes" do
|
402
|
+
@event.image.large.should be_no_larger_than(200, 200)
|
403
|
+
@event.image.thumb.should have_the_exact_dimensions_of(100, 100)
|
404
|
+
end
|
405
|
+
|
406
|
+
after(:all) do
|
407
|
+
FileUtils.rm_rf(PUBLIC)
|
408
|
+
end
|
409
|
+
end
|
410
|
+
|
411
|
+
|
412
|
+
# TODO: make image_science not crap out on my macbook
|
413
|
+
#describe "uploading an image with several versions, the image_science manipulator and instructions to rescale" do
|
414
|
+
#
|
415
|
+
# migrate
|
416
|
+
#
|
417
|
+
# # buuhuu so sue me. This spec runs a whole second faster if we do this before all instead of
|
418
|
+
# # before each.
|
419
|
+
# before(:all) do
|
420
|
+
# Event.upload_column(:image,
|
421
|
+
# :versions => { :thumb => 'c100x100', :large => '200x200' },
|
422
|
+
# :manipulator => UploadColumn::Manipulators::ImageScience
|
423
|
+
# )
|
424
|
+
# @event = Event.new
|
425
|
+
# @event.image = stub_tempfile('kerb.jpg')
|
426
|
+
# end
|
427
|
+
#
|
428
|
+
# it "should set the correct path" do
|
429
|
+
# @event.image.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb.jpg' )
|
430
|
+
# @event.image.thumb.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb-thumb.jpg' )
|
431
|
+
# @event.image.large.path.should match_path(PUBLIC, 'tmp', /(?:\d+\.)+\d+/, 'kerb-large.jpg' )
|
432
|
+
# end
|
433
|
+
#
|
434
|
+
# it "should copy the files to temp." do
|
435
|
+
# File.exists?(@event.image.path).should === true
|
436
|
+
# File.exists?(@event.image.thumb.path).should === true
|
437
|
+
# File.exists?(@event.image.large.path).should === true
|
438
|
+
# end
|
439
|
+
#
|
440
|
+
# it "should set the correct url" do
|
441
|
+
# @event.image.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb.jpg}
|
442
|
+
# @event.image.thumb.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb-thumb.jpg}
|
443
|
+
# @event.image.large.url.should =~ %r{/tmp/(?:\d+\.)+\d+/kerb-large.jpg}
|
444
|
+
# end
|
445
|
+
#
|
446
|
+
# it "should preserve the main file" do
|
447
|
+
# @event.image.path.should be_identical_with(file_path('kerb.jpg'))
|
448
|
+
# end
|
449
|
+
#
|
450
|
+
# it "should change the versions" do
|
451
|
+
# @event.image.thumb.path.should_not be_identical_with(file_path('kerb.jpg'))
|
452
|
+
# @event.image.large.path.should_not be_identical_with(file_path('kerb.jpg'))
|
453
|
+
# end
|
454
|
+
#
|
455
|
+
# it "should rescale the images to the correct sizes" do
|
456
|
+
# @event.image.large.should be_no_larger_than(200, 200)
|
457
|
+
# @event.image.thumb.should have_the_exact_dimensions_of(100, 100)
|
458
|
+
# end
|
459
|
+
#
|
460
|
+
# after(:all) do
|
461
|
+
# FileUtils.rm_rf(PUBLIC)
|
462
|
+
# end
|
463
|
+
#end
|
464
|
+
|
465
|
+
describe "uploading a file with an extension that is not in the whitelist" do
|
466
|
+
|
467
|
+
migrate
|
468
|
+
|
469
|
+
before(:each) do
|
470
|
+
Event.upload_column(:image, :fix_file_extensions => false)
|
471
|
+
Event.validates_integrity_of :image
|
472
|
+
|
473
|
+
@event = Event.new
|
474
|
+
end
|
475
|
+
|
476
|
+
it "should add an error to the record" do
|
477
|
+
@event.image = stub_tempfile('kerb.jpg', nil, 'monkey.exe')
|
478
|
+
@event.should_not be_valid
|
479
|
+
@event.errors.on(:image).should == "has an extension that is not allowed."
|
480
|
+
@event.image.should be_nil
|
481
|
+
end
|
482
|
+
|
483
|
+
it "should be reversible by uploading a valid file" do
|
484
|
+
|
485
|
+
@event.image = stub_tempfile('kerb.jpg', nil, 'monkey.exe')
|
486
|
+
|
487
|
+
@event.should_not be_valid
|
488
|
+
@event.errors.on(:image).should include('has an extension that is not allowed.')
|
489
|
+
|
490
|
+
@event.image = stub_tempfile('kerb.jpg')
|
491
|
+
|
492
|
+
@event.should be_valid
|
493
|
+
@event.errors.on(:image).should be_nil
|
494
|
+
end
|
495
|
+
end
|
496
|
+
|
497
|
+
describe "uploading a file with magic columns" do
|
498
|
+
|
499
|
+
migrate
|
500
|
+
|
501
|
+
before(:each) do
|
502
|
+
Shroom.upload_column :image
|
503
|
+
@shroom = Shroom.new
|
504
|
+
@shroom.image = stub_tempfile('kerb.jpg')
|
505
|
+
end
|
506
|
+
|
507
|
+
it "should automatically set the image path" do
|
508
|
+
@shroom.image_path.should == @shroom.image.path
|
509
|
+
end
|
510
|
+
|
511
|
+
it "should automatically set the image size" do
|
512
|
+
@shroom.image_size.should == @shroom.image.size
|
513
|
+
end
|
514
|
+
|
515
|
+
it "should automatically set the image public path" do
|
516
|
+
@shroom.image_public_path.should == @shroom.image.public_path
|
517
|
+
end
|
518
|
+
|
519
|
+
it "should ignore columns whose names aren't methods on the column" do
|
520
|
+
@shroom.image_monkey.should == nil
|
521
|
+
end
|
522
|
+
end
|
523
|
+
|
524
|
+
describe "assigning a file from tmp with magic columns" do
|
525
|
+
|
526
|
+
migrate
|
527
|
+
|
528
|
+
before(:each) do
|
529
|
+
Shroom.upload_column :image
|
530
|
+
e1 = Shroom.new
|
531
|
+
e1.image = stub_tempfile('kerb.jpg')
|
532
|
+
@shroom = Shroom.new
|
533
|
+
@shroom.image_temp = e1.image_temp
|
534
|
+
end
|
535
|
+
|
536
|
+
it "should automatically set the image size" do
|
537
|
+
@shroom.image_size.should == @shroom.image.size
|
538
|
+
end
|
539
|
+
|
540
|
+
it "should automatically set the image path" do
|
541
|
+
@shroom.image_path.should == @shroom.image.path
|
542
|
+
end
|
543
|
+
|
544
|
+
it "should automatically set the image public path" do
|
545
|
+
@shroom.image_public_path.should == @shroom.image.public_path
|
546
|
+
end
|
547
|
+
|
548
|
+
it "should ignore columns whose names aren't methods on the column" do
|
549
|
+
@shroom.image_monkey.should == nil
|
550
|
+
end
|
551
|
+
end
|
552
|
+
|
553
|
+
describe "uploading and saving a file with magic columns" do
|
554
|
+
|
555
|
+
migrate
|
556
|
+
|
557
|
+
before(:each) do
|
558
|
+
Shroom.upload_column :image
|
559
|
+
@shroom = Shroom.new
|
560
|
+
@shroom.image_extension = "Some other Extension"
|
561
|
+
@shroom.image = stub_tempfile('kerb.jpg')
|
562
|
+
@shroom.save
|
563
|
+
end
|
564
|
+
|
565
|
+
it "should automatically set the image size" do
|
566
|
+
@shroom.image_size.should == @shroom.image.size
|
567
|
+
end
|
568
|
+
|
569
|
+
it "should automatically set the image path" do
|
570
|
+
@shroom.image_path.should == @shroom.image.path
|
571
|
+
end
|
572
|
+
|
573
|
+
it "should automatically set the image public path" do
|
574
|
+
@shroom.image_public_path.should == @shroom.image.public_path
|
575
|
+
end
|
576
|
+
|
577
|
+
it "should ignore columns whose names aren't methods on the column" do
|
578
|
+
@shroom.image_monkey.should == nil
|
579
|
+
end
|
580
|
+
|
581
|
+
it "should ignore columns who already have a value set" do
|
582
|
+
@shroom.image_extension.should == "Some other Extension"
|
583
|
+
end
|
584
|
+
end
|
585
|
+
|
586
|
+
describe "assigning a file from tmp and saving it with magic columns" do
|
587
|
+
|
588
|
+
migrate
|
589
|
+
|
590
|
+
before(:each) do
|
591
|
+
Shroom.upload_column :image
|
592
|
+
e1 = Shroom.new
|
593
|
+
e1.image = stub_tempfile('kerb.jpg')
|
594
|
+
@shroom = Shroom.new
|
595
|
+
@shroom.image_temp = e1.image_temp
|
596
|
+
@shroom.save
|
597
|
+
end
|
598
|
+
|
599
|
+
it "should automatically set the image size" do
|
600
|
+
@shroom.image_size.should == @shroom.image.size
|
601
|
+
end
|
602
|
+
|
603
|
+
it "should automatically set the image path" do
|
604
|
+
@shroom.image_path.should == @shroom.image.path
|
605
|
+
end
|
606
|
+
|
607
|
+
it "should automatically set the image public path" do
|
608
|
+
@shroom.image_public_path.should == @shroom.image.public_path
|
609
|
+
end
|
610
|
+
|
611
|
+
it "should ignore columns whose names aren't methods on the column" do
|
612
|
+
@shroom.image_monkey.should == nil
|
613
|
+
end
|
614
|
+
end
|
615
|
+
|
616
|
+
describe "uploading a file with a filename instruction" do
|
617
|
+
|
618
|
+
migrate
|
619
|
+
|
620
|
+
before(:each) do
|
621
|
+
Event.upload_column :image, :filename => 'arg.png'
|
622
|
+
@event = Event.new
|
623
|
+
@event.image = stub_tempfile('kerb.jpg')
|
624
|
+
@event.save
|
625
|
+
end
|
626
|
+
|
627
|
+
it "should give it the correct filename" do
|
628
|
+
@event.image.filename.should == 'arg.png'
|
629
|
+
end
|
630
|
+
|
631
|
+
it "should give it the correct path" do
|
632
|
+
@event.image.path.should match_path(PUBLIC, 'image', 'arg.png')
|
633
|
+
end
|
634
|
+
end
|
635
|
+
|
636
|
+
describe "uploading a file with a complex filename instruction" do
|
637
|
+
|
638
|
+
migrate
|
639
|
+
|
640
|
+
before(:each) do
|
641
|
+
Movie.upload_column :image, :filename => proc{ |r, f| "#{r.name}-#{f.basename}-#{f.suffix}quox.#{f.extension}"}, :versions => [:thumb, :large]
|
642
|
+
@movie = Movie.new
|
643
|
+
@movie.name = "indiana_jones"
|
644
|
+
@movie.image = stub_tempfile('kerb.jpg')
|
645
|
+
@movie.save
|
646
|
+
end
|
647
|
+
|
648
|
+
it "should give it the correct filename" do
|
649
|
+
@movie.image.filename.should == 'indiana_jones-kerb-quox.jpg'
|
650
|
+
@movie.image.thumb.filename.should == 'indiana_jones-kerb-thumbquox.jpg'
|
651
|
+
@movie.image.large.filename.should == 'indiana_jones-kerb-largequox.jpg'
|
652
|
+
end
|
653
|
+
|
654
|
+
it "should have correct paths" do
|
655
|
+
@movie.image.path.should match_path(PUBLIC, 'image', 'indiana_jones-kerb-quox.jpg' )
|
656
|
+
@movie.image.thumb.path.should match_path(PUBLIC, 'image', 'indiana_jones-kerb-thumbquox.jpg' )
|
657
|
+
@movie.image.large.path.should match_path(PUBLIC, 'image', 'indiana_jones-kerb-largequox.jpg' )
|
658
|
+
end
|
659
|
+
|
660
|
+
it "should remember the original filename" do
|
661
|
+
@movie.image.actual_filename.should == "kerb.jpg"
|
662
|
+
end
|
663
|
+
|
664
|
+
it "should store the _original_ filename in the database" do
|
665
|
+
@movie[:image].should == "kerb.jpg"
|
666
|
+
end
|
667
|
+
|
668
|
+
end
|