durran-carrierwave 0.3.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (91) hide show
  1. data/Generators +4 -0
  2. data/History.txt +66 -0
  3. data/LICENSE +8 -0
  4. data/Manifest.txt +89 -0
  5. data/README.rdoc +342 -0
  6. data/Rakefile +30 -0
  7. data/carrierwave.gemspec +57 -0
  8. data/cucumber.yml +2 -0
  9. data/features/caching.feature +28 -0
  10. data/features/file_storage.feature +37 -0
  11. data/features/file_storage_overridden_filename.feature +38 -0
  12. data/features/file_storage_overridden_store_dir.feature +38 -0
  13. data/features/file_storage_reversing_processor.feature +43 -0
  14. data/features/fixtures/bork.txt +1 -0
  15. data/features/fixtures/monkey.txt +1 -0
  16. data/features/mount_activerecord.feature +46 -0
  17. data/features/mount_datamapper.feature +46 -0
  18. data/features/step_definitions/activerecord_steps.rb +22 -0
  19. data/features/step_definitions/caching_steps.rb +14 -0
  20. data/features/step_definitions/datamapper_steps.rb +29 -0
  21. data/features/step_definitions/file_steps.rb +42 -0
  22. data/features/step_definitions/general_steps.rb +80 -0
  23. data/features/step_definitions/mount_steps.rb +19 -0
  24. data/features/step_definitions/store_steps.rb +18 -0
  25. data/features/support/activerecord.rb +30 -0
  26. data/features/support/datamapper.rb +7 -0
  27. data/features/support/env.rb +35 -0
  28. data/features/versions_basics.feature +50 -0
  29. data/features/versions_nested_versions.feature +70 -0
  30. data/features/versions_overridden_filename.feature +51 -0
  31. data/features/versions_overriden_store_dir.feature +41 -0
  32. data/lib/carrierwave.rb +145 -0
  33. data/lib/carrierwave/compatibility/paperclip.rb +95 -0
  34. data/lib/carrierwave/core_ext/blank.rb +46 -0
  35. data/lib/carrierwave/core_ext/inheritable_attributes.rb +104 -0
  36. data/lib/carrierwave/core_ext/module_setup.rb +51 -0
  37. data/lib/carrierwave/mount.rb +332 -0
  38. data/lib/carrierwave/orm/activerecord.rb +73 -0
  39. data/lib/carrierwave/orm/datamapper.rb +27 -0
  40. data/lib/carrierwave/orm/mongomapper.rb +27 -0
  41. data/lib/carrierwave/orm/sequel.rb +57 -0
  42. data/lib/carrierwave/processing/image_science.rb +72 -0
  43. data/lib/carrierwave/processing/rmagick.rb +286 -0
  44. data/lib/carrierwave/sanitized_file.rb +272 -0
  45. data/lib/carrierwave/storage/abstract.rb +32 -0
  46. data/lib/carrierwave/storage/file.rb +50 -0
  47. data/lib/carrierwave/storage/s3.rb +215 -0
  48. data/lib/carrierwave/test/matchers.rb +114 -0
  49. data/lib/carrierwave/uploader.rb +43 -0
  50. data/lib/carrierwave/uploader/cache.rb +116 -0
  51. data/lib/carrierwave/uploader/callbacks.rb +42 -0
  52. data/lib/carrierwave/uploader/default_path.rb +23 -0
  53. data/lib/carrierwave/uploader/extension_whitelist.rb +37 -0
  54. data/lib/carrierwave/uploader/mountable.rb +39 -0
  55. data/lib/carrierwave/uploader/paths.rb +27 -0
  56. data/lib/carrierwave/uploader/processing.rb +81 -0
  57. data/lib/carrierwave/uploader/proxy.rb +62 -0
  58. data/lib/carrierwave/uploader/remove.rb +23 -0
  59. data/lib/carrierwave/uploader/store.rb +156 -0
  60. data/lib/carrierwave/uploader/url.rb +24 -0
  61. data/lib/carrierwave/uploader/versions.rb +147 -0
  62. data/lib/generators/uploader_generator.rb +22 -0
  63. data/rails_generators/uploader/USAGE +2 -0
  64. data/rails_generators/uploader/templates/uploader.rb +47 -0
  65. data/rails_generators/uploader/uploader_generator.rb +21 -0
  66. data/script/console +10 -0
  67. data/script/destroy +14 -0
  68. data/script/generate +14 -0
  69. data/spec/compatibility/paperclip_spec.rb +43 -0
  70. data/spec/fixtures/bork.txt +1 -0
  71. data/spec/fixtures/test.jpeg +1 -0
  72. data/spec/fixtures/test.jpg +1 -0
  73. data/spec/mount_spec.rb +517 -0
  74. data/spec/orm/activerecord_spec.rb +271 -0
  75. data/spec/orm/datamapper_spec.rb +161 -0
  76. data/spec/orm/mongomapper_spec.rb +184 -0
  77. data/spec/orm/sequel_spec.rb +192 -0
  78. data/spec/sanitized_file_spec.rb +612 -0
  79. data/spec/spec_helper.rb +99 -0
  80. data/spec/uploader/cache_spec.rb +196 -0
  81. data/spec/uploader/default_path_spec.rb +68 -0
  82. data/spec/uploader/extension_whitelist_spec.rb +44 -0
  83. data/spec/uploader/mountable_spec.rb +33 -0
  84. data/spec/uploader/paths_spec.rb +22 -0
  85. data/spec/uploader/processing_spec.rb +62 -0
  86. data/spec/uploader/proxy_spec.rb +54 -0
  87. data/spec/uploader/remove_spec.rb +70 -0
  88. data/spec/uploader/store_spec.rb +274 -0
  89. data/spec/uploader/url_spec.rb +87 -0
  90. data/spec/uploader/versions_spec.rb +306 -0
  91. metadata +228 -0
