jnicklas-carrierwave 0.2.2 → 0.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 (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