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