jnicklas-carrierwave 0.2.2 → 0.2.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. data/README.rdoc +35 -20
  2. data/Rakefile +1 -1
  3. data/lib/carrierwave/compatibility/paperclip.rb +91 -0
  4. data/lib/carrierwave/core_ext/inheritable_attributes.rb +102 -0
  5. data/lib/carrierwave/core_ext/module_setup.rb +49 -0
  6. data/lib/carrierwave/mount.rb +119 -103
  7. data/lib/carrierwave/orm/activerecord.rb +6 -1
  8. data/lib/carrierwave/orm/sequel.rb +15 -2
  9. data/lib/carrierwave/processing/rmagick.rb +8 -7
  10. data/lib/carrierwave/storage/abstract.rb +16 -1
  11. data/lib/carrierwave/storage/file.rb +20 -1
  12. data/lib/carrierwave/uploader/cache.rb +114 -0
  13. data/lib/carrierwave/uploader/callbacks.rb +40 -0
  14. data/lib/carrierwave/uploader/default_path.rb +21 -0
  15. data/lib/carrierwave/uploader/extension_whitelist.rb +35 -0
  16. data/lib/carrierwave/uploader/mountable.rb +37 -0
  17. data/lib/carrierwave/uploader/paths.rb +25 -0
  18. data/lib/carrierwave/uploader/processing.rb +79 -0
  19. data/lib/carrierwave/uploader/proxy.rb +60 -0
  20. data/lib/carrierwave/uploader/remove.rb +21 -0
  21. data/lib/carrierwave/uploader/store.rb +154 -0
  22. data/lib/carrierwave/uploader/url.rb +22 -0
  23. data/lib/carrierwave/uploader/versions.rb +145 -0
  24. data/lib/carrierwave/uploader.rb +31 -593
  25. data/lib/carrierwave.rb +55 -7
  26. data/lib/generators/uploader_generator.rb +1 -1
  27. data/rails_generators/uploader/templates/uploader.rb +12 -8
  28. data/spec/compatibility/paperclip_spec.rb +41 -0
  29. data/spec/mount_spec.rb +88 -25
  30. data/spec/orm/activerecord_spec.rb +7 -9
  31. data/spec/orm/datamapper_spec.rb +7 -9
  32. data/spec/orm/sequel_spec.rb +47 -32
  33. data/spec/spec_helper.rb +13 -0
  34. data/spec/uploader/cache_spec.rb +194 -0
  35. data/spec/uploader/default_path_spec.rb +66 -0
  36. data/spec/uploader/extension_whitelist_spec.rb +42 -0
  37. data/spec/uploader/mountable_spec.rb +31 -0
  38. data/spec/uploader/paths_spec.rb +20 -0
  39. data/spec/uploader/processing_spec.rb +60 -0
  40. data/spec/uploader/proxy_spec.rb +52 -0
  41. data/spec/uploader/remove_spec.rb +65 -0
  42. data/spec/uploader/store_spec.rb +260 -0
  43. data/spec/uploader/url_spec.rb +85 -0
  44. data/spec/uploader/versions_spec.rb +275 -0
  45. metadata +34 -3
  46. data/spec/uploader_spec.rb +0 -887
data/lib/carrierwave.rb CHANGED
@@ -1,8 +1,27 @@
1
1
  require 'fileutils'
2
+ require 'carrierwave/core_ext/module_setup'
3
+ require 'carrierwave/core_ext/inheritable_attributes'
2
4
 
3
5
  module CarrierWave
4
6
  class << self
5
- attr_accessor :config
7
+ attr_accessor :config, :logger
8
+
9
+ def logger
10
+ return @logger if @logger
11
+ require 'logger'
12
+ @logger = Logger.new(STDOUT)
13
+ end
14
+
15
+ ##
16
+ # Generates a unique cache id for use in the caching system
17
+ #
18
+ # === Returns
19
+ #
20
+ # [String] a cache id in the format YYYYMMDD-HHMM-PID-RND
21
+ #
22
+ def generate_cache_id
23
+ Time.now.strftime('%Y%m%d-%H%M') + '-' + Process.pid.to_s + '-' + ("%04d" % rand(9999))
24
+ end
6
25
  end
7
26
 
8
27
  class UploadError < StandardError; end
@@ -18,7 +37,6 @@ module CarrierWave
18
37
  class ProcessingError < UploadError; end
19
38
 
