carrierwave 0.2.1 → 0.2.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of carrierwave might be problematic. Click here for more details.
- data/README.rdoc +35 -20
- data/Rakefile +1 -1
- data/lib/carrierwave.rb +55 -7
- 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.rb +31 -593
- 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/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/test.log +1717 -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 +30 -3
- data/spec/uploader_spec.rb +0 -887
@@ -0,0 +1,194 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#cache_dir' do
|
15
|
+
it "should default to the config option" do
|
16
|
+
@uploader.cache_dir.should == 'uploads/tmp'
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
describe '#cache!' do
|
21
|
+
|
22
|
+
before do
|
23
|
+
CarrierWave.stub!(:generate_cache_id).and_return('20071201-1234-345-2255')
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should cache a file" do
|
27
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
28
|
+
@uploader.file.should be_an_instance_of(CarrierWave::SanitizedFile)
|
29
|
+
end
|
30
|
+
|
31
|
+
it "should be cached" do
|
32
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
33
|
+
@uploader.should be_cached
|
34
|
+
end
|
35
|
+
|
36
|
+
it "should store the cache name" do
|
37
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
38
|
+
@uploader.cache_name.should == '20071201-1234-345-2255/test.jpg'
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should set the filename to the file's sanitized filename" do
|
42
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
43
|
+
@uploader.filename.should == 'test.jpg'
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should move it to the tmp dir" do
|
47
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
48
|
+
@uploader.file.path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpg')
|
49
|
+
@uploader.file.exists?.should be_true
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should not move it if cache_to_cache_dir is false" do
|
53
|
+
CarrierWave.config[:cache_to_cache_dir] = false
|
54
|
+
path = file_path('test.jpg')
|
55
|
+
@uploader.cache!(File.open(path))
|
56
|
+
@uploader.current_path.should == path
|
57
|
+
@uploader.file.exists?.should be_true
|
58
|
+
CarrierWave.config[:cache_to_cache_dir] = true
|
59
|
+
end
|
60
|
+
|
61
|
+
it "should set the url" do
|
62
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
63
|
+
@uploader.url.should == '/uploads/tmp/20071201-1234-345-2255/test.jpg'
|
64
|
+
end
|
65
|
+
|
66
|
+
it "should raise an error when trying to cache a string" do
|
67
|
+
running {
|
68
|
+
@uploader.cache!(file_path('test.jpg'))
|
69
|
+
}.should raise_error(CarrierWave::FormNotMultipart)
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should raise an error when trying to cache a pathname" do
|
73
|
+
running {
|
74
|
+
@uploader.cache!(Pathname.new(file_path('test.jpg')))
|
75
|
+
}.should raise_error(CarrierWave::FormNotMultipart)
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should do nothing when trying to cache an empty file" do
|
79
|
+
@uploader.cache!(nil)
|
80
|
+
end
|
81
|
+
|
82
|
+
it "should set permissions if options are given" do
|
83
|
+
old_permissions = CarrierWave.config[:permissions]
|
84
|
+
CarrierWave.config[:permissions] = 0777
|
85
|
+
|
86
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
87
|
+
@uploader.should have_permissions(0777)
|
88
|
+
|
89
|
+
CarrierWave.config[:permissions] = old_permissions
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
describe '#retrieve_from_cache!' do
|
94
|
+
it "should cache a file" do
|
95
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
96
|
+
@uploader.file.should be_an_instance_of(CarrierWave::SanitizedFile)
|
97
|
+
end
|
98
|
+
|
99
|
+
it "should be cached" do
|
100
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
101
|
+
@uploader.should be_cached
|
102
|
+
end
|
103
|
+
|
104
|
+
it "should set the path to the tmp dir" do
|
105
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
106
|
+
@uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpeg')
|
107
|
+
end
|
108
|
+
|
109
|
+
it "should overwrite a file that has already been cached" do
|
110
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
111
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/bork.txt')
|
112
|
+
@uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/bork.txt')
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should store the cache_name" do
|
116
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
117
|
+
@uploader.cache_name.should == '20071201-1234-345-2255/test.jpeg'
|
118
|
+
end
|
119
|
+
|
120
|
+
it "should store the filename" do
|
121
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
122
|
+
@uploader.filename.should == 'test.jpeg'
|
123
|
+
end
|
124
|
+
|
125
|
+
it "should set the url" do
|
126
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
127
|
+
@uploader.url.should == '/uploads/tmp/20071201-1234-345-2255/test.jpeg'
|
128
|
+
end
|
129
|
+
|
130
|
+
it "should raise an error when the cache_id has an invalid format" do
|
131
|
+
running {
|
132
|
+
@uploader.retrieve_from_cache!('12345/test.jpeg')
|
133
|
+
}.should raise_error(CarrierWave::InvalidParameter)
|
134
|
+
|
135
|
+
@uploader.file.should be_nil
|
136
|
+
@uploader.filename.should be_nil
|
137
|
+
@uploader.cache_name.should be_nil
|
138
|
+
end
|
139
|
+
|
140
|
+
it "should raise an error when the original_filename contains invalid characters" do
|
141
|
+
running {
|
142
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/te/st.jpeg')
|
143
|
+
}.should raise_error(CarrierWave::InvalidParameter)
|
144
|
+
running {
|
145
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/te??%st.jpeg')
|
146
|
+
}.should raise_error(CarrierWave::InvalidParameter)
|
147
|
+
|
148
|
+
@uploader.file.should be_nil
|
149
|
+
@uploader.filename.should be_nil
|
150
|
+
@uploader.cache_name.should be_nil
|
151
|
+
end
|
152
|
+
end
|
153
|
+
|
154
|
+
describe 'with an overridden, reversing, filename' do
|
155
|
+
before do
|
156
|
+
@uploader_class.class_eval do
|
157
|
+
def filename
|
158
|
+
super.reverse unless super.blank?
|
159
|
+
end
|
160
|
+
end
|
161
|
+
end
|
162
|
+
|
163
|
+
describe '#cache!' do
|
164
|
+
|
165
|
+
before do
|
166
|
+
CarrierWave.stub!(:generate_cache_id).and_return('20071201-1234-345-2255')
|
167
|
+
end
|
168
|
+
|
169
|
+
it "should set the filename to the file's reversed filename" do
|
170
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
171
|
+
@uploader.filename.should == "gpj.tset"
|
172
|
+
end
|
173
|
+
|
174
|
+
it "should move it to the tmp dir with the filename unreversed" do
|
175
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
176
|
+
@uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpg')
|
177
|
+
@uploader.file.exists?.should be_true
|
178
|
+
end
|
179
|
+
end
|
180
|
+
|
181
|
+
describe '#retrieve_from_cache!' do
|
182
|
+
it "should set the path to the tmp dir" do
|
183
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpg')
|
184
|
+
@uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpg')
|
185
|
+
end
|
186
|
+
|
187
|
+
it "should set the filename to the reversed name of the file" do
|
188
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpg')
|
189
|
+
@uploader.filename.should == "gpj.tset"
|
190
|
+
end
|
191
|
+
end
|
192
|
+
end
|
193
|
+
|
194
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe 'with a default path' do
|
15
|
+
before do
|
16
|
+
@uploader_class.class_eval do
|
17
|
+
def default_path
|
18
|
+
file_path('test.jpg')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
@uploader = @uploader_class.new
|
22
|
+
end
|
23
|
+
|
24
|
+
describe '#blank?' do
|
25
|
+
it "should be true by default" do
|
26
|
+
@uploader.should be_blank
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#current_path' do
|
31
|
+
it "should return the default path" do
|
32
|
+
@uploader.current_path.should == file_path('test.jpg')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#cache!' do
|
37
|
+
|
38
|
+
before do
|
39
|
+
CarrierWave.stub!(:generate_cache_id).and_return('20071201-1234-345-2255')
|
40
|
+
end
|
41
|
+
|
42
|
+
it "should cache a file" do
|
43
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
44
|
+
@uploader.file.should be_an_instance_of(CarrierWave::SanitizedFile)
|
45
|
+
end
|
46
|
+
|
47
|
+
it "should be cached" do
|
48
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
49
|
+
@uploader.should be_cached
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should no longer be blank" do
|
53
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
54
|
+
@uploader.should_not be_blank
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should set the current_path" do
|
58
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
59
|
+
@uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpg')
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
|
64
|
+
end
|
65
|
+
|
66
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#cache!' do
|
15
|
+
|
16
|
+
before do
|
17
|
+
CarrierWave.stub!(:generate_cache_id).and_return('20071201-1234-345-2255')
|
18
|
+
end
|
19
|
+
|
20
|
+
it "should not raise an integiry error if there is no white list" do
|
21
|
+
@uploader.stub!(:extension_white_list).and_return(nil)
|
22
|
+
running {
|
23
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
24
|
+
}.should_not raise_error(CarrierWave::IntegrityError)
|
25
|
+
end
|
26
|
+
|
27
|
+
it "should not raise an integiry error if there is a white list and the file is on it" do
|
28
|
+
@uploader.stub!(:extension_white_list).and_return(%w(jpg gif png))
|
29
|
+
running {
|
30
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
31
|
+
}.should_not raise_error(CarrierWave::IntegrityError)
|
32
|
+
end
|
33
|
+
|
34
|
+
it "should raise an integiry error if there is a white list and the file is not on it" do
|
35
|
+
@uploader.stub!(:extension_white_list).and_return(%w(txt doc xls))
|
36
|
+
running {
|
37
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
38
|
+
}.should raise_error(CarrierWave::IntegrityError)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
end
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#model' do
|
15
|
+
it "should be remembered from initialization" do
|
16
|
+
model = mock('a model object')
|
17
|
+
@uploader = @uploader_class.new(model)
|
18
|
+
@uploader.model.should == model
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
describe '#mounted_as' do
|
23
|
+
it "should be remembered from initialization" do
|
24
|
+
model = mock('a model object')
|
25
|
+
@uploader = @uploader_class.new(model, :llama)
|
26
|
+
@uploader.model.should == model
|
27
|
+
@uploader.mounted_as.should == :llama
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#root' do
|
15
|
+
it "should default to the config option" do
|
16
|
+
@uploader.root.should == public_path('..')
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
@@ -0,0 +1,60 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '.process' do
|
15
|
+
it "should add a single processor when a symbol is given" do
|
16
|
+
@uploader_class.process :sepiatone
|
17
|
+
@uploader.should_receive(:sepiatone)
|
18
|
+
@uploader.process!
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should add multiple processors when an array of symbols is given" do
|
22
|
+
@uploader_class.process :sepiatone, :desaturate, :invert
|
23
|
+
@uploader.should_receive(:sepiatone)
|
24
|
+
@uploader.should_receive(:desaturate)
|
25
|
+
@uploader.should_receive(:invert)
|
26
|
+
@uploader.process!
|
27
|
+
end
|
28
|
+
|
29
|
+
it "should add a single processor with an argument when a hash is given" do
|
30
|
+
@uploader_class.process :format => 'png'
|
31
|
+
@uploader.should_receive(:format).with('png')
|
32
|
+
@uploader.process!
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should add a single processor with several argument when a hash is given" do
|
36
|
+
@uploader_class.process :resize => [200, 300]
|
37
|
+
@uploader.should_receive(:resize).with(200, 300)
|
38
|
+
@uploader.process!
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should add multiple processors when an hash with multiple keys is given" do
|
42
|
+
@uploader_class.process :resize => [200, 300], :format => 'png'
|
43
|
+
@uploader.should_receive(:resize).with(200, 300)
|
44
|
+
@uploader.should_receive(:format).with('png')
|
45
|
+
@uploader.process!
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe '#cache!' do
|
50
|
+
before do
|
51
|
+
CarrierWave.stub!(:generate_cache_id).and_return('20071201-1234-345-2255')
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should trigger a process!" do
|
55
|
+
@uploader.should_receive(:process!)
|
56
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,52 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/../spec_helper'
|
2
|
+
|
3
|
+
describe CarrierWave::Uploader do
|
4
|
+
|
5
|
+
before do
|
6
|
+
@uploader_class = Class.new(CarrierWave::Uploader::Base)
|
7
|
+
@uploader = @uploader_class.new
|
8
|
+
end
|
9
|
+
|
10
|
+
after do
|
11
|
+
FileUtils.rm_rf(public_path)
|
12
|
+
end
|
13
|
+
|
14
|
+
describe '#blank?' do
|
15
|
+
it "should be true when nothing has been done" do
|
16
|
+
@uploader.should be_blank
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should not be true when the file is empty" do
|
20
|
+
@uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpeg')
|
21
|
+
@uploader.should be_blank
|
22
|
+
end
|
23
|
+
|
24
|
+
it "should not be true when a file has been cached" do
|
25
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
26
|
+
@uploader.should_not be_blank
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe '#read' do
|
31
|
+
it "should be nil by default" do
|
32
|
+
@uploader.read.should be_nil
|
33
|
+
end
|
34
|
+
|
35
|
+
it "should read the contents of a cached file" do
|
36
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
37
|
+
@uploader.read.should == "this is stuff"
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe '#size' do
|
42
|
+
it "should be zero by default" do
|
43
|
+
@uploader.size.should == 0
|
44
|
+
end
|
45
|
+
|
46
|
+
it "should get the size of a cached file" do
|
47
|
+
@uploader.cache!(File.open(file_path('test.jpg')))
|
48
|
+
@uploader.size.should == 13
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
end
|