@@ -0,0 +1,192 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+
5
+ require 'carrierwave/orm/sequel'
6
+
7
+ DB = Sequel.sqlite
8
+
9
+ describe CarrierWave::Sequel do
10
+
11
+ def setup_variables_for_class(klass)
12
+ uploader = Class.new(CarrierWave::Uploader::Base)
13
+ klass.mount_uploader(:image, uploader)
14
+ model = klass.new
15
+ [klass, uploader, model]
16
+ end
17
+
18
+ describe '.mount_uploader' do
19
+
20
+ before(:all) do
21
+ DB.create_table :events do
22
+ primary_key :id
23
+ column :image, :string
24
+ column :textfile, :string
25
+ end
26
+ end
27
+
28
+ after(:all) do
29
+ DB.drop_table :events
30
+ end
31
+
32
+ before(:each) do
33
+ @class = Class.new(Sequel::Model)
34
+ @class.set_dataset :events
35
+ @class, @uploader, @event = setup_variables_for_class(@class)
36
+ end
37
+
38
+ after(:each) { @class.delete }
39
+
40
+ describe '#image' do
41
+
42
+ it "should return blank uploader when nothing has been assigned" do
43
+ @event.image.should be_blank
44
+ end
45
+
46
+ it "should return blank uploader when an empty string has been assigned" do
47
+ @event[:image] = ''
48
+ @event.save
49
+ @event.reload
50
+ @event.image.should be_blank
51
+ end
52
+
53
+ it "should retrieve a file from the storage if a value is stored in the database" do
54
+ @event[:image] = 'test.jpeg'
55
+ @event.save
56
+ @event.reload
57
+ @event.image.should be_an_instance_of(@uploader)
58
+ end
59
+
60
+ it "should set the path to the store dir" do
61
+ @event[:image] = 'test.jpeg'
62
+ @event.save
63
+ @event.reload
64
+ @event.image.current_path.should == public_path('uploads/test.jpeg')
65
+ end
66
+
67
+ end
68
+
69
+ describe '#image=' do
70
+
71
+ it "should cache a file" do
72
+ @event.image = stub_file('test.jpeg')
73
+ @event.image.should be_an_instance_of(@uploader)
74
+ end
75
+
76
+ it "should write nothing to the database, to prevent overriden filenames to fail because of unassigned attributes" do
77
+ @event[:image].should be_nil
78
+ end
79
+
80
+ it "should copy a file into into the cache directory" do
81
+ @event.image = stub_file('test.jpeg')
82
+ @event.image.current_path.should =~ /^#{public_path('uploads/tmp')}/
83
+ end
84
+
85
+ it "should do nothing when nil is assigned" do
86
+ @event.image = nil
87
+ @event.image.should be_blank
88
+ end
89
+
90
+ it "should do nothing when an empty string is assigned" do
91
+ @event.image = ''
92
+ @event.image.should be_blank
93
+ end
94
+
95
+ end
96
+
97
+ describe '#save' do
98
+
99
+ it "should do nothing when no file has been assigned" do
100
+ @event.save.should be_true
101
+ @event.image.should be_blank
102
+ end
103
+
104
+ it "should copy the file to the upload directory when a file has been assigned" do
105
+ @event.image = stub_file('test.jpeg')
106
+ @event.save.should be_true
107
+ @event.image.should be_an_instance_of(@uploader)
108
+ @event.image.current_path.should == public_path('uploads/test.jpeg')
109
+ end
110
+
111
+ describe 'with validation' do
112
+
113
+ before do
114
+ # Add validations
115
+ if CarrierWave::Sequel.new_sequel?
116
+ @class.class_eval do
117
+ def validate
118
+ errors.add(:image, 'FAIL!')
119
+ end
120
+ end
121
+ else
122
+ @class.class_eval do
123
+ validates_each(:image) do |o,a,v|
124
+ o.errors.add(a, 'FAIL!')
125
+ end
126
+ end
127
+ end
128
+ # Turn off raising the exceptions on save
129
+ @event.raise_on_save_failure = false
130
+ end
131
+
132
+ it "should do nothing when a validation fails" do
133
+ @event.image = stub_file('test.jpeg')
134
+ @event.should_not be_valid
135
+ @event.save
136
+ @event.should be_new
137
+ @event.image.should be_an_instance_of(@uploader)
138
+ @event.image.current_path.should =~ /^#{public_path('uploads/tmp')}/
139
+ end
140
+ end
141
+
142
+ it "should assign the filename to the database" do
143
+ @event.image = stub_file('test.jpeg')
144
+ @event.save.should be_true
145
+ @event.reload
146
+ @event[:image].should == 'test.jpeg'
147
+ end
148
+
149
+ it "should remove the image if remove_image? returns true" do
150
+ @event.image = stub_file('test.jpeg')
151
+ @event.save
152
+ @event.remove_image = true
153
+ @event.save
154
+ @event.reload
155
+ @event.image.should be_blank
156
+ @event[:image].should == ''
157
+ end
158
+ end
159
+
160
+ describe 'with overriddent filename' do
161
+
162
+ describe '#save' do
163
+
164
+ before do
165
+ @uploader.class_eval do
166
+ def filename
167
+ model.name + File.extname(super)
168
+ end
169
+ end
170
+ @event.stub!(:name).and_return('jonas')
171
+ end
172
+
173
+ it "should copy the file to the upload directory when a file has been assigned" do
174
+ @event.image = stub_file('test.jpeg')
175
+ @event.save.should be_true
176
+ @event.image.should be_an_instance_of(@uploader)
177
+ @event.image.current_path.should == public_path('uploads/jonas.jpeg')
178
+ end
179
+
180
+ it "should assign an overridden filename to the database" do
181
+ @event.image = stub_file('test.jpeg')
182
+ @event.save.should be_true
183
+ @event.reload
184
+ @event[:image].should == 'jonas.jpeg'
185
+ end
186
+
187
+ end
188
+
189
+ end
190
+
191
+ end
192
+ end
@@ -0,0 +1,612 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/spec_helper'
4
+
5
+ describe CarrierWave::SanitizedFile do
6
+
7
+ before do
8
+ unless File.exists?(file_path('llama.jpg'))
9
+ FileUtils.cp(file_path('test.jpg'), file_path('llama.jpg'))
10
+ end
11
+ end
12
+
13
+ after(:all) do
14
+ if File.exists?(file_path('llama.jpg'))
15
+ FileUtils.rm(file_path('llama.jpg'))
16
+ end
17
+ FileUtils.rm_rf(public_path)
18
+ end
19
+
20
+ describe '#empty?' do
21
+
22
+ it "should be empty for nil" do
23
+ @sanitized_file = CarrierWave::SanitizedFile.new(nil)
24
+ @sanitized_file.should be_empty
25
+ end
26
+
27
+ it "should be empty for an empty string" do
28
+ @sanitized_file = CarrierWave::SanitizedFile.new("")
29
+ @sanitized_file.should be_empty
30
+ end
31
+
32
+ it "should be empty for an empty StringIO" do
33
+ @sanitized_file = CarrierWave::SanitizedFile.new(StringIO.new(""))
34
+ @sanitized_file.should be_empty
35
+ end
36
+
37
+ it "should be empty for a file with a zero size" do
38
+ empty_file = mock('emptyfile')
39
+ empty_file.should_receive(:size).at_least(:once).and_return(0)
40
+ @sanitized_file = CarrierWave::SanitizedFile.new(empty_file)
41
+ @sanitized_file.should be_empty
42
+ end
43
+
44
+ end
45
+
46
+ describe '#original_filename' do
47
+ it "should default to the original_filename" do
48
+ file = mock('file', :original_filename => 'llama.jpg')
49
+ sanitized_file = CarrierWave::SanitizedFile.new(file)
50
+ sanitized_file.original_filename.should == "llama.jpg"
51
+ end
52
+
53
+ it "should defer to the base name of the path if original_filename is unavailable" do
54
+ file = mock('file', :path => '/path/to/test.jpg')
55
+ sanitized_file = CarrierWave::SanitizedFile.new(file)
56
+ sanitized_file.original_filename.should == "test.jpg"
57
+ end
58
+
59
+ it "should be nil otherwise" do
60
+ file = mock('file')
61
+ sanitized_file = CarrierWave::SanitizedFile.new(file)
62
+ sanitized_file.original_filename.should be_nil
63
+ end
64
+ end
65
+
66
+ describe '#basename' do
67
+ it "should return the basename for complicated extensions" do
68
+ @sanitized_file = CarrierWave::SanitizedFile.new(file_path('complex.filename.tar.gz'))
69
+ @sanitized_file.basename.should == "complex.filename"
70
+ end
71
+
72
+ it "should be the filename if the file has no extension" do
73
+ @sanitized_file = CarrierWave::SanitizedFile.new(file_path('complex'))
74
+ @sanitized_file.basename.should == "complex"
75
+ end
76
+ end
77
+
78
+ describe '#extension' do
79
+ it "should return the extension for complicated extensions" do
80
+ @sanitized_file = CarrierWave::SanitizedFile.new(file_path('complex.filename.tar.gz'))
81
+ @sanitized_file.extension.should == "tar.gz"
82
+ end
83
+
84
+ it "should be an empty string if the file has no extension" do
85
+ @sanitized_file = CarrierWave::SanitizedFile.new(file_path('complex'))
86
+ @sanitized_file.extension.should == ""
87
+ end
88
+ end
89
+
90
+ describe '#filename' do
91
+
92
+ before do
93
+ @sanitized_file = CarrierWave::SanitizedFile.new(nil)
94
+ end
95
+
96
+ it "should default to the original filename if it is valid" do
97
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return("llama.jpg")
98
+ @sanitized_file.filename.should == "llama.jpg"
99
+ end
100
+
101
+ it "should remove illegal characters from a filename" do
102
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return("test-s,%&m#st?.jpg")
103
+ @sanitized_file.filename.should == "test-s___m_st_.jpg"
104
+ end
105
+
106
+ it "should remove slashes from the filename" do
107
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return("../../very_tricky/foo.bar")
108
+ @sanitized_file.filename.should_not =~ /[\\\/]/
109
+ end
110
+
111
+ it "should remove illegal characters if there is no extension" do
112
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return('`*foo')
113
+ @sanitized_file.filename.should == "__foo"
114
+ end
115
+
116
+ it "should remove the path prefix on Windows" do
117
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return('c:\temp\foo.txt')
118
+ @sanitized_file.filename.should == "foo.txt"
119
+ end
120
+
121
+ it "should make sure the *nix directory thingies can't be used as filenames" do
122
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return(".")
123
+ @sanitized_file.filename.should == "_."
124
+ end
125
+
126
+ it "should downcase uppercase filenames" do
127
+ @sanitized_file.should_receive(:original_filename).at_least(:once).and_return("DSC4056.JPG")
128
+ @sanitized_file.filename.should == "dsc4056.jpg"
129
+ end
130
+
131
+ end
132
+
133
+ shared_examples_for "all valid sanitized files" do
134
+
135
+ describe '#empty?' do
136
+ it "should not be empty" do
137
+ @sanitized_file.should_not be_empty
138
+ end
139
+ end
140
+
141
+ describe '#original_filename' do
142
+ it "should return the original filename" do
143
+ @sanitized_file.original_filename.should == "llama.jpg"
144
+ end
145
+ end
146
+
147
+ describe '#filename' do
148
+ it "should return the filename" do
149
+ @sanitized_file.filename.should == "llama.jpg"
150
+ end
151
+ end
152
+
153
+ describe '#basename' do
154
+ it "should return the basename" do
155
+ @sanitized_file.basename.should == "llama"
156
+ end
157
+ end
158
+
159
+ describe '#extension' do
160
+ it "should return the extension" do
161
+ @sanitized_file.extension.should == "jpg"
162
+ end
163
+ end
164
+
165
+ describe "#read" do
166
+ it "should return the contents of the file" do
167
+ @sanitized_file.read.should == "this is stuff"
168
+ end
169
+ end
170
+
171
+ describe "#size" do
172
+ it "should return the size of the file" do
173
+ @sanitized_file.size.should == 13
174
+ end
175
+ end
176
+
177
+ describe '#move_to' do
178
+
179
+ after do
180
+ FileUtils.rm(file_path('gurr.png'))
181
+ end
182
+
183
+ it "should be moved to the correct location" do
184
+ @sanitized_file.move_to(file_path('gurr.png'))
185
+
186
+ File.exists?( file_path('gurr.png') ).should be_true
187
+ end
188
+
189
+ it "should have changed its path when moved" do
190
+ @sanitized_file.move_to(file_path('gurr.png'))
191
+ @sanitized_file.path.should == file_path('gurr.png')
192
+ end
193
+
194
+ it "should have changed its filename when moved" do
195
+ @sanitized_file.move_to(file_path('gurr.png'))
196
+ @sanitized_file.filename.should == 'gurr.png'
197
+ end
198
+
199
+ it "should have changed its basename when moved" do
200
+ @sanitized_file.move_to(file_path('gurr.png'))
201
+ @sanitized_file.basename.should == 'gurr'
202
+ end
203
+
204
+ it "should have changed its extension when moved" do
205
+ @sanitized_file.move_to(file_path('gurr.png'))
206
+ @sanitized_file.extension.should == 'png'
207
+ end
208
+
209
+ it "should set the right permissions" do
210
+ @sanitized_file.move_to(file_path('gurr.png'), 0755)
211
+ @sanitized_file.should have_permissions(0755)
212
+ end
213
+
214
+ end
215
+
216
+ describe '#copy_to' do
217
+
218
+ after do
219
+ FileUtils.rm(file_path('gurr.png'))
220
+ end
221
+
222
+ it "should be copied to the correct location" do
223
+ @sanitized_file.copy_to(file_path('gurr.png'))
224
+
225
+ File.exists?( file_path('gurr.png') ).should be_true
226
+
227
+ file_path('gurr.png').should be_identical_to(file_path('llama.jpg'))
228
+ end
229
+
230
+ it "should not have changed its path when copied" do
231
+ running { @sanitized_file.copy_to(file_path('gurr.png')) }.should_not change(@sanitized_file, :path)
232
+ end
233
+
234
+ it "should not have changed its filename when copied" do
235
+ running { @sanitized_file.copy_to(file_path('gurr.png')) }.should_not change(@sanitized_file, :filename)
236
+ end
237
+
238
+ it "should return an object of the same class when copied" do
239
+ new_file = @sanitized_file.copy_to(file_path('gurr.png'))
240
+ new_file.should be_an_instance_of(@sanitized_file.class)
241
+ end
242
+
243
+ it "should adjust the path of the object that is returned when copied" do
244
+ new_file = @sanitized_file.copy_to(file_path('gurr.png'))
245
+ new_file.path.should == file_path('gurr.png')
246
+ end
247
+
248
+ it "should adjust the filename of the object that is returned when copied" do
249
+ new_file = @sanitized_file.copy_to(file_path('gurr.png'))
250
+ new_file.filename.should == 'gurr.png'
251
+ end
252
+
253
+ it "should adjust the basename of the object that is returned when copied" do
254
+ new_file = @sanitized_file.copy_to(file_path('gurr.png'))
255
+ new_file.basename.should == 'gurr'
256
+ end
257
+
258
+ it "should adjust the extension of the object that is returned when copied" do
259
+ new_file = @sanitized_file.copy_to(file_path('gurr.png'))
260
+ new_file.extension.should == 'png'
261
+ end
262
+
263
+ it "should set the right permissions" do
264
+ new_file = @sanitized_file.copy_to(file_path('gurr.png'), 0755)
265
+ new_file.should have_permissions(0755)
266
+ end
267
+
268
+ end
269
+
270
+ end
271
+
272
+ shared_examples_for "all valid sanitized files that are stored on disk" do
273
+ describe '#move_to' do
274
+ it "should not raise an error when moved to its own location" do
275
+ running { @sanitized_file.move_to(@sanitized_file.path) }.should_not raise_error
276
+ end
277
+
278
+ it "should remove the original file" do
279
+ original_path = @sanitized_file.path
280
+ @sanitized_file.move_to(public_path('blah.txt'))
281
+ File.exist?(original_path).should be_false
282
+ end
283
+ end
284
+
285
+ describe '#copy_to' do
286
+ it "should return a new instance when copied to its own location" do
287
+ running {
288
+ new_file = @sanitized_file.copy_to(@sanitized_file.path)
289
+ new_file.should be_an_instance_of(@sanitized_file.class)
290
+ }.should_not raise_error
291
+ end
292
+
293
+ it "should not remove the original file" do
294
+ new_file = @sanitized_file.copy_to(public_path('blah.txt'))
295
+ File.exist?(@sanitized_file.path).should be_true
296
+ File.exist?(new_file.path).should be_true
297
+ end
298
+ end
299
+
300
+ describe '#exists?' do
301
+ it "should be true" do
302
+ @sanitized_file.exists?.should be_true
303
+ end
304
+ end
305
+
306
+ describe '#delete' do
307
+ it "should remove it from the filesystem" do
308
+ File.exists?(@sanitized_file.path).should be_true
309
+ @sanitized_file.delete
310
+ File.exists?(@sanitized_file.path).should be_false
311
+ end
312
+ end
313
+ end
314
+
315
+ describe "with a valid Hash" do
316
+ before do
317
+ @hash = {
318
+ "tempfile" => stub_merb_tempfile('llama.jpg'),
319
+ "filename" => "llama.jpg",
320
+ "content_type" => 'image/jpeg'
321
+ }
322
+ @sanitized_file = CarrierWave::SanitizedFile.new(@hash)
323
+ end
324
+
325
+ it_should_behave_like "all valid sanitized files"
326
+
327
+ it_should_behave_like "all valid sanitized files that are stored on disk"
328
+
329
+ describe '#path' do
330
+ it "should return the path of the tempfile" do
331
+ @sanitized_file.path.should_not be_nil
332
+ @sanitized_file.path.should == @hash["tempfile"].path
333
+ end
334
+ end
335
+
336
+ describe '#is_path?' do
337
+ it "should be false" do
338
+ @sanitized_file.is_path?.should be_false
339
+ end
340
+ end
341
+
342
+ end
343
+
344
+ describe "with a valid Tempfile" do
345
+ before do
346
+ @tempfile = stub_tempfile('llama.jpg', 'image/jpeg')
347
+ @sanitized_file = CarrierWave::SanitizedFile.new(@tempfile)
348
+ end
349
+
350
+ it_should_behave_like "all valid sanitized files"
351
+
352
+ it_should_behave_like "all valid sanitized files that are stored on disk"
353
+
354
+ describe '#is_path?' do
355
+ it "should be false" do
356
+ @sanitized_file.is_path?.should be_false
357
+ end
358
+ end
359
+
360
+ describe '#path' do
361
+ it "should return the path of the tempfile" do
362
+ @sanitized_file.path.should_not be_nil
363
+ @sanitized_file.path.should == @tempfile.path
364
+ end
365
+ end
366
+
367
+ end
368
+
369
+ describe "with a valid StringIO" do
370
+ before do
371
+ @sanitized_file = CarrierWave::SanitizedFile.new(stub_stringio('llama.jpg', 'image/jpeg'))
372
+ end
373
+
374
+ it_should_behave_like "all valid sanitized files"
375
+
376
+ describe '#exists?' do
377
+ it "should be false" do
378
+ @sanitized_file.exists?.should be_false
379
+ end
380
+ end
381
+
382
+ describe '#is_path?' do
383
+ it "should be false" do
384
+ @sanitized_file.is_path?.should be_false
385
+ end
386
+ end
387
+
388
+ describe '#path' do
389
+ it "should be nil" do
390
+ @sanitized_file.path.should be_nil
391
+ end
392
+ end
393
+
394
+ describe '#delete' do
395
+ it "should not raise an error" do
396
+ running { @sanitized_file.delete }.should_not raise_error
397
+ end
398
+ end
399
+
400
+ end
401
+
402
+ describe "with a valid File object" do
403
+ before do
404
+ FileUtils.cp(file_path('test.jpg'), file_path('llama.jpg'))
405
+ @sanitized_file = CarrierWave::SanitizedFile.new(stub_file('llama.jpg', 'image/jpeg'))
406
+ @sanitized_file.should_not be_empty
407
+ end
408
+
409
+ it_should_behave_like "all valid sanitized files"
410
+
411
+ it_should_behave_like "all valid sanitized files that are stored on disk"
412
+
413
+ describe '#is_path?' do
414
+ it "should be false" do
415
+ @sanitized_file.is_path?.should be_false
416
+ end
417
+ end
418
+
419
+ describe '#path' do
420
+ it "should return the path of the file" do
421
+ @sanitized_file.path.should_not be_nil
422
+ @sanitized_file.path.should == file_path('llama.jpg')
423
+ end
424
+ end
425
+
426
+ end
427
+
428
+ describe "with a valid path" do
429
+ before do
430
+ FileUtils.cp(file_path('test.jpg'), file_path('llama.jpg'))
431
+ @sanitized_file = CarrierWave::SanitizedFile.new(file_path('llama.jpg'))
432
+ @sanitized_file.should_not be_empty
433
+ end
434
+
435
+ it_should_behave_like "all valid sanitized files"
436
+
437
+ it_should_behave_like "all valid sanitized files that are stored on disk"
438
+
439
+ describe '#is_path?' do
440
+ it "should be true" do
441
+ @sanitized_file.is_path?.should be_true
442
+ end
443
+ end
444
+
445
+ describe '#path' do
446
+ it "should return the path of the file" do
447
+ @sanitized_file.path.should_not be_nil
448
+ @sanitized_file.path.should == file_path('llama.jpg')
449
+ end
450
+ end
451
+
452
+ end
453
+
454
+ describe "with a valid Pathname" do
455
+ before do
456
+ FileUtils.copy_file(file_path('test.jpg'), file_path('llama.jpg'))
457
+ @sanitized_file = CarrierWave::SanitizedFile.new(Pathname.new(file_path('llama.jpg')))
458
+ @sanitized_file.should_not be_empty
459
+ end
460
+
461
+ it_should_behave_like "all valid sanitized files"
462
+
463
+ it_should_behave_like "all valid sanitized files that are stored on disk"
464
+
465
+ describe '#is_path?' do
466
+ it "should be true" do
467
+ @sanitized_file.is_path?.should be_true
468
+ end
469
+ end
470
+
471
+ describe '#path' do
472
+ it "should return the path of the file" do
473
+ @sanitized_file.path.should_not be_nil
474
+ @sanitized_file.path.should == file_path('llama.jpg')
475
+ end
476
+ end
477
+
478
+ end
479
+
480
+ describe "that is empty" do
481
+ before do
482
+ @empty = CarrierWave::SanitizedFile.new(nil)
483
+ end
484
+
485
+ describe '#empty?' do
486
+ it "should be true" do
487
+ @empty.should be_empty
488
+ end
489
+ end
490
+
491
+ describe '#exists?' do
492
+ it "should be false" do
493
+ @empty.exists?.should be_false
494
+ end
495
+ end
496
+
497
+ describe '#is_path?' do
498
+ it "should be false" do
499
+ @empty.is_path?.should be_false
500
+ end
501
+ end
502
+
503
+ describe '#size' do
504
+ it "should be zero" do
505
+ @empty.size.should be_zero
506
+ end
507
+ end
508
+
509
+ describe '#path' do
510
+ it "should be nil" do
511
+ @empty.path.should be_nil
512
+ end
513
+ end
514
+
515
+ describe '#original_filename' do
516
+ it "should be nil" do
517
+ @empty.original_filename.should be_nil
518
+ end
519
+ end
520
+
521
+ describe '#filename' do
522
+ it "should be nil" do
523
+ @empty.filename.should be_nil
524
+ end
525
+ end
526
+
527
+ describe '#basename' do
528
+ it "should be nil" do
529
+ @empty.basename.should be_nil
530
+ end
531
+ end
532
+
533
+ describe '#extension' do
534
+ it "should be nil" do
535
+ @empty.extension.should be_nil
536
+ end
537
+ end
538
+
539
+ describe '#delete' do
540
+ it "should not raise an error" do
541
+ running { @empty.delete }.should_not raise_error
542
+ end
543
+ end
544
+ end
545
+
546
+ describe "that is an empty string" do
547
+ before do
548
+ @empty = CarrierWave::SanitizedFile.new("")
549
+ end
550
+
551
+ describe '#empty?' do
552
+ it "should be true" do
553
+ @empty.should be_empty
554
+ end
555
+ end
556
+
557
+ describe '#exists?' do
558
+ it "should be false" do
559
+ @empty.exists?.should be_false
560
+ end
561
+ end
562
+
563
+ describe '#is_path?' do
564
+ it "should be false" do
565
+ @empty.is_path?.should be_false
566
+ end
567
+ end
568
+
569
+ describe '#size' do
570
+ it "should be zero" do
571
+ @empty.size.should be_zero
572
+ end
573
+ end
574
+
575
+ describe '#path' do
576
+ it "should be nil" do
577
+ @empty.path.should be_nil
578
+ end
579
+ end
580
+
581
+ describe '#original_filename' do
582
+ it "should be nil" do
583
+ @empty.original_filename.should be_nil
584
+ end
585
+ end
586
+
587
+ describe '#filename' do
588
+ it "should be nil" do
589
+ @empty.filename.should be_nil
590
+ end
591
+ end
592
+
593
+ describe '#basename' do
594
+ it "should be nil" do
595
+ @empty.basename.should be_nil
596
+ end
597
+ end
598
+
599
+ describe '#extension' do
600
+ it "should be nil" do
601
+ @empty.extension.should be_nil
602
+ end
603
+ end
604
+
605
+ describe '#delete' do
606
+ it "should not raise an error" do
607
+ running { @empty.delete }.should_not raise_error
608
+ end
609
+ end
610
+ end
611
+
612
+ end