20
39
  autoload :SanitizedFile, 'carrierwave/sanitized_file'
21
- autoload :Uploader, 'carrierwave/uploader'
22
40
  autoload :Mount, 'carrierwave/mount'
23
41
  autoload :RMagick, 'carrierwave/processing/rmagick'
24
42
  autoload :ImageScience, 'carrierwave/processing/image_science'
@@ -29,6 +47,26 @@ module CarrierWave
29
47
  autoload :S3, 'carrierwave/storage/s3'
30
48
  end
31
49
 
50
+ module Uploader
51
+ autoload :Base, 'carrierwave/uploader'
52
+ autoload :Cache, 'carrierwave/uploader/cache'
53
+ autoload :Store, 'carrierwave/uploader/store'
54
+ autoload :Callbacks, 'carrierwave/uploader/callbacks'
55
+ autoload :Processing, 'carrierwave/uploader/processing'
56
+ autoload :Versions, 'carrierwave/uploader/versions'
57
+ autoload :Remove, 'carrierwave/uploader/remove'
58
+ autoload :Paths, 'carrierwave/uploader/paths'
59
+ autoload :ExtensionWhitelist, 'carrierwave/uploader/extension_whitelist'
60
+ autoload :DefaultPath, 'carrierwave/uploader/default_path'
61
+ autoload :Proxy, 'carrierwave/uploader/proxy'
62
+ autoload :Url, 'carrierwave/uploader/url'
63
+ autoload :Mountable, 'carrierwave/uploader/mountable'
64
+ end
65
+
66
+ module Compatibility
67
+ autoload :Paperclip, 'carrierwave/compatibility/paperclip'
68
+ end
69
+
32
70
  module Test
33
71
  autoload :Matchers, 'carrierwave/test/matchers'
34
72
  end
@@ -57,20 +95,30 @@ CarrierWave.config = {
57
95
  }
58
96
  }
59
97
 
60
- if defined?(Merb)
61
-
98
+ if defined?(Merb::Plugins)
62
99
  CarrierWave.config[:root] = Merb.root
63
100
  CarrierWave.config[:public] = Merb.dir_for(:public)
64
101
 
102
+ Merb::BootLoader.before_app_loads do
103
+ # Set logger
104
+ CarrierWave.logger ||= Merb.logger
105
+ # Setup path for uploaders and load all of them before classes are loaded
106
+ Merb.push_path(:uploaders, Merb.root / 'app' / 'uploaders', '*.rb')
107
+ Dir.glob(File.join(Merb.load_paths[:uploaders])).each {|f| require f }
108
+ end
109
+
65
110
  orm_path = File.dirname(__FILE__) / 'carrierwave' / 'orm' / Merb.orm
66
111
  require orm_path if File.exist?(orm_path + '.rb')
67
112
 
68
- Merb.push_path(:uploader, Merb.root / "app" / "uploaders")
69
-
70
113
  Merb.add_generators File.dirname(__FILE__) / 'generators' / 'uploader_generator'
71
114
 
72
115
  elsif defined?(Rails)
73
-
116
+ begin
117
+ CarrierWave.logger = Rails.logger
118
+ rescue
119
+ # Rails < 2.1
120
+ CarrierWave.logger = RAILS_DEFAULT_LOGGER
121
+ end
74
122
  CarrierWave.config[:root] = Rails.root
75
123
  CarrierWave.config[:public] = File.join(Rails.root, 'public')
76
124
 
@@ -10,7 +10,7 @@ module Merb
10
10
 
11
11
  template :uploader do |t|
12
12
  t.source = 'uploader.rb'
13
- t.destination = "app/models/#{file_name}_uploader.rb"
13
+ t.destination = "app/uploaders/#{file_name}_uploader.rb"
14
14
  end
15
15
  end
16
16
 
@@ -1,6 +1,4 @@
1
- class <%= class_name %>Uploader
2
-
3
- include CarrierWave::Uploader
1
+ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
4
2
 
5
3
  # Include RMagick or ImageScience support
6
4
  # include CarrierWave::RMagick
@@ -10,6 +8,17 @@ class <%= class_name %>Uploader
10
8
  storage :file
11
9
  # storage :s3
12
10
 
