carrierwave-rails3 0.4.5

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 (67) hide show
  1. data/README.rdoc +527 -0
  2. data/lib/carrierwave.rb +103 -0
  3. data/lib/carrierwave/compatibility/paperclip.rb +95 -0
  4. data/lib/carrierwave/core_ext/file.rb +11 -0
  5. data/lib/carrierwave/mount.rb +359 -0
  6. data/lib/carrierwave/orm/activerecord.rb +75 -0
  7. data/lib/carrierwave/orm/datamapper.rb +27 -0
  8. data/lib/carrierwave/orm/mongoid.rb +23 -0
  9. data/lib/carrierwave/orm/mongomapper.rb +27 -0
  10. data/lib/carrierwave/orm/sequel.rb +45 -0
  11. data/lib/carrierwave/processing/image_science.rb +116 -0
  12. data/lib/carrierwave/processing/mini_magick.rb +261 -0
  13. data/lib/carrierwave/processing/rmagick.rb +278 -0
  14. data/lib/carrierwave/sanitized_file.rb +273 -0
  15. data/lib/carrierwave/storage/abstract.rb +30 -0
  16. data/lib/carrierwave/storage/cloud_files.rb +169 -0
  17. data/lib/carrierwave/storage/file.rb +48 -0
  18. data/lib/carrierwave/storage/grid_fs.rb +104 -0
  19. data/lib/carrierwave/storage/right_s3.rb +3 -0
  20. data/lib/carrierwave/storage/s3.rb +206 -0
  21. data/lib/carrierwave/test/matchers.rb +164 -0
  22. data/lib/carrierwave/uploader.rb +44 -0
  23. data/lib/carrierwave/uploader/cache.rb +146 -0
  24. data/lib/carrierwave/uploader/callbacks.rb +41 -0
  25. data/lib/carrierwave/uploader/configuration.rb +134 -0
  26. data/lib/carrierwave/uploader/default_url.rb +19 -0
  27. data/lib/carrierwave/uploader/download.rb +60 -0
  28. data/lib/carrierwave/uploader/extension_whitelist.rb +38 -0
  29. data/lib/carrierwave/uploader/mountable.rb +39 -0
  30. data/lib/carrierwave/uploader/processing.rb +84 -0
  31. data/lib/carrierwave/uploader/proxy.rb +62 -0
  32. data/lib/carrierwave/uploader/remove.rb +23 -0
  33. data/lib/carrierwave/uploader/store.rb +90 -0
  34. data/lib/carrierwave/uploader/url.rb +33 -0
  35. data/lib/carrierwave/uploader/versions.rb +147 -0
  36. data/lib/generators/templates/uploader.rb +47 -0
  37. data/lib/generators/uploader_generator.rb +13 -0
  38. data/spec/compatibility/paperclip_spec.rb +52 -0
  39. data/spec/mount_spec.rb +538 -0
  40. data/spec/orm/activerecord_spec.rb +271 -0
  41. data/spec/orm/datamapper_spec.rb +168 -0
  42. data/spec/orm/mongoid_spec.rb +202 -0
  43. data/spec/orm/mongomapper_spec.rb +202 -0
  44. data/spec/orm/sequel_spec.rb +183 -0
  45. data/spec/processing/image_science_spec.rb +56 -0
  46. data/spec/processing/mini_magick_spec.rb +76 -0
  47. data/spec/processing/rmagick_spec.rb +75 -0
  48. data/spec/sanitized_file_spec.rb +623 -0
  49. data/spec/spec_helper.rb +92 -0
  50. data/spec/storage/cloudfiles_spec.rb +78 -0
  51. data/spec/storage/grid_fs_spec.rb +86 -0
  52. data/spec/storage/s3_spec.rb +118 -0
  53. data/spec/uploader/cache_spec.rb +209 -0
  54. data/spec/uploader/callback_spec.rb +24 -0
  55. data/spec/uploader/configuration_spec.rb +105 -0
  56. data/spec/uploader/default_url_spec.rb +85 -0
  57. data/spec/uploader/download_spec.rb +75 -0
  58. data/spec/uploader/extension_whitelist_spec.rb +44 -0
  59. data/spec/uploader/mountable_spec.rb +33 -0
  60. data/spec/uploader/paths_spec.rb +22 -0
  61. data/spec/uploader/processing_spec.rb +73 -0
  62. data/spec/uploader/proxy_spec.rb +54 -0
  63. data/spec/uploader/remove_spec.rb +70 -0
  64. data/spec/uploader/store_spec.rb +264 -0
  65. data/spec/uploader/url_spec.rb +102 -0
  66. data/spec/uploader/versions_spec.rb +298 -0
  67. metadata +128 -0
