durran-carrierwave 0.3.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/Generators +4 -0
- data/History.txt +66 -0
- data/LICENSE +8 -0
- data/Manifest.txt +89 -0
- data/README.rdoc +342 -0
- data/Rakefile +30 -0
- data/carrierwave.gemspec +57 -0
- data/cucumber.yml +2 -0
- data/features/caching.feature +28 -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/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/file_steps.rb +42 -0
- data/features/step_definitions/general_steps.rb +80 -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 +35 -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.rb +145 -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 +332 -0
- data/lib/carrierwave/orm/activerecord.rb +73 -0
- data/lib/carrierwave/orm/datamapper.rb +27 -0
- data/lib/carrierwave/orm/mongomapper.rb +27 -0
- data/lib/carrierwave/orm/sequel.rb +57 -0
- data/lib/carrierwave/processing/image_science.rb +72 -0
- data/lib/carrierwave/processing/rmagick.rb +286 -0
- data/lib/carrierwave/sanitized_file.rb +272 -0
- data/lib/carrierwave/storage/abstract.rb +32 -0
- data/lib/carrierwave/storage/file.rb +50 -0
- data/lib/carrierwave/storage/s3.rb +215 -0
- data/lib/carrierwave/test/matchers.rb +114 -0
- data/lib/carrierwave/uploader.rb +43 -0
- data/lib/carrierwave/uploader/cache.rb +116 -0
- data/lib/carrierwave/uploader/callbacks.rb +42 -0
- data/lib/carrierwave/uploader/default_path.rb +23 -0
- data/lib/carrierwave/uploader/extension_whitelist.rb +37 -0
- data/lib/carrierwave/uploader/mountable.rb +39 -0
- data/lib/carrierwave/uploader/paths.rb +27 -0
- data/lib/carrierwave/uploader/processing.rb +81 -0
- data/lib/carrierwave/uploader/proxy.rb +62 -0
- data/lib/carrierwave/uploader/remove.rb +23 -0
- data/lib/carrierwave/uploader/store.rb +156 -0
- data/lib/carrierwave/uploader/url.rb +24 -0
- data/lib/carrierwave/uploader/versions.rb +147 -0
- data/lib/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 +43 -0
- data/spec/fixtures/bork.txt +1 -0
- data/spec/fixtures/test.jpeg +1 -0
- data/spec/fixtures/test.jpg +1 -0
- data/spec/mount_spec.rb +517 -0
- data/spec/orm/activerecord_spec.rb +271 -0
- data/spec/orm/datamapper_spec.rb +161 -0
- data/spec/orm/mongomapper_spec.rb +184 -0
- data/spec/orm/sequel_spec.rb +192 -0
- data/spec/sanitized_file_spec.rb +612 -0
- data/spec/spec_helper.rb +99 -0
- data/spec/uploader/cache_spec.rb +196 -0
- data/spec/uploader/default_path_spec.rb +68 -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 +62 -0
- data/spec/uploader/proxy_spec.rb +54 -0
- data/spec/uploader/remove_spec.rb +70 -0
- data/spec/uploader/store_spec.rb +274 -0
- data/spec/uploader/url_spec.rb +87 -0
- data/spec/uploader/versions_spec.rb +306 -0
- metadata +228 -0
@@ -0,0 +1,42 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
###
|
4
|
+
# EXISTENCE
|
5
|
+
|
6
|
+
Then /^there should be a file at '(.*?)'$/ do |file|
|
7
|
+
File.exist?(file_path(file)).should be_true
|
8
|
+
end
|
9
|
+
|
10
|
+
Then /^there should not be a file at '(.*?)'$/ do |file|
|
11
|
+
File.exist?(file_path(file)).should be_false
|
12
|
+
end
|
13
|
+
|
14
|
+
Then /^there should be a file called '(.*?)' somewhere in a subdirectory of '(.*?)'$/ do |file, directory|
|
15
|
+
Dir.glob(File.join(file_path(directory), '**', file)).any?.should be_true
|
16
|
+
end
|
17
|
+
|
18
|
+
###
|
19
|
+
# IDENTICAL
|
20
|
+
|
21
|
+
Then /^the file at '(.*?)' should be identical to the file at '(.*?)'$/ do |one, two|
|
22
|
+
File.read(file_path(one)).should == File.read(file_path(two))
|
23
|
+
end
|
24
|
+
|
25
|
+
Then /^the file at '(.*?)' should not be identical to the file at '(.*?)'$/ do |one, two|
|
26
|
+
File.read(file_path(one)).should_not == File.read(file_path(two))
|
27
|
+
end
|
28
|
+
|
29
|
+
Then /^the file called '(.*?)' in a subdirectory of '(.*?)' should be identical to the file at '(.*?)'$/ do |file, directory, other|
|
30
|
+
File.read(Dir.glob(File.join(file_path(directory), '**', file)).first).should == File.read(file_path(other))
|
31
|
+
end
|
32
|
+
|
33
|
+
Then /^the file called '(.*?)' in a subdirectory of '(.*?)' should not be identical to the file at '(.*?)'$/ do |file, directory, other|
|
34
|
+
File.read(Dir.glob(File.join(file_path(directory), '**', file)).first).should_not == File.read(file_path(other))
|
35
|
+
end
|
36
|
+
|
37
|
+
###
|
38
|
+
# REVERSING
|
39
|
+
|
40
|
+
Then /^the file at '(.*?)' should be the reverse of the file at '(.*?)'$/ do |one, two|
|
41
|
+
File.read(file_path(one)).should == File.read(file_path(two)).reverse
|
42
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Given /^an uploader class that uses the 'file' storage$/ do
|
4
|
+
@klass = Class.new(CarrierWave::Uploader::Base)
|
5
|
+
end
|
6
|
+
|
7
|
+
Given /^an instance of that class$/ do
|
8
|
+
@uploader = @klass.new
|
9
|
+
end
|
10
|
+
|
11
|
+
Given /^that the uploader reverses the filename$/ do
|
12
|
+
@klass.class_eval do
|
13
|
+
def filename
|
14
|
+
super.reverse unless super.blank?
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
Given /^that the uploader has the filename overridden to '(.*?)'$/ do |filename|
|
20
|
+
@klass.class_eval do
|
21
|
+
define_method(:filename) do
|
22
|
+
filename
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
Given /^that the uploader has the store_dir overridden to '(.*?)'$/ do |store_dir|
|
28
|
+
@klass.class_eval do
|
29
|
+
define_method(:store_dir) do
|
30
|
+
file_path(store_dir)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
Given /^that the version '(.*?)' has the store_dir overridden to '(.*?)'$/ do |version, store_dir|
|
36
|
+
@klass.versions[version.to_sym].class_eval do
|
37
|
+
define_method(:store_dir) do
|
38
|
+
file_path(store_dir)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
Given /^that the uploader class has a version named '(.*?)'$/ do |name|
|
44
|
+
@klass.version(name)
|
45
|
+
end
|
46
|
+
|
47
|
+
Given /^yo dawg, I put a version called '(.*?)' in your version called '(.*?)'$/ do |v2, v1|
|
48
|
+
@klass.version(v1) do
|
49
|
+
version(v2)
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
Given /^the class has a method called 'reverse' that reverses the contents of a file$/ do
|
54
|
+
@klass.class_eval do
|
55
|
+
def reverse
|
56
|
+
text = File.read(current_path)
|
57
|
+
File.open(current_path, 'w') { |f| f.write(text.reverse) }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
Given /^the class will process '([a-zA-Z0-9\_\?!]*)'$/ do |name|
|
63
|
+
@klass.process name.to_sym
|
64
|
+
end
|
65
|
+
|
66
|
+
Then /^the uploader should have '(.*?)' as its current path$/ do |path|
|
67
|
+
@uploader.current_path.should == file_path(path)
|
68
|
+
end
|
69
|
+
|
70
|
+
Then /^the uploader should have the url '(.*?)'$/ do |url|
|
71
|
+
@uploader.url.should == url
|
72
|
+
end
|
73
|
+
|
74
|
+
Then /^the uploader's version '(.*?)' should have the url '(.*?)'$/ do |version, url|
|
75
|
+
@uploader.versions[version.to_sym].url.should == url
|
76
|
+
end
|
77
|
+
|
78
|
+
Then /^the uploader's nested version '(.*?)' nested in '(.*?)' should have the url '(.*?)'$/ do |v2, v1, url|
|
79
|
+
@uploader.versions[v1.to_sym].versions[v2.to_sym].url.should == url
|
80
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
When /^I assign the file '([^\']*)' to the '([^\']*)' column$/ do |path, column|
|
4
|
+
@instance.send("#{column}=", File.open(file_path(path)))
|
5
|
+
end
|
6
|
+
|
7
|
+
Given /^the uploader class is mounted on the '([^\']*)' column$/ do |column|
|
8
|
+
@mountee_klass.mount_uploader column.to_sym, @klass
|
9
|
+
end
|
10
|
+
|
11
|
+
When /^I retrieve the file later from the cache name for the column '([^\']*)'$/ do |column|
|
12
|
+
new_instance = @instance.class.new
|
13
|
+
new_instance.send("#{column}_cache=", @instance.send("#{column}_cache"))
|
14
|
+
@instance = new_instance
|
15
|
+
end
|
16
|
+
|
17
|
+
Then /^the url for the column '([^\']*)' should be '([^\']*)'$/ do |column, url|
|
18
|
+
@instance.send("#{column}_url").should == url
|
19
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
Given /^the file '(.*?)' is stored at '(.*?)'$/ do |file, stored|
|
4
|
+
FileUtils.mkdir_p(File.dirname(file_path(stored)))
|
5
|
+
FileUtils.cp(file_path(file), file_path(stored))
|
6
|
+
end
|
7
|
+
|
8
|
+
When /^I store the file$/ do
|
9
|
+
@uploader.store!
|
10
|
+
end
|
11
|
+
|
12
|
+
When /^I store the file '(.*?)'$/ do |file|
|
13
|
+
@uploader.store!(File.open(file_path(file)))
|
14
|
+
end
|
15
|
+
|
16
|
+
When /^I retrieve the file '(.*?)' from the store$/ do |identifier|
|
17
|
+
@uploader.retrieve_from_store!(identifier)
|
18
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
require 'activerecord'
|
4
|
+
require 'carrierwave/mount'
|
5
|
+
require 'carrierwave/orm/activerecord'
|
6
|
+
|
7
|
+
# change this if sqlite is unavailable
|
8
|
+
dbconfig = {
|
9
|
+
:adapter => 'sqlite3',
|
10
|
+
:database => ':memory:'
|
11
|
+
}
|
12
|
+
|
13
|
+
ActiveRecord::Base.establish_connection(dbconfig)
|
14
|
+
ActiveRecord::Migration.verbose = false
|
15
|
+
|
16
|
+
class TestMigration < ActiveRecord::Migration
|
17
|
+
def self.up
|
18
|
+
create_table :users, :force => true do |t|
|
19
|
+
t.column :avatar, :string
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.down
|
24
|
+
drop_table :users
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
Before do
|
29
|
+
TestMigration.up
|
30
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$TESTING=true
|
4
|
+
$:.push File.join(File.dirname(__FILE__), '..', 'lib')
|
5
|
+
|
6
|
+
require 'rubygems'
|
7
|
+
require File.join(File.dirname(__FILE__), 'activerecord')
|
8
|
+
require File.join(File.dirname(__FILE__), 'datamapper')
|
9
|
+
|
10
|
+
if ENV["AS"]
|
11
|
+
puts "--> using ActiveSupport"
|
12
|
+
require 'activesupport'
|
13
|
+
elsif ENV["EXTLIB"]
|
14
|
+
puts "--> using Extlib"
|
15
|
+
require 'extlib'
|
16
|
+
end
|
17
|
+
|
18
|
+
require 'tempfile'
|
19
|
+
#require 'ruby-debug'
|
20
|
+
require 'spec'
|
21
|
+
|
22
|
+
require 'carrierwave'
|
23
|
+
|
24
|
+
alias :running :lambda
|
25
|
+
|
26
|
+
def file_path( *paths )
|
27
|
+
File.expand_path(File.join(File.dirname(__FILE__), '..', *paths))
|
28
|
+
end
|
29
|
+
|
30
|
+
CarrierWave.config[:public] = file_path('public')
|
31
|
+
CarrierWave.config[:root] = file_path
|
32
|
+
|
33
|
+
After do
|
34
|
+
FileUtils.rm_rf(file_path("public"))
|
35
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
Feature: uploader with file storage and versions
|
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 class has a version named 'thumb'
|
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/bork.txt'
|
14
|
+
Then there should be a file at 'public/uploads/thumb_bork.txt'
|
15
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
16
|
+
And the file at 'public/uploads/thumb_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
17
|
+
And the uploader should have the url '/uploads/bork.txt'
|
18
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
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
|
+
Then there should be a file called 'thumb_bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
24
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
25
|
+
And there should not be a file at 'public/uploads/bork.txt'
|
26
|
+
And there should not be a file at 'public/uploads/thumb_bork.txt'
|
27
|
+
When I store the file
|
28
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
29
|
+
And there should be a file at 'public/uploads/thumb_bork.txt'
|
30
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
31
|
+
And the file at 'public/uploads/thumb_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
32
|
+
And the uploader should have the url '/uploads/bork.txt'
|
33
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
34
|
+
|
35
|
+
Scenario: retrieving a file from cache then storing
|
36
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
37
|
+
Given the file 'fixtures/monkey.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/thumb_bork.txt'
|
38
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
39
|
+
And I store the file
|
40
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
41
|
+
Then there should be a file at 'public/uploads/thumb_bork.txt'
|
42
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
43
|
+
And the file at 'public/uploads/thumb_bork.txt' should be identical to the file at 'fixtures/monkey.txt'
|
44
|
+
|
45
|
+
Scenario: retrieving a file from store
|
46
|
+
Given the file 'fixtures/bork.txt' is stored at 'public/uploads/bork.txt'
|
47
|
+
Given the file 'fixtures/monkey.txt' is stored at 'public/uploads/thumb_bork.txt'
|
48
|
+
When I retrieve the file 'bork.txt' from the store
|
49
|
+
Then the uploader should have the url '/uploads/bork.txt'
|
50
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
@@ -0,0 +1,70 @@
|
|
1
|
+
Feature: uploader with nested versions
|
2
|
+
In order to optimize performance for processing
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to set nested versions
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And that the uploader class has a version named 'thumb'
|
9
|
+
And yo dawg, I put a version called 'mini' in your version called 'thumb'
|
10
|
+
And yo dawg, I put a version called 'micro' in your version called 'thumb'
|
11
|
+
And an instance of that class
|
12
|
+
|
13
|
+
Scenario: store a file
|
14
|
+
When I store the file 'fixtures/bork.txt'
|
15
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
16
|
+
Then there should be a file at 'public/uploads/thumb_bork.txt'
|
17
|
+
Then there should be a file at 'public/uploads/thumb_mini_bork.txt'
|
18
|
+
Then there should be a file at 'public/uploads/thumb_micro_bork.txt'
|
19
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
20
|
+
And the file at 'public/uploads/thumb_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
21
|
+
And the file at 'public/uploads/thumb_mini_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
22
|
+
And the file at 'public/uploads/thumb_micro_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
23
|
+
And the uploader should have the url '/uploads/bork.txt'
|
24
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
25
|
+
And the uploader's nested version 'mini' nested in 'thumb' should have the url '/uploads/thumb_mini_bork.txt'
|
26
|
+
And the uploader's nested version 'micro' nested in 'thumb' should have the url '/uploads/thumb_micro_bork.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
|
+
Then there should be a file called 'thumb_bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
32
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
33
|
+
And there should not be a file at 'public/uploads/bork.txt'
|
34
|
+
And there should not be a file at 'public/uploads/thumb_bork.txt'
|
35
|
+
When I store the file
|
36
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
37
|
+
And there should be a file at 'public/uploads/thumb_bork.txt'
|
38
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
39
|
+
And the file at 'public/uploads/thumb_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
40
|
+
And the uploader should have the url '/uploads/bork.txt'
|
41
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
42
|
+
And the uploader's nested version 'mini' nested in 'thumb' should have the url '/uploads/thumb_mini_bork.txt'
|
43
|
+
And the uploader's nested version 'micro' nested in 'thumb' should have the url '/uploads/thumb_micro_bork.txt'
|
44
|
+
|
45
|
+
Scenario: retrieving a file from cache then storing
|
46
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
47
|
+
Given the file 'fixtures/monkey.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/thumb_bork.txt'
|
48
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/thumb_mini_bork.txt'
|
49
|
+
Given the file 'fixtures/monkey.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/thumb_micro_bork.txt'
|
50
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
51
|
+
And I store the file
|
52
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
53
|
+
Then there should be a file at 'public/uploads/thumb_bork.txt'
|
54
|
+
Then there should be a file at 'public/uploads/thumb_mini_bork.txt'
|
55
|
+
Then there should be a file at 'public/uploads/thumb_micro_bork.txt'
|
56
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
57
|
+
And the file at 'public/uploads/thumb_bork.txt' should be identical to the file at 'fixtures/monkey.txt'
|
58
|
+
And the file at 'public/uploads/thumb_mini_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
59
|
+
And the file at 'public/uploads/thumb_micro_bork.txt' should be identical to the file at 'fixtures/monkey.txt'
|
60
|
+
|
61
|
+
Scenario: retrieving a file from store
|
62
|
+
Given the file 'fixtures/bork.txt' is stored at 'public/uploads/bork.txt'
|
63
|
+
Given the file 'fixtures/monkey.txt' is stored at 'public/uploads/thumb_bork.txt'
|
64
|
+
Given the file 'fixtures/monkey.txt' is stored at 'public/uploads/thumb_mini_bork.txt'
|
65
|
+
Given the file 'fixtures/monkey.txt' is stored at 'public/uploads/thumb_micro_bork.txt'
|
66
|
+
When I retrieve the file 'bork.txt' from the store
|
67
|
+
Then the uploader should have the url '/uploads/bork.txt'
|
68
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
69
|
+
And the uploader's nested version 'mini' nested in 'thumb' should have the url '/uploads/thumb_mini_bork.txt'
|
70
|
+
And the uploader's nested version 'micro' nested in 'thumb' should have the url '/uploads/thumb_micro_bork.txt'
|
@@ -0,0 +1,51 @@
|
|
1
|
+
Feature: uploader with file storage and overriden filename
|
2
|
+
In order to customize the filaname of uploaded files
|
3
|
+
As a developer using CarrierWave
|
4
|
+
I want to upload files to the filesystem with an overriden filename and different verions
|
5
|
+
|
6
|
+
Background:
|
7
|
+
Given an uploader class that uses the 'file' storage
|
8
|
+
And that the uploader class has a version named 'thumb'
|
9
|
+
And that the uploader has the filename overridden to 'grark.png'
|
10
|
+
And an instance of that class
|
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/grark.png'
|
15
|
+
Then there should be a file at 'public/uploads/thumb_grark.png'
|
16
|
+
And the file at 'public/uploads/grark.png' should be identical to the file at 'fixtures/bork.txt'
|
17
|
+
And the file at 'public/uploads/thumb_grark.png' should be identical to the file at 'fixtures/bork.txt'
|
18
|
+
And the uploader should have the url '/uploads/grark.png'
|
19
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_grark.png'
|
20
|
+
|
21
|
+
Scenario: cache a file and then store it
|
22
|
+
When I cache the file 'fixtures/bork.txt'
|
23
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
24
|
+
Then there should be a file called 'thumb_bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
25
|
+
And the file called 'bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
26
|
+
And there should not be a file at 'public/uploads/grark.png'
|
27
|
+
And there should not be a file at 'public/uploads/thumb_grark.png'
|
28
|
+
When I store the file
|
29
|
+
Then there should be a file at 'public/uploads/grark.png'
|
30
|
+
And there should be a file at 'public/uploads/thumb_grark.png'
|
31
|
+
And the file at 'public/uploads/grark.png' should be identical to the file at 'fixtures/bork.txt'
|
32
|
+
And the file at 'public/uploads/thumb_grark.png' should be identical to the file at 'fixtures/bork.txt'
|
33
|
+
And the uploader should have the url '/uploads/grark.png'
|
34
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_grark.png'
|
35
|
+
|
36
|
+
Scenario: retrieving a file from cache then storing
|
37
|
+
Given the file 'fixtures/bork.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/bork.txt'
|
38
|
+
Given the file 'fixtures/monkey.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/thumb_bork.txt'
|
39
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
40
|
+
And I store the file
|
41
|
+
Then there should be a file at 'public/uploads/grark.png'
|
42
|
+
Then there should be a file at 'public/uploads/thumb_grark.png'
|
43
|
+
And the file at 'public/uploads/grark.png' should be identical to the file at 'fixtures/bork.txt'
|
44
|
+
And the file at 'public/uploads/thumb_grark.png' should be identical to the file at 'fixtures/monkey.txt'
|
45
|
+
|
46
|
+
Scenario: retrieving a file from store
|
47
|
+
Given the file 'fixtures/bork.txt' is stored at 'public/uploads/bork.txt'
|
48
|
+
Given the file 'fixtures/monkey.txt' is stored at 'public/uploads/thumb_bork.txt'
|
49
|
+
When I retrieve the file 'bork.txt' from the store
|
50
|
+
Then the uploader should have the url '/uploads/bork.txt'
|
51
|
+
And the uploader's version 'thumb' should have the url '/uploads/thumb_bork.txt'
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: uploader with file storage and versions with 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 class has a version named 'thumb'
|
9
|
+
And that the version 'thumb' has the store_dir overridden to 'public/monkey/llama'
|
10
|
+
And an instance of that class
|
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
|
+
Then there should be a file at 'public/monkey/llama/thumb_bork.txt'
|
16
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
17
|
+
And the file at 'public/monkey/llama/thumb_bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
18
|
+
|
19
|
+
Scenario: cache a file and then store it
|
20
|
+
When I cache the file 'fixtures/bork.txt'
|
21
|
+
Then there should be a file called 'bork.txt' somewhere in a subdirectory of 'public/uploads/tmp'
|
22
|
+
Then there should be a file called 'thumb_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 the file called 'thumb_bork.txt' in a subdirectory of 'public/uploads/tmp' should be identical to the file at 'fixtures/bork.txt'
|
25
|
+
And there should not be a file at 'public/uploads/bork.txt'
|
26
|
+
And there should not be a file at 'public/monkey/llama/thumb_bork.txt'
|
27
|
+
When I store the file
|
28
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
29
|
+
Then there should be a file at 'public/monkey/llama/thumb_bork.txt'
|
30
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
31
|
+
And the file at 'public/monkey/llama/thumb_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
|
+
Given the file 'fixtures/monkey.txt' is cached file at 'public/uploads/tmp/20090212-2343-8336-0348/thumb_bork.txt'
|
36
|
+
When I retrieve the cache name '20090212-2343-8336-0348/bork.txt' from the cache
|
37
|
+
And I store the file
|
38
|
+
Then there should be a file at 'public/uploads/bork.txt'
|
39
|
+
Then there should be a file at 'public/monkey/llama/thumb_bork.txt'
|
40
|
+
And the file at 'public/uploads/bork.txt' should be identical to the file at 'fixtures/bork.txt'
|
41
|
+
And the file at 'public/monkey/llama/thumb_bork.txt' should be identical to the file at 'fixtures/monkey.txt'
|