11
+ # Override the directory where uploaded files will be stored
12
+ # This is a sensible default for uploaders that are meant to be mounted:
13
+ def store_dir
14
+ "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
15
+ end
16
+
17
+ # Provide a default path as a default if there hasn't been a file uploaded
18
+ # def default_path
19
+ # "images/fallback/" + [version_name, "default.png"].compact.join('_')
20
+ # end
21
+
13
22
  # Process files as they are uploaded.
14
23
  # process :scale => [200, 300]
15
24
  #
@@ -33,9 +42,4 @@ class <%= class_name %>Uploader
33
42
  # "something.jpg"
34
43
  # end
35
44
 
36
- # Override the directory where uploaded files will be stored
37
- # This is a sensible default for uploaders that are meant to be mounted:
38
- def store_dir
39
- "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
40
- end
41
45
  end
@@ -0,0 +1,41 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ require 'carrierwave/orm/activerecord'
4
+
5
+ describe CarrierWave::Compatibility::Paperclip do
6
+
7
+ before do
8
+ @uploader_class = Class.new(CarrierWave::Uploader::Base) do
9
+ include CarrierWave::Compatibility::Paperclip
10
+ end
11
+ @model = mock('a model')
12
+ @model.stub!(:id).and_return(23)
13
+ @uploader = @uploader_class.new(@model, :monkey)
14
+ end
15
+
16
+ after do
17
+ FileUtils.rm_rf(public_path)
18
+ end
19
+
20
+ describe '#store_path' do
21
+ it "should mimics paperclip default" do
22
+ @uploader.store_path("monkey.png").should == CarrierWave.config[:root] + "/public/system/monkeys/23/original/monkey.png"
23
+ end
24
+
25
+ it "should interpolate the root path" do
26
+ @uploader.stub!(:paperclip_path).and_return(":rails_root/foo/bar")
27
+ @uploader.store_path("monkey.png").should == CarrierWave.config[:root] + "/foo/bar"
28
+ end
29
+
30
+ it "should interpolate the attachment" do
31
+ @uploader.stub!(:paperclip_path).and_return("/foo/:attachment/bar")
32
+ @uploader.store_path("monkey.png").should == "/foo/monkeys/bar"
33
+ end
34
+
35
+ it "should interpolate the id" do
36
+ @uploader.stub!(:paperclip_path).and_return("/foo/:id/bar")
37
+ @uploader.store_path("monkey.png").should == "/foo/23/bar"
38
+ end
39
+ end
40
+
41
+ end
data/spec/mount_spec.rb CHANGED
@@ -12,13 +12,29 @@ describe CarrierWave::Mount do
12
12
  @class = Class.new
13
13
  @class.send(:extend, CarrierWave::Mount)
14
14
 
15
- @uploader = Class.new do
16
- include CarrierWave::Uploader
17
- end
15
+ @uploader = Class.new(CarrierWave::Uploader::Base)
18
16
 
19
17
  @class.mount_uploader(:image, @uploader)
20
18
  @instance = @class.new
21
19
  end
20
+
21
+ it "should maintain the ability to super" do
22
+ pending "I can't make this work with datamapper" do
23
+ @class.class_eval do
24
+ def image_uploader
25
+ super
26
+ end
27
+
28
+ def image=(val)
29
+ super
30
+ end
31
+ end
32
+
33
+ @instance.image_uploader.should be_an_instance_of(@uploader)
34
+ @instance.image = stub_file('test.jpg')
35
+ @instance.image.should be_an_instance_of(@uploader)
36
+ end
37
+ end
22
38
 
23
39
  describe '#image_uploader' do
24
40
  it "should return the uploader" do
@@ -45,14 +61,16 @@ describe CarrierWave::Mount do
45
61
 
46
62
  describe '#image' do
47
63
 
48
- it "should return nil when nothing has been assigned" do
49
- @instance.should_receive(:read_uploader).with(:image).and_return(nil)
50
- @instance.image.should be_nil
64
+ it "should return a blank uploader when nothing has been assigned" do
65
+ @instance.should_receive(:read_uploader).with(:image).twice.and_return(nil)
66
+ @instance.image.should be_an_instance_of(@uploader)
67
+ @instance.image.should be_blank
51
68
  end
52
69
 
53
- it "should return nil when an empty string has been assigned" do
54
- @instance.should_receive(:read_uploader).with(:image).and_return('')
55
- @instance.image.should be_nil
70
+ it "should return a blank uploader when an empty string has been assigned" do
71
+ @instance.should_receive(:read_uploader).with(:image).twice.and_return('')
72
+ @instance.image.should be_an_instance_of(@uploader)
73
+ @instance.image.should be_blank
56
74
  end
