durran-carrierwave 0.3.2.3

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.
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