@@ -0,0 +1,298 @@
1
+ # encoding: utf-8
2
+
3
+ require File.dirname(__FILE__) + '/../spec_helper'
4
+
5
+ describe CarrierWave::Uploader do
6
+
7
+ before do
8
+ @uploader_class = Class.new(CarrierWave::Uploader::Base)
9
+ @uploader = @uploader_class.new
10
+ end
11
+
12
+ after do
13
+ FileUtils.rm_rf(public_path)
14
+ end
15
+
16
+ describe '.version' do
17
+ it "should add it to .versions" do
18
+ @uploader_class.version :thumb
19
+ @uploader_class.versions[:thumb].should be_a(Class)
20
+ @uploader_class.versions[:thumb].ancestors.should include(@uploader_class)
21
+ end
22
+
23
+ it "should add an accessor which returns the version" do
24
+ @uploader_class.version :thumb
25
+ @uploader.thumb.should be_a(@uploader_class)
26
+ end
27
+
28
+ it "should add it to #versions which returns the version" do
29
+ @uploader_class.version :thumb
30
+ @uploader.versions[:thumb].should be_a(@uploader_class)
31
+ end
32
+
33
+ it "should set the version name" do
34
+ @uploader_class.version :thumb
35
+ @uploader.version_name.should == nil
36
+ @uploader.thumb.version_name.should == :thumb
37
+ end
38
+
39
+ it "should set the version names on the class" do
40
+ @uploader_class.version :thumb
41
+ @uploader.class.version_names.should == []
42
+ @uploader.thumb.class.version_names.should == [:thumb]
43
+ end
44
+
45
+ it "should remember mount options" do
46
+ model = mock('a model')
47
+ @uploader_class.version :thumb
48
+ @uploader = @uploader_class.new(model, :gazelle)
49
+
50
+ @uploader.thumb.model.should == model
51
+ @uploader.thumb.mounted_as.should == :gazelle
52
+ end
53
+
54
+ it "should apply any overrides given in a block" do
55
+ @uploader_class.version :thumb do
56
+ def store_dir
57
+ public_path('monkey/apache')
58
+ end
59
+ end
60
+ @uploader.store_dir.should == 'uploads'
61
+ @uploader.thumb.store_dir.should == public_path('monkey/apache')
62
+ end
63
+
64
+ it "should reopen the same class when called multiple times" do
65
+ @uploader_class.version :thumb do
66
+ def self.monkey
67
+ "monkey"
68
+ end
69
+ end
70
+ @uploader_class.version :thumb do
71
+ def self.llama
72
+ "llama"
73
+ end
74
+ end
75
+ @uploader_class.version(:thumb).monkey.should == "monkey"
76
+ @uploader_class.version(:thumb).llama.should == "llama"
77
+ end
78
+
79
+ describe 'with nested versions' do
80
+ before do
81
+ @uploader_class.version :thumb do
82
+ version :mini
83
+ version :micro
84
+ end
85
+ end
86
+
87
+ it "should add an array of version names" do
88
+ @uploader.class.version_names.should == []
89
+ @uploader.thumb.class.version_names.should == [:thumb]
90
+ @uploader.thumb.mini.class.version_names.should == [:thumb, :mini]
91
+ @uploader.thumb.micro.class.version_names.should == [:thumb, :micro]
92
+ end
93
+
94
+ it "should set the version name for the instances" do
95
+ @uploader.version_name.should be_nil
96
+ @uploader.thumb.version_name.should == :thumb
97
+ @uploader.thumb.mini.version_name.should == :thumb_mini
98
+ @uploader.thumb.micro.version_name.should == :thumb_micro
99
+ end
100
+
101
+ end
102
+
103
+ end
104
+
105
+ describe 'with a version' do
106
+ before do
107
+ @uploader_class.version(:thumb)
108
+ end
109
+
110
+ describe '#cache!' do
111
+
112
+ before do
113
+ CarrierWave.stub!(:generate_cache_id).and_return('20071201-1234-345-2255')
114
+ end
115
+
116
+ it "should set store_path with versions" do
117
+ @uploader.cache!(File.open(file_path('test.jpg')))
118
+ @uploader.store_path.should == 'uploads/test.jpg'
119
+ @uploader.thumb.store_path.should == 'uploads/thumb_test.jpg'
120
+ @uploader.thumb.store_path('kebab.png').should == 'uploads/thumb_kebab.png'
121
+ end
122
+
123
+ it "should move it to the tmp dir with the filename prefixed" do
124
+ @uploader.cache!(File.open(file_path('test.jpg')))
125
+ @uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpg')
126
+ @uploader.thumb.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/thumb_test.jpg')
127
+ @uploader.file.exists?.should be_true
128
+ @uploader.thumb.file.exists?.should be_true
129
+ end
130
+ end
131
+
132
+ describe '#retrieve_from_cache!' do
133
+ it "should set the path to the tmp dir" do
134
+ @uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpg')
135
+ @uploader.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/test.jpg')
136
+ @uploader.thumb.current_path.should == public_path('uploads/tmp/20071201-1234-345-2255/thumb_test.jpg')
137
+ end
138
+
139
+ it "should set store_path with versions" do
140
+ @uploader.retrieve_from_cache!('20071201-1234-345-2255/test.jpg')
141
+ @uploader.store_path.should == 'uploads/test.jpg'
142
+ @uploader.thumb.store_path.should == 'uploads/thumb_test.jpg'
143
+ @uploader.thumb.store_path('kebab.png').should == 'uploads/thumb_kebab.png'
144
+ end
145
+ end
146
+
147
+ describe '#store!' do
148
+ before do
149
+ @uploader_class.storage = mock_storage('base')
150
+ @uploader_class.version(:thumb).storage = mock_storage('thumb')
151
+
152
+ @file = File.open(file_path('test.jpg'))
153
+
154
+ @base_stored_file = mock('a stored file')
155
+ @base_stored_file.stub!(:path).and_return('/path/to/somewhere')
156
+ @base_stored_file.stub!(:url).and_return('http://www.example.com')
157
+
158
+ @thumb_stored_file = mock('a thumb version of a stored file')
159
+ @thumb_stored_file.stub!(:path).and_return('/path/to/somewhere/thumb')
160
+ @thumb_stored_file.stub!(:url).and_return('http://www.example.com/thumb')
161
+
162
+ @storage = mock('a storage engine')
163
+ @storage.stub!(:store!).and_return(@base_stored_file)
164
+
165
+ @thumb_storage = mock('a storage engine for thumbnails')
166
+ @thumb_storage.stub!(:store!).and_return(@thumb_stored_file)
167
+
168
+ @uploader_class.storage.stub!(:new).with(@uploader).and_return(@storage)
169
+ @uploader_class.version(:thumb).storage.stub!(:new).with(@uploader.thumb).and_return(@thumb_storage)
170
+ end
171
+
172
+ it "should set the current path for the version" do
173
+ @uploader.store!(@file)
174
+ @uploader.current_path.should == '/path/to/somewhere'
175
+ @uploader.thumb.current_path.should == '/path/to/somewhere/thumb'
176
+ end
177
+
178
+ it "should set the url" do
179
+ @uploader.store!(@file)
180
+ @uploader.url.should == 'http://www.example.com'
181
+ @uploader.thumb.url.should == 'http://www.example.com/thumb'
182
+ end
183
+
184
+ it "should, if a file is given as argument, set the store_path" do
185
+ @uploader.store!(@file)
186
+ @uploader.store_path.should == 'uploads/test.jpg'
187
+ @uploader.thumb.store_path.should == 'uploads/thumb_test.jpg'
188
+ @uploader.thumb.store_path('kebab.png').should == 'uploads/thumb_kebab.png'
189
+ end
190
+
191
+ it "should instruct the storage engine to store the file and its version" do
192
+ @uploader.cache!(@file)
193
+ @storage.should_receive(:store!).with(@uploader.file).and_return(:monkey)
194
+ @thumb_storage.should_receive(:store!).with(@uploader.thumb.file).and_return(:gorilla)
195
+ @uploader.store!
196
+ end
197
+
198
+ end
199
+
200
+ describe '#remove!' do
201
+ before do
202
+ @uploader_class.storage = mock_storage('base')
203
+ @uploader_class.version(:thumb).storage = mock_storage('thumb')
204
+
205
+ @file = File.open(file_path('test.jpg'))
206
+
207
+ @base_stored_file = mock('a stored file')
208
+ @thumb_stored_file = mock('a thumb version of a stored file')
209
+
210
+ @storage = mock('a storage engine')
211
+ @storage.stub!(:store!).and_return(@base_stored_file)
212
+
213
+ @thumb_storage = mock('a storage engine for thumbnails')
214
+ @thumb_storage.stub!(:store!).and_return(@thumb_stored_file)
215
+
216
+ @uploader_class.storage.stub!(:new).with(@uploader).and_return(@storage)
217
+ @uploader_class.version(:thumb).storage.stub!(:new).with(@uploader.thumb).and_return(@thumb_storage)
218
+
219
+ @base_stored_file.stub!(:delete)
220
+ @thumb_stored_file.stub!(:delete)
221
+
222
+ @uploader.store!(@file)
223
+ end
224
+
225
+ it "should reset the current path for the version" do
226
+ @uploader.remove!
227
+ @uploader.current_path.should be_nil
228
+ @uploader.thumb.current_path.should be_nil
229
+ end
230
+
231
+ it "should reset the url" do
232
+ @uploader.remove!
233
+ @uploader.url.should be_nil
234
+ @uploader.thumb.url.should be_nil
235
+ end
236
+
237
+ it "should delete all the files" do
238
+ @base_stored_file.should_receive(:delete)
239
+ @thumb_stored_file.should_receive(:delete)
240
+ @uploader.remove!
241
+ end
242
+
243
+ end
244
+
245
+
246
+ describe '#retrieve_from_store!' do
247
+ before do
248
+ @uploader_class.storage = mock_storage('base')
249
+ @uploader_class.version(:thumb).storage = mock_storage('thumb')
250
+
251
+ @file = File.open(file_path('test.jpg'))
252
+
253
+ @base_stored_file = mock('a stored file')
254
+ @base_stored_file.stub!(:path).and_return('/path/to/somewhere')
255
+ @base_stored_file.stub!(:url).and_return('http://www.example.com')
256
+
257
+ @thumb_stored_file = mock('a thumb version of a stored file')
258
+ @thumb_stored_file.stub!(:path).and_return('/path/to/somewhere/thumb')
259
+ @thumb_stored_file.stub!(:url).and_return('http://www.example.com/thumb')
260
+
261
+ @storage = mock('a storage engine')
262
+ @storage.stub!(:retrieve!).and_return(@base_stored_file)
263
+
264
+ @thumb_storage = mock('a storage engine for thumbnails')
265
+ @thumb_storage.stub!(:retrieve!).and_return(@thumb_stored_file)
266
+
267
+ @uploader_class.storage.stub!(:new).with(@uploader).and_return(@storage)
268
+ @uploader_class.version(:thumb).storage.stub!(:new).with(@uploader.thumb).and_return(@thumb_storage)
269
+ end
270
+
271
+ it "should set the current path" do
272
+ @uploader.retrieve_from_store!('monkey.txt')
273
+ @uploader.current_path.should == '/path/to/somewhere'
274
+ @uploader.thumb.current_path.should == '/path/to/somewhere/thumb'
275
+ end
276
+
277
+ it "should set the url" do
278
+ @uploader.retrieve_from_store!('monkey.txt')
279
+ @uploader.url.should == 'http://www.example.com'
280
+ @uploader.thumb.url.should == 'http://www.example.com/thumb'
281
+ end
282
+
283
+ it "should pass the identifier to the storage engine" do
284
+ @storage.should_receive(:retrieve!).with('monkey.txt').and_return(@base_stored_file)
285
+ @thumb_storage.should_receive(:retrieve!).with('monkey.txt').and_return(@thumb_stored_file)
286
+ @uploader.retrieve_from_store!('monkey.txt')
287
+ @uploader.file.should == @base_stored_file
288
+ @uploader.thumb.file.should == @thumb_stored_file
289
+ end
290
+
291
+ it "should not set the filename" do
292
+ @uploader.retrieve_from_store!('monkey.txt')
293
+ @uploader.filename.should be_nil
294
+ end
295
+ end
296
+ end
297
+
298
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: carrierwave-rails3
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: false
5
+ segments:
6
+ - 0
7
+ - 4
8
+ - 5
9
+ version: 0.4.5
10
+ platform: ruby
11
+ authors:
12
+ - Jonas Nicklas
13
+ autorequire:
14
+ bindir: bin
15
+ cert_chain: []
16
+
17
+ date: 2010-06-03 00:00:00 +02:00
18
+ default_executable:
19
+ dependencies: []
20
+
21
+ description: Upload files in your Ruby applications, map them to a range of ORMs, store them on different backends.
22
+ email:
23
+ - jonas.nicklas@gmail.com
24
+ executables: []
25
+
26
+ extensions: []
27
+
28
+ extra_rdoc_files:
29
+ - README.rdoc
30
+ files:
31
+ - README.rdoc
32
+ - lib/carrierwave.rb
33
+ - lib/carrierwave/compatibility/paperclip.rb
34
+ - lib/carrierwave/core_ext/file.rb
35
+ - lib/carrierwave/mount.rb
36
+ - lib/carrierwave/orm/activerecord.rb
37
+ - lib/carrierwave/orm/datamapper.rb
38
+ - lib/carrierwave/orm/mongoid.rb
39
+ - lib/carrierwave/orm/mongomapper.rb
40
+ - lib/carrierwave/orm/sequel.rb
41
+ - lib/carrierwave/processing/image_science.rb
42
+ - lib/carrierwave/processing/mini_magick.rb
43
+ - lib/carrierwave/processing/rmagick.rb
44
+ - lib/carrierwave/sanitized_file.rb
45
+ - lib/carrierwave/storage/abstract.rb
46
+ - lib/carrierwave/storage/cloud_files.rb
47
+ - lib/carrierwave/storage/file.rb
48
+ - lib/carrierwave/storage/grid_fs.rb
49
+ - lib/carrierwave/storage/right_s3.rb
50
+ - lib/carrierwave/storage/s3.rb
51
+ - lib/carrierwave/test/matchers.rb
52
+ - lib/carrierwave/uploader.rb
53
+ - lib/carrierwave/uploader/cache.rb
54
+ - lib/carrierwave/uploader/callbacks.rb
55
+ - lib/carrierwave/uploader/configuration.rb
56
+ - lib/carrierwave/uploader/default_url.rb
57
+ - lib/carrierwave/uploader/download.rb
58
+ - lib/carrierwave/uploader/extension_whitelist.rb
59
+ - lib/carrierwave/uploader/mountable.rb
60
+ - lib/carrierwave/uploader/processing.rb
61
+ - lib/carrierwave/uploader/proxy.rb
62
+ - lib/carrierwave/uploader/remove.rb
63
+ - lib/carrierwave/uploader/store.rb
64
+ - lib/carrierwave/uploader/url.rb
65
+ - lib/carrierwave/uploader/versions.rb
66
+ - lib/generators/templates/uploader.rb
67
+ - lib/generators/uploader_generator.rb
68
+ has_rdoc: true
69
+ homepage: http://carrierwave.rubyforge.org
70
+ licenses: []
71
+
72
+ post_install_message:
73
+ rdoc_options:
74
+ - --main
75
+ - README.rdoc
76
+ require_paths:
77
+ - lib
78
+ required_ruby_version: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ segments:
83
+ - 0
84
+ version: "0"
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ segments:
90
+ - 0
91
+ version: "0"
92
+ requirements: []
93
+
94
+ rubyforge_project: carrierwave
95
+ rubygems_version: 1.3.6
96
+ signing_key:
97
+ specification_version: 3
98
+ summary: Ruby file upload library for Rails 3
99
+ test_files:
100
+ - spec/compatibility/paperclip_spec.rb
101
+ - spec/mount_spec.rb
102
+ - spec/orm/activerecord_spec.rb
103
+ - spec/orm/datamapper_spec.rb
104
+ - spec/orm/mongoid_spec.rb
105
+ - spec/orm/mongomapper_spec.rb
106
+ - spec/orm/sequel_spec.rb
107
+ - spec/processing/image_science_spec.rb
108
+ - spec/processing/mini_magick_spec.rb
109
+ - spec/processing/rmagick_spec.rb
110
+ - spec/sanitized_file_spec.rb
111
+ - spec/spec_helper.rb
112
+ - spec/storage/cloudfiles_spec.rb
113
+ - spec/storage/grid_fs_spec.rb
114
+ - spec/storage/s3_spec.rb
115
+ - spec/uploader/cache_spec.rb
116
+ - spec/uploader/callback_spec.rb
117
+ - spec/uploader/configuration_spec.rb
118
+ - spec/uploader/default_url_spec.rb
119
+ - spec/uploader/download_spec.rb
120
+ - spec/uploader/extension_whitelist_spec.rb
121
+ - spec/uploader/mountable_spec.rb
122
+ - spec/uploader/paths_spec.rb
123
+ - spec/uploader/processing_spec.rb
124
+ - spec/uploader/proxy_spec.rb
125
+ - spec/uploader/remove_spec.rb
126
+ - spec/uploader/store_spec.rb
127
+ - spec/uploader/url_spec.rb
128
+ - spec/uploader/versions_spec.rb