57
75
 
58
76
  it "should retrieve a file from the storage if a value is stored in the database" do
@@ -96,7 +114,7 @@ describe CarrierWave::Mount do
96
114
  end
97
115
  end
98
116
  @instance.image = stub_file('test.jpg')
99
- @instance.image.should be_nil
117
+ @instance.image.should be_blank
100
118
  end
101
119
 
102
120
  it "should fail silently if the image fails to be processed" do
@@ -111,6 +129,25 @@ describe CarrierWave::Mount do
111
129
 
112
130
  end
113
131
 
132
+ describe '#image?' do
133
+
134
+ it "should be false when nothing has been assigned" do
135
+ @instance.should_receive(:read_uploader).with(:image).and_return(nil)
136
+ @instance.image?.should be_false
137
+ end
138
+
139
+ it "should be false when an empty string has been assigned" do
140
+ @instance.should_receive(:read_uploader).with(:image).and_return('')
141
+ @instance.image?.should be_false
142
+ end
143
+
144
+ it "should be true when a file has been cached" do
145
+ @instance.image = stub_file('test.jpg')
146
+ @instance.image?.should be_true
147
+ end
148
+
149
+ end
150
+
114
151
  describe '#image_url' do
115
152
 
116
153
  it "should return nil when nothing has been assigned" do
@@ -175,12 +212,12 @@ describe CarrierWave::Mount do
175
212
 
176
213
  it "should do nothing when nil is assigned" do
177
214
  @instance.image_cache = nil
178
- @instance.image.should be_nil
215
+ @instance.image.should be_blank
179
216
  end
180
217
 
181
218
  it "should do nothing when an empty string is assigned" do
182
219
  @instance.image_cache = ''
183
- @instance.image.should be_nil
220
+ @instance.image.should be_blank
184
221
  end
185
222
 
186
223
  it "retrieve from cache when a cache name is assigned" do
@@ -204,7 +241,7 @@ describe CarrierWave::Mount do
204
241
 
205
242
  it "should do nothing when no file has been uploaded" do
206
243
  @instance.store_image!
207
- @instance.image.should be_nil
244
+ @instance.image.should be_blank
208
245
  end
209
246
 
210
247
  it "store an assigned file" do
@@ -220,10 +257,34 @@ describe CarrierWave::Mount do
220
257
  end
221
258
 
222
259
  it "should remove an uploaded file when remove_image? returns true" do
260
+ @instance.should_receive(:write_uploader).with(:image, "")
223
261
  @instance.image = stub_file('test.jpg')
262
+ path = @instance.image.current_path
224
263
  @instance.remove_image = true
225
264
  @instance.store_image!
226
- @instance.image.should be_nil
265
+ @instance.image.should be_blank
266
+ File.exist?(path).should be_false
267
+ end
268
+ end
269
+
270
+ describe '#remove_image!' do
271
+
272
+ before do
273
+ @instance.stub!(:write_uploader)
274
+ @instance.stub!(:read_uploader).and_return(nil)
275
+ end
276
+
277
+ it "should do nothing when no file has been uploaded" do
278
+ @instance.remove_image!
279
+ @instance.image.should be_blank
280
+ end
281
+
282
+ it "should remove an uploaded file" do
283
+ @instance.image = stub_file('test.jpg')
284
+ path = @instance.image.current_path
285
+ @instance.remove_image!
286
+ @instance.image.should be_blank
287
+ File.exist?(path).should be_false
227
288
  end
228
289
  end
229
290
 
@@ -331,8 +392,8 @@ describe CarrierWave::Mount do
331
392
  @instance.stub!(:read_uploader).and_return('test.jpg')
332
393
  end
333
394
 
334
- it "should return an instance of a subclass of CarrierWave::Uploader" do
335
- @instance.image.should be_a(CarrierWave::Uploader)
395
+ it "should return an instance of a subclass of CarrierWave::Uploader::Base" do
396
+ @instance.image.should be_a(CarrierWave::Uploader::Base)
336
397
  end
337
398
 
338
399
  it "should set the path to the store dir" do
@@ -353,9 +414,7 @@ describe CarrierWave::Mount do
353
414
  @class = Class.new
354
415
  @class.send(:extend, CarrierWave::Mount)
355
416
 
