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.

Files changed (47) hide show
  1. data/README.rdoc +35 -20
  2. data/Rakefile +1 -1
  3. data/lib/carrierwave.rb +55 -7
  4. data/lib/carrierwave/compatibility/paperclip.rb +91 -0
  5. data/lib/carrierwave/core_ext/inheritable_attributes.rb +102 -0
  6. data/lib/carrierwave/core_ext/module_setup.rb +49 -0
  7. data/lib/carrierwave/mount.rb +119 -103
  8. data/lib/carrierwave/orm/activerecord.rb +6 -1
  9. data/lib/carrierwave/orm/sequel.rb +15 -2
  10. data/lib/carrierwave/processing/rmagick.rb +8 -7
  11. data/lib/carrierwave/storage/abstract.rb +16 -1
  12. data/lib/carrierwave/storage/file.rb +20 -1
  13. data/lib/carrierwave/uploader.rb +31 -593
  14. data/lib/carrierwave/uploader/cache.rb +114 -0
  15. data/lib/carrierwave/uploader/callbacks.rb +40 -0
  16. data/lib/carrierwave/uploader/default_path.rb +21 -0
  17. data/lib/carrierwave/uploader/extension_whitelist.rb +35 -0
  18. data/lib/carrierwave/uploader/mountable.rb +37 -0
  19. data/lib/carrierwave/uploader/paths.rb +25 -0
  20. data/lib/carrierwave/uploader/processing.rb +79 -0
  21. data/lib/carrierwave/uploader/proxy.rb +60 -0
  22. data/lib/carrierwave/uploader/remove.rb +21 -0
  23. data/lib/carrierwave/uploader/store.rb +154 -0
  24. data/lib/carrierwave/uploader/url.rb +22 -0
  25. data/lib/carrierwave/uploader/versions.rb +145 -0
  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/test.log +1717 -0
  35. data/spec/uploader/cache_spec.rb +194 -0
  36. data/spec/uploader/default_path_spec.rb +66 -0
  37. data/spec/uploader/extension_whitelist_spec.rb +42 -0
  38. data/spec/uploader/mountable_spec.rb +31 -0
  39. data/spec/uploader/paths_spec.rb +20 -0
  40. data/spec/uploader/processing_spec.rb +60 -0
  41. data/spec/uploader/proxy_spec.rb +52 -0
  42. data/spec/uploader/remove_spec.rb +65 -0
  43. data/spec/uploader/store_spec.rb +260 -0
  44. data/spec/uploader/url_spec.rb +85 -0
  45. data/spec/uploader/versions_spec.rb +275 -0
  46. metadata +30 -3
  47. 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