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.
- data/README.rdoc +35 -20
- data/Rakefile +1 -1
- data/lib/carrierwave/compatibility/paperclip.rb +91 -0
- data/lib/carrierwave/core_ext/inheritable_attributes.rb +102 -0
- data/lib/carrierwave/core_ext/module_setup.rb +49 -0
- data/lib/carrierwave/mount.rb +119 -103
- data/lib/carrierwave/orm/activerecord.rb +6 -1
- data/lib/carrierwave/orm/sequel.rb +15 -2
- data/lib/carrierwave/processing/rmagick.rb +8 -7
- data/lib/carrierwave/storage/abstract.rb +16 -1
- data/lib/carrierwave/storage/file.rb +20 -1
- data/lib/carrierwave/uploader/cache.rb +114 -0
- data/lib/carrierwave/uploader/callbacks.rb +40 -0
- data/lib/carrierwave/uploader/default_path.rb +21 -0
- data/lib/carrierwave/uploader/extension_whitelist.rb +35 -0
- data/lib/carrierwave/uploader/mountable.rb +37 -0
- data/lib/carrierwave/uploader/paths.rb +25 -0
- data/lib/carrierwave/uploader/processing.rb +79 -0
- data/lib/carrierwave/uploader/proxy.rb +60 -0
- data/lib/carrierwave/uploader/remove.rb +21 -0
- data/lib/carrierwave/uploader/store.rb +154 -0
- data/lib/carrierwave/uploader/url.rb +22 -0
- data/lib/carrierwave/uploader/versions.rb +145 -0
- data/lib/carrierwave/uploader.rb +31 -593
- data/lib/carrierwave.rb +55 -7
- data/lib/generators/uploader_generator.rb +1 -1
- data/rails_generators/uploader/templates/uploader.rb +12 -8
- data/spec/compatibility/paperclip_spec.rb +41 -0
- data/spec/mount_spec.rb +88 -25
- data/spec/orm/activerecord_spec.rb +7 -9
- data/spec/orm/datamapper_spec.rb +7 -9
- data/spec/orm/sequel_spec.rb +47 -32
- data/spec/spec_helper.rb +13 -0
- data/spec/uploader/cache_spec.rb +194 -0
- data/spec/uploader/default_path_spec.rb +66 -0
- data/spec/uploader/extension_whitelist_spec.rb +42 -0
- data/spec/uploader/mountable_spec.rb +31 -0
- data/spec/uploader/paths_spec.rb +20 -0
- data/spec/uploader/processing_spec.rb +60 -0
- data/spec/uploader/proxy_spec.rb +52 -0
- data/spec/uploader/remove_spec.rb +65 -0
- data/spec/uploader/store_spec.rb +260 -0
- data/spec/uploader/url_spec.rb +85 -0
- data/spec/uploader/versions_spec.rb +275 -0
- metadata +34 -3
- 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
|
|
@@ -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
|
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
|
49
|
-
@instance.should_receive(:read_uploader).with(:image).and_return(nil)
|
50
|
-
@instance.image.should
|
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
|
54
|
-
@instance.should_receive(:read_uploader).with(:image).and_return('')
|
55
|
-
@instance.image.should
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
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
|
165
|
+
@event.image.should be_blank
|
168
166
|
@event[:image].should == ''
|
169
167
|
end
|
170
168
|
|
data/spec/orm/datamapper_spec.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
135
|
+
@event.image.should be_blank
|
138
136
|
@event.attribute_get(:image).should == ''
|
139
137
|
end
|
140
138
|
|
data/spec/orm/sequel_spec.rb
CHANGED
@@ -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
|
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
|
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
|
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
|
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
|
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
|
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
|
-
|
113
|
-
|
114
|
-
|
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
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
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
|
-
|
131
|
-
|
132
|
-
|
133
|
-
|
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
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
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
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
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
|