356
- @uploader = Class.new do
357
- include CarrierWave::Uploader
358
- end
417
+ @uploader = Class.new(CarrierWave::Uploader::Base)
359
418
 
360
419
  @class.mount_uploader(:image, @uploader, :ignore_integrity_errors => false)
361
420
  @instance = @class.new
@@ -380,9 +439,7 @@ describe CarrierWave::Mount do
380
439
  @class = Class.new
381
440
  @class.send(:extend, CarrierWave::Mount)
382
441
 
383
- @uploader = Class.new do
384
- include CarrierWave::Uploader
385
- end
442
+ @uploader = Class.new(CarrierWave::Uploader::Base)
386
443
 
387
444
  @class.mount_uploader(:image, @uploader, :ignore_processing_errors => false)
388
445
  @instance = @class.new
@@ -409,9 +466,7 @@ describe CarrierWave::Mount do
409
466
  @class = Class.new
410
467
  @class.send(:extend, CarrierWave::Mount)
411
468
 
412
- @uploader = Class.new do
413
- include CarrierWave::Uploader
414
- end
469
+ @uploader = Class.new(CarrierWave::Uploader::Base)
415
470
 
416
471
  @class.mount_uploader(:image, @uploader, :mount_on => :monkey)
417
472
  @instance = @class.new
@@ -433,6 +488,14 @@ describe CarrierWave::Mount do
433
488
  @instance.image = stub_file('test.jpg')
434
489
  @instance.store_image!
435
490
  end
491
+
492
+ it "should remove from the given column when remove_image is true" do
493
+ @instance.image = stub_file('test.jpg')
494
+ @instance.store_image!
495
+ @instance.remove_image = true
496
+ @instance.should_receive(:write_uploader).with(:monkey, "")
497
+ @instance.store_image!
498
+ end
436
499
  end
437
500
  end
438
501
 
@@ -44,9 +44,7 @@ describe CarrierWave::ActiveRecord do
44
44
  @class = Event#{$arclass}
45
45
  RUBY
46
46
  @class.table_name = "events"
47
- @uploader = Class.new do
48
- include CarrierWave::Uploader
49
- end
47
+ @uploader = Class.new(CarrierWave::Uploader::Base)
50
48
  @class.mount_uploader(:image, @uploader)
51
49
  @event = @class.new
52
50
  end
@@ -54,14 +52,14 @@ describe CarrierWave::ActiveRecord do
54
52
  describe '#image' do
55
53
 
56
54
  it "should return nil when nothing has been assigned" do
57
- @event.image.should be_nil
55
+ @event.image.should be_blank
58
56
  end
59
57
 
60
58
  it "should return nil when an empty string has been assigned" do
61
59
  @event[:image] = ''
62
60
  @event.save
63
61
  @event.reload
64
- @event.image.should be_nil
62
+ @event.image.should be_blank
65
63
  end
66
64
 
67
65
  it "should retrieve a file from the storage if a value is stored in the database" do
@@ -98,12 +96,12 @@ describe CarrierWave::ActiveRecord do
98
96
 
99
97
  it "should do nothing when nil is assigned" do
100
98
  @event.image = nil
101
- @event.image.should be_nil
99
+ @event.image.should be_blank
102
100
  end
103
101
 
104
102
  it "should do nothing when an empty string is assigned" do
105
103
  @event.image = ''
106
- @event.image.should be_nil
104
+ @event.image.should be_blank
107
105
  end
108
106
 
109
107
  it "should make the record invalid when an integrity error occurs" do
@@ -133,7 +131,7 @@ describe CarrierWave::ActiveRecord do
133
131
 
134
132
  it "should do nothing when no file has been assigned" do
135
133
  @event.save.should be_true
136
- @event.image.should be_nil
134
+ @event.image.should be_blank
137
135
  end
138
136
 
139
137
  it "should copy the file to the upload directory when a file has been assigned" do
@@ -164,7 +162,7 @@ describe CarrierWave::ActiveRecord do
164
162
  @event.remove_image = true
165
163
  @event.save!
166
164
  @event.reload
167
- @event.image.should be_nil
165
+ @event.image.should be_blank
168
166
  @event[:image].should == ''
169
167
  end
170
168
 
@@ -7,9 +7,7 @@ DataMapper.setup(:default, 'sqlite3::memory:')
7
7
  describe CarrierWave::DataMapper do
8
8
 
9
9
  before do
