thorsson_carrierwave 0.4.5
Sign up to get free protection for your applications and to get access to all the features.
- data/Generators +4 -0
- data/History.txt +125 -0
- data/Manifest.txt +111 -0
- data/README.rdoc +528 -0
- data/Rakefile +39 -0
- data/cucumber.yml +2 -0
- data/features/caching.feature +28 -0
- data/features/download.feature +20 -0
- data/features/file_storage.feature +37 -0
- data/features/file_storage_overridden_filename.feature +38 -0
- data/features/file_storage_overridden_store_dir.feature +38 -0
- data/features/file_storage_reversing_processor.feature +43 -0
- data/features/fixtures/bork.txt +1 -0
- data/features/fixtures/monkey.txt +1 -0
- data/features/grid_fs_storage.feature +32 -0
- data/features/mount_activerecord.feature +46 -0
- data/features/mount_datamapper.feature +46 -0
- data/features/step_definitions/activerecord_steps.rb +22 -0
- data/features/step_definitions/caching_steps.rb +14 -0
- data/features/step_definitions/datamapper_steps.rb +29 -0
- data/features/step_definitions/download_steps.rb +4 -0
- data/features/step_definitions/file_steps.rb +53 -0
- data/features/step_definitions/general_steps.rb +85 -0
- data/features/step_definitions/mount_steps.rb +19 -0
- data/features/step_definitions/store_steps.rb +18 -0
- data/features/support/activerecord.rb +30 -0
- data/features/support/datamapper.rb +7 -0
- data/features/support/env.rb +22 -0
- data/features/versions_basics.feature +50 -0
- data/features/versions_nested_versions.feature +70 -0
- data/features/versions_overridden_filename.feature +51 -0
- data/features/versions_overriden_store_dir.feature +41 -0
- data/lib/carrierwave/compatibility/paperclip.rb +95 -0
- data/lib/carrierwave/core_ext/blank.rb +46 -0
- data/lib/carrierwave/core_ext/inheritable_attributes.rb +104 -0
- data/lib/carrierwave/core_ext/module_setup.rb +51 -0
- data/lib/carrierwave/mount.rb +359 -0
- data/lib/carrierwave/orm/activerecord.rb +73 -0
- data/lib/carrierwave/orm/datamapper.rb +27 -0
- data/lib/carrierwave/orm/mongoid.rb +23 -0
- data/lib/carrierwave/orm/mongomapper.rb +27 -0
- data/lib/carrierwave/orm/sequel.rb +45 -0
- data/lib/carrierwave/processing/image_science.rb +101 -0
- data/lib/carrierwave/processing/mini_magick.rb +265 -0
- data/lib/carrierwave/processing/rmagick.rb +282 -0
- data/lib/carrierwave/sanitized_file.rb +273 -0
- data/lib/carrierwave/storage/abstract.rb +30 -0
- data/lib/carrierwave/storage/cloud_files.rb +169 -0
- data/lib/carrierwave/storage/file.rb +48 -0
- data/lib/carrierwave/storage/grid_fs.rb +97 -0
- data/lib/carrierwave/storage/right_s3.rb +167 -0
- data/lib/carrierwave/storage/s3.rb +199 -0
- data/lib/carrierwave/test/matchers.rb +128 -0
- data/lib/carrierwave/uploader/cache.rb +145 -0
- data/lib/carrierwave/uploader/callbacks.rb +42 -0
- data/lib/carrierwave/uploader/configuration.rb +130 -0
- data/lib/carrierwave/uploader/default_url.rb +19 -0
- data/lib/carrierwave/uploader/download.rb +59 -0
- data/lib/carrierwave/uploader/extension_whitelist.rb +37 -0
- data/lib/carrierwave/uploader/mountable.rb +39 -0
- data/lib/carrierwave/uploader/processing.rb +83 -0
- data/lib/carrierwave/uploader/proxy.rb +62 -0
- data/lib/carrierwave/uploader/remove.rb +22 -0
- data/lib/carrierwave/uploader/store.rb +89 -0
- data/lib/carrierwave/uploader/url.rb +33 -0
- data/lib/carrierwave/uploader/versions.rb +146 -0
- data/lib/carrierwave/uploader.rb +44 -0
- data/lib/carrierwave.rb +99 -0
- data/merb_generators/uploader_generator.rb +22 -0
- data/rails_generators/uploader/USAGE +2 -0
- data/rails_generators/uploader/templates/uploader.rb +47 -0
- data/rails_generators/uploader/uploader_generator.rb +21 -0
- data/script/console +10 -0
- data/script/destroy +14 -0
- data/script/generate +14 -0
- data/spec/compatibility/paperclip_spec.rb +52 -0
- data/spec/fixtures/bork.txt +1 -0
- data/spec/fixtures/landscape.jpg +0 -0
- data/spec/fixtures/portrait.jpg +0 -0
- data/spec/fixtures/test.jpeg +1 -0
- data/spec/fixtures/test.jpg +1 -0
- data/spec/mount_spec.rb +538 -0
- data/spec/orm/activerecord_spec.rb +271 -0
- data/spec/orm/datamapper_spec.rb +168 -0
- data/spec/orm/mongoid_spec.rb +202 -0
- data/spec/orm/mongomapper_spec.rb +202 -0
- data/spec/orm/sequel_spec.rb +183 -0
- data/spec/processing/image_science_spec.rb +56 -0
- data/spec/processing/mini_magick_spec.rb +76 -0
- data/spec/processing/rmagick_spec.rb +75 -0
- data/spec/sanitized_file_spec.rb +623 -0
- data/spec/spec_helper.rb +92 -0
- data/spec/storage/grid_fs_spec.rb +83 -0
- data/spec/storage/right_s3_spec.rb +83 -0
- data/spec/storage/s3_spec.rb +95 -0
- data/spec/uploader/cache_spec.rb +209 -0
- data/spec/uploader/configuration_spec.rb +105 -0
- data/spec/uploader/default_url_spec.rb +85 -0
- data/spec/uploader/download_spec.rb +75 -0
- data/spec/uploader/extension_whitelist_spec.rb +44 -0
- data/spec/uploader/mountable_spec.rb +33 -0
- data/spec/uploader/paths_spec.rb +22 -0
- data/spec/uploader/processing_spec.rb +73 -0
- data/spec/uploader/proxy_spec.rb +54 -0
- data/spec/uploader/remove_spec.rb +70 -0
- data/spec/uploader/store_spec.rb +264 -0
- data/spec/uploader/url_spec.rb +102 -0
- data/spec/uploader/versions_spec.rb +298 -0
- metadata +436 -0
data/Rakefile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
gem 'hoe', '>= 2.1.0'
|
3
|
+
require 'hoe'
|
4
|
+
require 'fileutils'
|
5
|
+
$:.unshift File.join(File.dirname(__FILE__), 'lib')
|
6
|
+
require 'carrierwave'
|
7
|
+
|
8
|
+
Hoe.plugin :newgem
|
9
|
+
# Hoe.plugin :website
|
10
|
+
Hoe.plugin :cucumberfeatures
|
11
|
+
|
12
|
+
$hoe = Hoe.spec 'carrierwave' do
|
13
|
+
self.developer 'Jonas Nicklas', 'jonas.nicklas@gmail.com'
|
14
|
+
self.rubyforge_name = self.name
|
15
|
+
self.readme_file = 'README.rdoc'
|
16
|
+
self.version = CarrierWave::VERSION
|
17
|
+
self.extra_dev_deps << ['newgem', '>=1.5.2']
|
18
|
+
self.extra_dev_deps << ['rspec', '>=1.2.8']
|
19
|
+
self.extra_dev_deps << ['cucumber', '>=0.3.96']
|
20
|
+
self.extra_dev_deps << ['activerecord', '>=2.3.3']
|
21
|
+
self.extra_dev_deps << ['sqlite3-ruby', '>=1.2.5']
|
22
|
+
self.extra_dev_deps << ['dm-core', '>=0.9.11']
|
23
|
+
self.extra_dev_deps << ['data_objects', '>=0.9.12']
|
24
|
+
self.extra_dev_deps << ['do_sqlite3', '>=0.9.11']
|
25
|
+
self.extra_dev_deps << ['sequel', '>=3.2.0']
|
26
|
+
self.extra_dev_deps << ['rmagick', '>=2.10.0']
|
27
|
+
self.extra_dev_deps << ['mini_magick', '>=1.2.5']
|
28
|
+
self.extra_dev_deps << ['mongo_mapper', '>=0.6.8']
|
29
|
+
self.extra_dev_deps << ['mongoid', '>=0.10.4']
|
30
|
+
self.extra_dev_deps << ['aws-s3', '>=0.6.2']
|
31
|
+
self.extra_dev_deps << ['timecop', '>=0.3.4']
|
32
|
+
self.extra_dev_deps << ['json', '>=1.1.9']
|
33
|
+
self.extra_rdoc_files << 'README.rdoc'
|
34
|
+
end
|
35
|
+
|
36
|
+
require 'newgem/tasks'
|
37
|
+
Dir['tasks/**/*.rake'].each { |t| load t }
|
38
|
+
|
39
|
+
task :default => [:spec, :features]
|
data/cucumber.yml
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
Feature: uploader with file storage
|
2
|
+
In order to be able to temporarily store files to disk
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to cache files
|
5
|
+
|
6
|
+
Scenario: cache a file
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And an instance of that class
|
9
|
+
When I cache the file 'fixtures/bork.txt'
|
10
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
11
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
12
|
+
|
13
|
+
Scenario: cache two files in succession
|
14
|
+
Given an uploader class that uses the 'file' storage
|
15
|
+
And an instance of that class
|
16
|
+
When I cache the file 'fixtures/bork.txt'
|
17
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
18
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
19
|
+
When I cache the file 'fixtures/monkey.txt'
|
20
|
+
Then there should be a file called 'monkey.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
21
|
+
And the file called 'monkey.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/monkey.txt'
|
22
|
+
|
23
|
+
Scenario: retrieving a file from cache
|
24
|
+
Given an uploader class that uses the 'file' storage
|
25
|
+
And an instance of that class
|
26
|
+
And the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
27
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
28
|
+
Then the uploader should have 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt' as its current path
|
@@ -0,0 +1,20 @@
|
|
1
|
+
Feature: downloading files
|
2
|
+
In order to allow users to upload remote files
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to download files to the filesystem via HTTP
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And an instance of that class
|
9
|
+
|
10
|
+
Scenario: download a file
|
11
|
+
When I download the file 'http://s3.amazonaws.com/Monkey/testfile.txt'
|
12
|
+
Then there should be a file called 'testfile.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
13
|
+
And the file called 'testfile.txt' in a subdirectory of 'public/uploads/tmp' should contain 'S3 Remote File'
|
14
|
+
|
15
|
+
Scenario: downloading a file then storing
|
16
|
+
When I download the file 'http://s3.amazonaws.com/Monkey/testfile.txt'
|
17
|
+
And I store the file
|
18
|
+
Then there should be a file at 'public/uploads/testfile.txt'
|
19
|
+
And the file at 'public/uploads/testfile.txt' should contain 'S3 Remote File'
|
20
|
+
|
@@ -0,0 +1,37 @@
|
|
1
|
+
Feature: uploader with file storage
|
2
|
+
In order to be awesome
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to upload files to the filesystem
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And an instance of that class
|
9
|
+
|
10
|
+
Scenario: store a file
|
11
|
+
When I store the file 'fixtures/bork.txt'
|
12
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
13
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
14
|
+
|
15
|
+
Scenario: store two files in succession
|
16
|
+
When I store the file 'fixtures/bork.txt'
|
17
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
18
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
19
|
+
When I store the file 'fixtures/monkey.txt'
|
20
|
+
Then there should be a file at 'public/uploads/monkey.txt'
|
21
|
+
And the file at 'public/uploads/monkey.txt' should be identical to the file at 'fixtures/monkey.txt'
|
22
|
+
|
23
|
+
Scenario: cache a file and then store it
|
24
|
+
When I cache the file 'fixtures/bork.txt'
|
25
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
26
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
27
|
+
And there should not be a file at 'public/uploads/bork.txt'
|
28
|
+
When I store the file
|
29
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
30
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
31
|
+
|
32
|
+
Scenario: retrieving a file from cache then storing
|
33
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
34
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
35
|
+
And I store the file
|
36
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
37
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
Feature: uploader with file storage and overriden filename
|
2
|
+
In order to be awesome
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to upload files to the filesystem with an overriden filename
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And that the uploader reverses the filename
|
9
|
+
And an instance of that class
|
10
|
+
|
11
|
+
Scenario: store a file
|
12
|
+
When I store the file 'fixtures/bork.txt'
|
13
|
+
Then there should be a file at 'public/uploads/txt.krob'
|
14
|
+
And the file at 'public/uploads/txt.krob' should be identical to the file at 'fixtures/bork.txt'
|
15
|
+
|
16
|
+
Scenario: store two files in succession
|
17
|
+
When I store the file 'fixtures/bork.txt'
|
18
|
+
Then there should be a file at 'public/uploads/txt.krob'
|
19
|
+
And the file at 'public/uploads/txt.krob' should be identical to the file at 'fixtures/bork.txt'
|
20
|
+
When I store the file 'fixtures/monkey.txt'
|
21
|
+
Then there should be a file at 'public/uploads/txt.yeknom'
|
22
|
+
And the file at 'public/uploads/txt.yeknom' should be identical to the file at 'fixtures/monkey.txt'
|
23
|
+
|
24
|
+
Scenario: cache a file and then store it
|
25
|
+
When I cache the file 'fixtures/bork.txt'
|
26
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
27
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
28
|
+
And there should not be a file at 'public/uploads/txt.krob'
|
29
|
+
When I store the file
|
30
|
+
Then there should be a file at 'public/uploads/txt.krob'
|
31
|
+
And the file at 'public/uploads/txt.krob' should be identical to the file at 'fixtures/bork.txt'
|
32
|
+
|
33
|
+
Scenario: retrieving a file from cache then storing
|
34
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
35
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
36
|
+
And I store the file
|
37
|
+
Then there should be a file at 'public/uploads/txt.krob'
|
38
|
+
And the file at 'public/uploads/txt.krob' should be identical to the file at 'fixtures/bork.txt'
|
@@ -0,0 +1,38 @@
|
|
1
|
+
Feature: uploader with file storage and overridden store dir
|
2
|
+
In order to be awesome
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to upload files to the filesystem
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And that the uploader has the store_dir overridden to 'public/monkey/llama'
|
9
|
+
And an instance of that class
|
10
|
+
|
11
|
+
Scenario: store a file
|
12
|
+
When I store the file 'fixtures/bork.txt'
|
13
|
+
Then there should be a file at 'public/monkey/llama/bork.txt'
|
14
|
+
And the file at 'public/monkey/llama/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
15
|
+
|
16
|
+
Scenario: store two files in succession
|
17
|
+
When I store the file 'fixtures/bork.txt'
|
18
|
+
Then there should be a file at 'public/monkey/llama/bork.txt'
|
19
|
+
And the file at 'public/monkey/llama/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
20
|
+
When I store the file 'fixtures/monkey.txt'
|
21
|
+
Then there should be a file at 'public/monkey/llama/monkey.txt'
|
22
|
+
And the file at 'public/monkey/llama/monkey.txt' should be identical to the file at 'fixtures/monkey.txt'
|
23
|
+
|
24
|
+
Scenario: cache a file and then store it
|
25
|
+
When I cache the file 'fixtures/bork.txt'
|
26
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
27
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
28
|
+
And there should not be a file at 'public/monkey/llama/bork.txt'
|
29
|
+
When I store the file
|
30
|
+
Then there should be a file at 'public/monkey/llama/bork.txt'
|
31
|
+
And the file at 'public/monkey/llama/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
32
|
+
|
33
|
+
Scenario: retrieving a file from cache then storing
|
34
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
35
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
36
|
+
And I store the file
|
37
|
+
Then there should be a file at 'public/monkey/llama/bork.txt'
|
38
|
+
And the file at 'public/monkey/llama/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
@@ -0,0 +1,43 @@
|
|
1
|
+
Feature: uploader with file storage and a processor that reverses the file
|
2
|
+
In order to be awesome
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to upload files to the filesystem
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And an instance of that class
|
9
|
+
And the class has a method called 'reverse' that reverses the contents of a file
|
10
|
+
And the class will process 'reverse'
|
11
|
+
|
12
|
+
Scenario: store a file
|
13
|
+
When I store the file 'fixtures/bork.txt'
|
14
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
15
|
+
And the file at 'public/uploads/bork.txt' should not be identical to the file at 'fixtures/bork.txt'
|
16
|
+
And the file at 'public/uploads/bork.txt' should be the reverse of the file at 'fixtures/bork.txt'
|
17
|
+
|
18
|
+
Scenario: store two files in succession
|
19
|
+
When I store the file 'fixtures/bork.txt'
|
20
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
21
|
+
And the file at 'public/uploads/bork.txt' should not be identical to the file at 'fixtures/bork.txt'
|
22
|
+
And the file at 'public/uploads/bork.txt' should be the reverse of the file at 'fixtures/bork.txt'
|
23
|
+
When I store the file 'fixtures/monkey.txt'
|
24
|
+
Then there should be a file at 'public/uploads/monkey.txt'
|
25
|
+
And the file at 'public/uploads/monkey.txt' should not be identical to the file at 'fixtures/monkey.txt'
|
26
|
+
And the file at 'public/uploads/monkey.txt' should be the reverse of the file at 'fixtures/monkey.txt'
|
27
|
+
|
28
|
+
Scenario: cache a file and then store it
|
29
|
+
When I cache the file 'fixtures/bork.txt'
|
30
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
31
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should not be identical to the file at 'fixtures/bork.txt'
|
32
|
+
And there should not be a file at 'public/uploads/bork.txt'
|
33
|
+
When I store the file
|
34
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
35
|
+
And the file at 'public/uploads/bork.txt' should not be identical to the file at 'fixtures/bork.txt'
|
36
|
+
And the file at 'public/uploads/bork.txt' should be the reverse of the file at 'fixtures/bork.txt'
|
37
|
+
|
38
|
+
Scenario: retrieving a file from cache then storing
|
39
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
40
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
41
|
+
And I store the file
|
42
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
43
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
@@ -0,0 +1 @@
|
|
1
|
+
this is a file
|
@@ -0,0 +1 @@
|
|
1
|
+
this is another file
|
@@ -0,0 +1,32 @@
|
|
1
|
+
Feature: uploader with file storage
|
2
|
+
In order to be awesome
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to upload files to the filesystem
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'grid_fs' storage
|
8
|
+
And an instance of that class
|
9
|
+
|
10
|
+
Scenario: store a file
|
11
|
+
When I store the file 'fixtures/bork.txt'
|
12
|
+
Then the contents of the file should be 'this is a file'
|
13
|
+
|
14
|
+
Scenario: store two files in succession
|
15
|
+
When I store the file 'fixtures/bork.txt'
|
16
|
+
Then the contents of the file should be 'this is a file'
|
17
|
+
When I store the file 'fixtures/monkey.txt'
|
18
|
+
Then the contents of the file should be 'this is another file'
|
19
|
+
|
20
|
+
Scenario: cache a file and then store it
|
21
|
+
When I cache the file 'fixtures/bork.txt'
|
22
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
23
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
24
|
+
And there should not be a file at 'public/uploads/bork.txt'
|
25
|
+
When I store the file
|
26
|
+
Then the contents of the file should be 'this is a file'
|
27
|
+
|
28
|
+
Scenario: retrieving a file from cache then storing
|
29
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
30
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
31
|
+
And I store the file
|
32
|
+
Then the contents of the file should be 'this is a file'
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: Mount an Uploader on ActiveRecord class
|
2
|
+
In order to easily attach files to a form
|
3
|
+
As a web developer using CarrierWave
|
4
|
+
I want to mount an uploader on an ActiveRecord class
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And an activerecord class that uses the 'users' table
|
9
|
+
And the uploader class is mounted on the 'avatar' column
|
10
|
+
And an instance of the activerecord class
|
11
|
+
|
12
|
+
Scenario: assign a file
|
13
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
14
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
15
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
16
|
+
|
17
|
+
Scenario: assign a file and save the record
|
18
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
19
|
+
And I save the active record
|
20
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
21
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
22
|
+
And the url for the column 'avatar' should be '/uploads/bork.txt'
|
23
|
+
|
24
|
+
Scenario: assign a file and retrieve it from cache
|
25
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
26
|
+
And I retrieve the file later from the cache name for the column 'avatar'
|
27
|
+
And I save the active record
|
28
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
29
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
30
|
+
And the url for the column 'avatar' should be '/uploads/bork.txt'
|
31
|
+
|
32
|
+
Scenario: store a file and retrieve it later
|
33
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
34
|
+
And I retrieve the file later from the cache name for the column 'avatar'
|
35
|
+
And I save the active record
|
36
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
37
|
+
When I reload the active record
|
38
|
+
Then the url for the column 'avatar' should be '/uploads/bork.txt'
|
39
|
+
|
40
|
+
Scenario: store a file and delete the record
|
41
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
42
|
+
And I retrieve the file later from the cache name for the column 'avatar'
|
43
|
+
And I save the active record
|
44
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
45
|
+
When I delete the active record
|
46
|
+
Then there should not be a file at 'public/uploads/bork.txt'
|
@@ -0,0 +1,46 @@
|
|
1
|
+
Feature: Mount an Uploader on ActiveRecord class
|
2
|
+
In order to easily attach files to a form
|
3
|
+
As a web developer using CarrierWave
|
4
|
+
I want to mount an uploader on an ActiveRecord class
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And a datamapper class that has a 'avatar' column
|
9
|
+
And the uploader class is mounted on the 'avatar' column
|
10
|
+
And an instance of the datamapper class
|
11
|
+
|
12
|
+
Scenario: assign a file
|
13
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
14
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
15
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
16
|
+
|
17
|
+
Scenario: assign a file and save the record
|
18
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
19
|
+
And I save the datamapper record
|
20
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
21
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
22
|
+
And the url for the column 'avatar' should be '/uploads/bork.txt'
|
23
|
+
|
24
|
+
Scenario: assign a file and retrieve it from cache
|
25
|
+
When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
26
|
+
And I retrieve the file later from the cache name for the column 'avatar'
|
27
|
+
And I save the datamapper record
|
28
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
29
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
30
|
+
And the url for the column 'avatar' should be '/uploads/bork.txt'
|
31
|
+
|
32
|
+
# Scenario: store a file and retrieve it later
|
33
|
+
# When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
34
|
+
# And I retrieve the file later from the cache name for the column 'avatar'
|
35
|
+
# And I save the datamapper record
|
36
|
+
# Then there should be a file at 'public/uploads/bork.txt'
|
37
|
+
# When I reload the datamapper record
|
38
|
+
# Then the url for the column 'avatar' should be '/uploads/bork.txt'
|
39
|
+
#
|
40
|
+
# Scenario: store a file and delete the record
|
41
|
+
# When I assign the file 'fixtures/bork.txt' to the 'avatar' column
|
42
|
+
# And I retrieve the file later from the cache name for the column 'avatar'
|
43
|
+
# And I save the datamapper record
|
44
|
+
# Then there should be a file at 'public/uploads/bork.txt'
|
45
|
+
# When I delete the datamapper record
|
46
|
+
# Then there should not be a file at 'public/uploads/bork.txt'
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Given /^an activerecord class that uses the '([^\']*)' table$/ do |name|
|
4
|
+
@mountee_klass = Class.new(ActiveRecord::Base)
|
5
|
+
@mountee_klass.table_name = name
|
6
|
+
end
|
7
|
+
|
8
|
+
Given /^an instance of the activerecord class$/ do
|
9
|
+
@instance = @mountee_klass.new
|
10
|
+
end
|
11
|
+
|
12
|
+
When /^I save the active record$/ do
|
13
|
+
@instance.save!
|
14
|
+
end
|
15
|
+
|
16
|
+
When /^I reload the active record$/ do
|
17
|
+
@instance = @instance.class.find(@instance.id)
|
18
|
+
end
|
19
|
+
|
20
|
+
When /^I delete the active record$/ do
|
21
|
+
@instance.destroy
|
22
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Given /^the file '(.*?)' is cached file at '(.*?)'$/ do |file, cached|
|
4
|
+
FileUtils.mkdir_p(File.dirname(file_path(cached)))
|
5
|
+
FileUtils.cp(file_path(file), file_path(cached))
|
6
|
+
end
|
7
|
+
|
8
|
+
When /^I cache the file '(.*?)'$/ do |file|
|
9
|
+
@uploader.cache!(File.open(file_path(file)))
|
10
|
+
end
|
11
|
+
|
12
|
+
When /^I retrieve the cache name '(.*?)' from the cache$/ do |name|
|
13
|
+
@uploader.retrieve_from_cache!(name)
|
14
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Given /^a datamapper class that has a '([^\']*)' column$/ do |column|
|
4
|
+
@mountee_klass = Class.new do
|
5
|
+
include DataMapper::Resource
|
6
|
+
|
7
|
+
storage_names[:default] = 'users'
|
8
|
+
|
9
|
+
property :id, Integer, :key => true
|
10
|
+
property column.to_sym, String
|
11
|
+
end
|
12
|
+
@mountee_klass.auto_migrate!
|
13
|
+
end
|
14
|
+
|
15
|
+
Given /^an instance of the datamapper class$/ do
|
16
|
+
@instance = @mountee_klass.new
|
17
|
+
end
|
18
|
+
|
19
|
+
When /^I save the datamapper record$/ do
|
20
|
+
@instance.save
|
21
|
+
end
|
22
|
+
|
23
|
+
When /^I reload the datamapper record$/ do
|
24
|
+
@instance = @instance.class.first(:id => @instance.key)
|
25
|
+
end
|
26
|
+
|
27
|
+
When /^I delete the datamapper record$/ do
|
28
|
+
@instance.destroy
|
29
|
+
end
|