10
- uploader = Class.new do
11
- include CarrierWave::Uploader
12
- end
10
+ uploader = Class.new(CarrierWave::Uploader::Base)
13
11
 
14
12
  @class = Class.new
15
13
  @class.class_eval do
@@ -33,14 +31,14 @@ describe CarrierWave::DataMapper do
33
31
  describe '#image' do
34
32
 
35
33
  it "should return nil when nothing has been assigned" do
36
- @event.image.should be_nil
34
+ @event.image.should be_blank
37
35
  end
38
36
 
39
37
  it "should return nil when an empty string has been assigned" do
40
38
  repository(:default).adapter.query("INSERT INTO events (image) VALUES ('')")
41
39
  @event = @class.first
42
40
 
43
- @event.image.should be_nil
41
+ @event.image.should be_blank
44
42
  end
45
43
 
46
44
  it "should retrieve a file from the storage if a value is stored in the database" do
@@ -79,12 +77,12 @@ describe CarrierWave::DataMapper do
79
77
 
80
78
  it "should do nothing when nil is assigned" do
81
79
  @event.image = nil
82
- @event.image.should be_nil
80
+ @event.image.should be_blank
83
81
  end
84
82
 
85
83
  it "should do nothing when an empty string is assigned" do
86
84
  @event.image = ''
87
- @event.image.should be_nil
85
+ @event.image.should be_blank
88
86
  end
89
87
 
90
88
  end
@@ -93,7 +91,7 @@ describe CarrierWave::DataMapper do
93
91
 
94
92
  it "should do nothing when no file has been assigned" do
95
93
  @event.save
96
- @event.image.should be_nil
94
+ @event.image.should be_blank
97
95
  end
98
96
 
99
97
  it "should copy the file to the upload directory when a file has been assigned" do
@@ -134,7 +132,7 @@ describe CarrierWave::DataMapper do
134
132
  @event.remove_image = true
135
133
  @event.save
136
134
  @event.reload
137
- @event.image.should be_nil
135
+ @event.image.should be_blank
138
136
  @event.attribute_get(:image).should == ''
139
137
  end
140
138
 
@@ -7,9 +7,7 @@ DB = Sequel.sqlite
7
7
  describe CarrierWave::Sequel do
8
8
 
9
9
  def setup_variables_for_class(klass)
10
- uploader = Class.new do
11
- include CarrierWave::Uploader
12
- end
10
+ uploader = Class.new(CarrierWave::Uploader::Base)
13
11
  klass.mount_uploader(:image, uploader)
14
12
  model = klass.new
15
13
  [klass, uploader, model]
@@ -38,14 +36,14 @@ describe CarrierWave::Sequel do
38
36
  describe '#image' do
39
37
 
40
38
  it "should return nil when nothing has been assigned" do
41
- @event.image.should be_nil
39
+ @event.image.should be_blank
42
40
  end
43
41
 
44
42
  it "should return nil when an empty string has been assigned" do
45
43
  @event[:image] = ''
46
44
  @event.save
47
45
  @event.reload
48
- @event.image.should be_nil
46
+ @event.image.should be_blank
49
47
  end
50
48
 
51
49
  it "should retrieve a file from the storage if a value is stored in the database" do
@@ -82,12 +80,12 @@ describe CarrierWave::Sequel do
82
80
 
83
81
  it "should do nothing when nil is assigned" do
84
82
  @event.image = nil
85
- @event.image.should be_nil
83
+ @event.image.should be_blank
86
84
  end
87
85
 
88
86
  it "should do nothing when an empty string is assigned" do
89
87
  @event.image = ''
90
- @event.image.should be_nil
88
+ @event.image.should be_blank
91
89
  end
92
90
 
93
91
  end
@@ -96,7 +94,7 @@ describe CarrierWave::Sequel do
96
94
 
97
95
  it "should do nothing when no file has been assigned" do
98
96
  @event.save.should be_true
99
- @event.image.should be_nil
97
+ @event.image.should be_blank
100
98
  end
101
99
 
102
100
  it "should copy the file to the upload directory when a file has been assigned" do
@@ -109,38 +107,53 @@ describe CarrierWave::Sequel do
109
107
  describe 'with validation' do
110
108
 
111
109
  before do
112
- @class.class_eval do
113
- validates_each :image do |object, attribute, value|
114
- object.errors[attribute] << 'FAIL!'
110
+ # Add validations
111
+ if CarrierWave::Sequel.new_sequel?
112
+ @class.class_eval do
113
+ def validate
114
+ errors.add(:image, 'FAIL!')
115
+ end
116
+ end
117
+ else
118
+ @class.class_eval do
119
+ validates_each(:image) do |o,a,v|
120
+ o.errors.add(a, 'FAIL!')
121
+ end
115
122
  end
116
123
  end
124
+ # Turn off raising the exceptions on save
125
+ @event.raise_on_save_failure = false
117
126
  end
118
127
 
119
128
  it "should do nothing when a validation fails" do
120
- pending "I don't understand how this is supposed to work :S" do
121
- @event.image = stub_file('test.jpeg')
122
- @event.save.should be_false
123
- @event.image.should be_an_instance_of(@uploader)
124
- @event.image.current_path.should =~ /^#{public_path('uploads/tmp')}/
125
- end
129
+ @event.image = stub_file('test.jpeg')
130
+ @event.should_not be_valid
131
+ @event.save
132
+ @event.should be_new
133
+ @event.image.should be_an_instance_of(@uploader)
134
+ @event.image.current_path.should =~ /^#{public_path('uploads/tmp')}/
126
135
  end
127
136
  end
128
137
 
129
138
  it "should assign the filename to the database" do
130
- @event.image = stub_file('test.jpeg')
131
- @event.save.should be_true
132
- @event.reload
133
- @event[:image].should == 'test.jpeg'
139
+ pending "Sequel support is currently broken" do
140
+ @event.image = stub_file('test.jpeg')
141
+ @event.save.should be_true
142
+ @event.reload
143
+ @event[:image].should == 'test.jpeg'
144
+ end
134
145
  end
135
146
 
136
147
  it "should remove the image if remove_image? returns true" do
137
- @event.image = stub_file('test.jpeg')
138
- @event.save
139
- @event.remove_image = true
140
- @event.save
141
- @event.reload
142
- @event.image.should be_nil
143
- @event[:image].should == ''
148
+ pending "Sequel support is currently broken" do
149
+ @event.image = stub_file('test.jpeg')
150
+ @event.save
151
+ @event.remove_image = true
152
+ @event.save
153
+ @event.reload
154
+ @event.image.should be_blank
155
+ @event[:image].should == ''
156
+ end
144
157
  end
145
158
  end
146
159
 
@@ -165,10 +178,12 @@ describe CarrierWave::Sequel do
165
178
  end
166
179
 
167
180
  it "should assign an overridden filename to the database" do
168
- @event.image = stub_file('test.jpeg')
169
- @event.save.should be_true
170
- @event.reload
171
- @event[:image].should == 'jonas.jpeg'
181
+ pending "Sequel support is currently broken" do
182
+ @event.image = stub_file('test.jpeg')
183
+ @event.save.should be_true
184
+ @event.reload
185
+ @event[:image].should == 'jonas.jpeg'
186
+ end
172
187
  end
173
188
 
174
189
  end
data/spec/spec_helper.rb CHANGED
@@ -14,9 +14,13 @@ end
14
14
  require 'tempfile'
15
15
  #require 'ruby-debug'
16
16
  require 'spec'
17
+ require 'spec/autorun'
17
18
 
18
19
  require 'carrierwave'
19
20
 
21
+ require 'logger'
22
+ CarrierWave.logger = Logger.new(File.join(File.dirname(__FILE__), 'test.log'))
23
+
20
24
  alias :running :lambda
21
25
 
22
26
  def file_path( *paths )
@@ -32,6 +36,14 @@ CarrierWave.config[:root] = File.expand_path(File.dirname(__FILE__))
32
36
 
33
37
  module CarrierWave
34
38
  module Test
39
+ module MockStorage
40
+ def mock_storage(kind)
41
+ storage = mock("storage for #{kind} uploader")
42
+ storage.stub!(:setup!)
43
+ storage
44
+ end
45
+ end
46
+
35
47
  module MockFiles
36
48
  def stub_merb_tempfile(filename)
37
49
  raise "#{path} file does not exist" unless File.exist?(file_path(filename))
@@ -81,4 +93,5 @@ end
81
93
  Spec::Runner.configure do |config|
82
94
  config.include CarrierWave::Test::Matchers
83
95
  config.include CarrierWave::Test::MockFiles
96
+ config.include CarrierWave::Test::MockStorage
84
97
  end