carrierwave 0.10.0 → 1.2.0
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.
- checksums.yaml +4 -4
- data/README.md +248 -116
- data/lib/carrierwave/compatibility/paperclip.rb +0 -2
- data/lib/carrierwave/error.rb +1 -0
- data/lib/carrierwave/locale/en.yml +7 -4
- data/lib/carrierwave/mount.rb +219 -176
- data/lib/carrierwave/mounter.rb +165 -0
- data/lib/carrierwave/orm/activerecord.rb +50 -21
- data/lib/carrierwave/processing/mini_magick.rb +82 -15
- data/lib/carrierwave/processing/rmagick.rb +47 -4
- data/lib/carrierwave/processing.rb +0 -1
- data/lib/carrierwave/sanitized_file.rb +38 -18
- data/lib/carrierwave/storage/abstract.rb +15 -2
- data/lib/carrierwave/storage/file.rb +65 -2
- data/lib/carrierwave/storage/fog.rb +106 -31
- data/lib/carrierwave/storage.rb +0 -7
- data/lib/carrierwave/test/matchers.rb +77 -12
- data/lib/carrierwave/uploader/cache.rb +58 -30
- data/lib/carrierwave/uploader/callbacks.rb +0 -2
- data/lib/carrierwave/uploader/configuration.rb +51 -8
- data/lib/carrierwave/uploader/content_type_blacklist.rb +48 -0
- data/lib/carrierwave/uploader/content_type_whitelist.rb +48 -0
- data/lib/carrierwave/uploader/default_url.rb +3 -5
- data/lib/carrierwave/uploader/download.rb +15 -8
- data/lib/carrierwave/uploader/extension_blacklist.rb +14 -10
- data/lib/carrierwave/uploader/extension_whitelist.rb +13 -10
- data/lib/carrierwave/uploader/file_size.rb +43 -0
- data/lib/carrierwave/uploader/magic_mime_blacklist.rb +94 -0
- data/lib/carrierwave/uploader/magic_mime_whitelist.rb +94 -0
- data/lib/carrierwave/uploader/mountable.rb +7 -8
- data/lib/carrierwave/uploader/processing.rb +10 -10
- data/lib/carrierwave/uploader/proxy.rb +5 -7
- data/lib/carrierwave/uploader/remove.rb +0 -2
- data/lib/carrierwave/uploader/serialization.rb +1 -3
- data/lib/carrierwave/uploader/store.rb +5 -23
- data/lib/carrierwave/uploader/url.rb +3 -5
- data/lib/carrierwave/uploader/versions.rb +75 -82
- data/lib/carrierwave/uploader.rb +6 -2
- data/lib/carrierwave/utilities/uri.rb +5 -6
- data/lib/carrierwave/utilities.rb +0 -3
- data/lib/carrierwave/validations/active_model.rb +3 -5
- data/lib/carrierwave/version.rb +1 -1
- data/lib/carrierwave.rb +12 -10
- data/lib/generators/templates/uploader.rb +4 -6
- metadata +37 -61
- data/lib/carrierwave/locale/cs.yml +0 -11
- data/lib/carrierwave/locale/de.yml +0 -11
- data/lib/carrierwave/locale/el.yml +0 -11
- data/lib/carrierwave/locale/es.yml +0 -11
- data/lib/carrierwave/locale/fr.yml +0 -11
- data/lib/carrierwave/locale/ja.yml +0 -11
- data/lib/carrierwave/locale/nb.yml +0 -11
- data/lib/carrierwave/locale/nl.yml +0 -11
- data/lib/carrierwave/locale/pl.yml +0 -11
- data/lib/carrierwave/locale/pt-BR.yml +0 -11
- data/lib/carrierwave/locale/pt-PT.yml +0 -11
- data/lib/carrierwave/locale/ru.yml +0 -11
- data/lib/carrierwave/locale/sk.yml +0 -11
- data/lib/carrierwave/locale/tr.yml +0 -11
- data/lib/carrierwave/processing/mime_types.rb +0 -74
- data/lib/carrierwave/utilities/deprecation.rb +0 -18
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module CarrierWave
|
4
2
|
module Uploader
|
5
3
|
module Mountable
|
@@ -7,13 +5,14 @@ module CarrierWave
|
|
7
5
|
attr_reader :model, :mounted_as
|
8
6
|
|
9
7
|
##
|
10
|
-
# If a model is given as the first parameter, it will be stored in the
|
11
|
-
# available
|
12
|
-
# where this instance of the uploader is mounted.
|
13
|
-
# your uploader.
|
8
|
+
# If a model is given as the first parameter, it will be stored in the
|
9
|
+
# uploader, and available through +#model+. Likewise, mounted_as stores
|
10
|
+
# the name of the column where this instance of the uploader is mounted.
|
11
|
+
# These values can then be used inside your uploader.
|
14
12
|
#
|
15
|
-
# If you do not wish to mount your uploaders with the ORM extensions in
|
16
|
-
# can override this method inside your uploader. Just be
|
13
|
+
# If you do not wish to mount your uploaders with the ORM extensions in
|
14
|
+
# -more then you can override this method inside your uploader. Just be
|
15
|
+
# sure to call +super+
|
17
16
|
#
|
18
17
|
# === Parameters
|
19
18
|
#
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module CarrierWave
|
4
2
|
module Uploader
|
5
3
|
module Processing
|
@@ -11,7 +9,7 @@ module CarrierWave
|
|
11
9
|
class_attribute :processors, :instance_writer => false
|
12
10
|
self.processors = []
|
13
11
|
|
14
|
-
|
12
|
+
before :cache, :process!
|
15
13
|
end
|
16
14
|
|
17
15
|
module ClassMethods
|
@@ -73,15 +71,17 @@ module CarrierWave
|
|
73
71
|
def process!(new_file=nil)
|
74
72
|
return unless enable_processing
|
75
73
|
|
76
|
-
|
77
|
-
|
78
|
-
if
|
79
|
-
|
80
|
-
|
81
|
-
|
74
|
+
with_callbacks(:process, new_file) do
|
75
|
+
self.class.processors.each do |method, args, condition|
|
76
|
+
if(condition)
|
77
|
+
if condition.respond_to?(:call)
|
78
|
+
next unless condition.call(self, :args => args, :method => method, :file => new_file)
|
79
|
+
else
|
80
|
+
next unless self.send(condition, new_file)
|
81
|
+
end
|
82
82
|
end
|
83
|
+
self.send(method, *args)
|
83
84
|
end
|
84
|
-
self.send(method, *args)
|
85
85
|
end
|
86
86
|
end
|
87
87
|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module CarrierWave
|
4
2
|
module Uploader
|
5
3
|
module Proxy
|
@@ -19,7 +17,7 @@ module CarrierWave
|
|
19
17
|
# [String] the path where the file is currently located.
|
20
18
|
#
|
21
19
|
def current_path
|
22
|
-
file.
|
20
|
+
file.try(:path)
|
23
21
|
end
|
24
22
|
|
25
23
|
alias_method :path, :current_path
|
@@ -32,7 +30,7 @@ module CarrierWave
|
|
32
30
|
# [String] uniquely identifies a file
|
33
31
|
#
|
34
32
|
def identifier
|
35
|
-
storage.
|
33
|
+
storage.try(:identifier)
|
36
34
|
end
|
37
35
|
|
38
36
|
##
|
@@ -43,7 +41,7 @@ module CarrierWave
|
|
43
41
|
# [String] contents of the file
|
44
42
|
#
|
45
43
|
def read
|
46
|
-
file.
|
44
|
+
file.try(:read)
|
47
45
|
end
|
48
46
|
|
49
47
|
##
|
@@ -54,7 +52,7 @@ module CarrierWave
|
|
54
52
|
# [Integer] size of the file
|
55
53
|
#
|
56
54
|
def size
|
57
|
-
file.
|
55
|
+
file.try(:size) || 0
|
58
56
|
end
|
59
57
|
|
60
58
|
##
|
@@ -80,7 +78,7 @@ module CarrierWave
|
|
80
78
|
# [String] content type of the file
|
81
79
|
#
|
82
80
|
def content_type
|
83
|
-
file.
|
81
|
+
file.try(:content_type)
|
84
82
|
end
|
85
83
|
|
86
84
|
end # Proxy
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require "json"
|
4
2
|
require "active_support/core_ext/hash"
|
5
3
|
|
@@ -13,7 +11,7 @@ module CarrierWave
|
|
13
11
|
end
|
14
12
|
|
15
13
|
def as_json(options=nil)
|
16
|
-
|
14
|
+
serializable_hash
|
17
15
|
end
|
18
16
|
|
19
17
|
def to_json(options=nil)
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module CarrierWave
|
4
2
|
module Uploader
|
5
3
|
module Store
|
@@ -54,35 +52,19 @@ module CarrierWave
|
|
54
52
|
#
|
55
53
|
def store!(new_file=nil)
|
56
54
|
cache!(new_file) if new_file && ((@cache_id != parent_cache_id) || @cache_id.nil?)
|
57
|
-
if @file and @cache_id
|
55
|
+
if !cache_only and @file and @cache_id
|
58
56
|
with_callbacks(:store, new_file) do
|
59
57
|
new_file = storage.store!(@file)
|
60
|
-
|
61
|
-
|
58
|
+
if delete_tmp_file_after_storage
|
59
|
+
@file.delete unless move_to_store
|
60
|
+
cache_storage.delete_dir!(cache_path(nil))
|
61
|
+
end
|
62
62
|
@file = new_file
|
63
63
|
@cache_id = nil
|
64
64
|
end
|
65
65
|
end
|
66
66
|
end
|
67
67
|
|
68
|
-
##
|
69
|
-
# Deletes a cache id (tmp dir in cache)
|
70
|
-
#
|
71
|
-
def delete_cache_id
|
72
|
-
if @cache_id
|
73
|
-
path = File.expand_path(File.join(cache_dir, @cache_id), CarrierWave.root)
|
74
|
-
begin
|
75
|
-
Dir.rmdir(path)
|
76
|
-
rescue Errno::ENOENT
|
77
|
-
# Ignore: path does not exist
|
78
|
-
rescue Errno::ENOTDIR
|
79
|
-
# Ignore: path is not a dir
|
80
|
-
rescue Errno::ENOTEMPTY, Errno::EEXIST
|
81
|
-
# Ignore: dir is not empty
|
82
|
-
end
|
83
|
-
end
|
84
|
-
end
|
85
|
-
|
86
68
|
##
|
87
69
|
# Retrieves the file from the storage.
|
88
70
|
#
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module CarrierWave
|
4
2
|
module Uploader
|
5
3
|
module Url
|
@@ -17,10 +15,10 @@ module CarrierWave
|
|
17
15
|
# [String] the location where this file is accessible via a url
|
18
16
|
#
|
19
17
|
def url(options = {})
|
20
|
-
if file.respond_to?(:url) and not file.url.blank?
|
21
|
-
file.method(:url).arity == 0 ?
|
18
|
+
if file.respond_to?(:url) and not (tmp_url = file.url).blank?
|
19
|
+
file.method(:url).arity == 0 ? tmp_url : file.url(options)
|
22
20
|
elsif file.respond_to?(:path)
|
23
|
-
path = encode_path(file.path.
|
21
|
+
path = encode_path(file.path.sub(File.expand_path(root), ''))
|
24
22
|
|
25
23
|
if host = asset_host
|
26
24
|
if host.respond_to? :call
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
module CarrierWave
|
4
2
|
module Uploader
|
5
3
|
module Versions
|
@@ -8,12 +6,12 @@ module CarrierWave
|
|
8
6
|
include CarrierWave::Uploader::Callbacks
|
9
7
|
|
10
8
|
included do
|
11
|
-
class_attribute :versions, :version_names, :instance_reader => false, :instance_writer => false
|
9
|
+
class_attribute :versions, :version_names, :version_options, :instance_reader => false, :instance_writer => false
|
12
10
|
|
13
11
|
self.versions = {}
|
14
12
|
self.version_names = []
|
15
13
|
|
16
|
-
attr_accessor :parent_cache_id
|
14
|
+
attr_accessor :parent_cache_id, :parent_version
|
17
15
|
|
18
16
|
after :cache, :assign_parent_cache_id
|
19
17
|
after :cache, :cache_versions!
|
@@ -50,72 +48,74 @@ module CarrierWave
|
|
50
48
|
#
|
51
49
|
def version(name, options = {}, &block)
|
52
50
|
name = name.to_sym
|
53
|
-
build_version(name, options)
|
51
|
+
build_version(name, options)
|
54
52
|
|
55
|
-
versions[name]
|
53
|
+
versions[name].class_eval(&block) if block
|
56
54
|
versions[name]
|
57
55
|
end
|
58
56
|
|
59
57
|
def recursively_apply_block_to_versions(&block)
|
60
58
|
versions.each do |name, version|
|
61
|
-
version
|
62
|
-
version
|
59
|
+
version.class_eval(&block)
|
60
|
+
version.recursively_apply_block_to_versions(&block)
|
63
61
|
end
|
64
62
|
end
|
65
63
|
|
66
64
|
private
|
67
65
|
|
68
66
|
def build_version(name, options)
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
67
|
+
if !versions.has_key?(name)
|
68
|
+
uploader = Class.new(self)
|
69
|
+
const_set("Uploader#{uploader.object_id}".tr('-', '_'), uploader)
|
70
|
+
uploader.version_names += [name]
|
71
|
+
uploader.versions = {}
|
72
|
+
uploader.processors = []
|
73
|
+
uploader.version_options = options
|
74
|
+
|
75
|
+
uploader.class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
76
|
+
# Define the enable_processing method for versions so they get the
|
77
|
+
# value from the parent class unless explicitly overwritten
|
78
|
+
def self.enable_processing(value=nil)
|
79
|
+
self.enable_processing = value if value
|
80
|
+
if !@enable_processing.nil?
|
81
|
+
@enable_processing
|
82
|
+
else
|
83
|
+
superclass.enable_processing
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
# Regardless of what is set in the parent uploader, do not enforce the
|
88
|
+
# move_to_cache config option on versions because it moves the original
|
89
|
+
# file to the version's target file.
|
90
|
+
#
|
91
|
+
# If you want to enforce this setting on versions, override this method
|
92
|
+
# in each version:
|
93
|
+
#
|
94
|
+
# version :thumb do
|
95
|
+
# def move_to_cache
|
96
|
+
# true
|
97
|
+
# end
|
98
|
+
# end
|
99
|
+
#
|
100
|
+
def move_to_cache
|
101
|
+
false
|
84
102
|
end
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
#
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
# end
|
99
|
-
#
|
100
|
-
def move_to_cache
|
101
|
-
false
|
102
|
-
end
|
103
|
-
RUBY
|
104
|
-
|
105
|
-
class_eval <<-RUBY
|
106
|
-
def #{name}
|
107
|
-
versions[:#{name}]
|
108
|
-
end
|
109
|
-
RUBY
|
103
|
+
RUBY
|
104
|
+
|
105
|
+
class_eval <<-RUBY, __FILE__, __LINE__ + 1
|
106
|
+
def #{name}
|
107
|
+
versions[:#{name}]
|
108
|
+
end
|
109
|
+
RUBY
|
110
|
+
else
|
111
|
+
uploader = Class.new(versions[name])
|
112
|
+
const_set("Uploader#{uploader.object_id}".tr('-', '_'), uploader)
|
113
|
+
uploader.processors = []
|
114
|
+
uploader.version_options = uploader.version_options.merge(options)
|
115
|
+
end
|
110
116
|
|
111
117
|
# Add the current version hash to class attribute :versions
|
112
|
-
|
113
|
-
name => {
|
114
|
-
:uploader => uploader,
|
115
|
-
:options => options
|
116
|
-
}
|
117
|
-
}
|
118
|
-
self.versions = versions.merge(current_version)
|
118
|
+
self.versions = versions.merge(name => uploader)
|
119
119
|
end
|
120
120
|
|
121
121
|
end # ClassMethods
|
@@ -131,7 +131,8 @@ module CarrierWave
|
|
131
131
|
return @versions if @versions
|
132
132
|
@versions = {}
|
133
133
|
self.class.versions.each do |name, version|
|
134
|
-
@versions[name] = version
|
134
|
+
@versions[name] = version.new(model, mounted_as)
|
135
|
+
@versions[name].parent_version = self
|
135
136
|
end
|
136
137
|
@versions
|
137
138
|
end
|
@@ -160,7 +161,7 @@ module CarrierWave
|
|
160
161
|
|
161
162
|
return false unless self.class.versions.has_key?(name)
|
162
163
|
|
163
|
-
condition = self.class.versions[name][:
|
164
|
+
condition = self.class.versions[name].version_options[:if]
|
164
165
|
if(condition)
|
165
166
|
if(condition.respond_to?(:call))
|
166
167
|
condition.call(self, :version => name, :file => file)
|
@@ -241,6 +242,18 @@ module CarrierWave
|
|
241
242
|
end
|
242
243
|
end
|
243
244
|
|
245
|
+
def dependent_versions
|
246
|
+
active_versions.reject do |name, v|
|
247
|
+
v.class.version_options[:from_version]
|
248
|
+
end.to_a + sibling_versions.select do |name, v|
|
249
|
+
v.class.version_options[:from_version] == self.class.version_names.last
|
250
|
+
end.to_a
|
251
|
+
end
|
252
|
+
|
253
|
+
def sibling_versions
|
254
|
+
parent_version.try(:versions) || []
|
255
|
+
end
|
256
|
+
|
244
257
|
def full_filename(for_file)
|
245
258
|
[version_name, super(for_file)].compact.join('_')
|
246
259
|
end
|
@@ -250,29 +263,9 @@ module CarrierWave
|
|
250
263
|
end
|
251
264
|
|
252
265
|
def cache_versions!(new_file)
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
processed_parent = SanitizedFile.new :tempfile => self.file,
|
257
|
-
:filename => new_file.original_filename
|
258
|
-
|
259
|
-
active_versions.each do |name, v|
|
260
|
-
next if v.cached?
|
261
|
-
|
262
|
-
v.send(:cache_id=, cache_id)
|
263
|
-
# If option :from_version is present, create cache using cached file from
|
264
|
-
# version indicated
|
265
|
-
if self.class.versions[name][:options] && self.class.versions[name][:options][:from_version]
|
266
|
-
# Maybe the reference version has not been cached yet
|
267
|
-
unless versions[self.class.versions[name][:options][:from_version]].cached?
|
268
|
-
versions[self.class.versions[name][:options][:from_version]].cache!(processed_parent)
|
269
|
-
end
|
270
|
-
processed_version = SanitizedFile.new :tempfile => versions[self.class.versions[name][:options][:from_version]],
|
271
|
-
:filename => new_file.original_filename
|
272
|
-
v.cache!(processed_version)
|
273
|
-
else
|
274
|
-
v.cache!(processed_parent)
|
275
|
-
end
|
266
|
+
dependent_versions.each do |name, v|
|
267
|
+
v.send(:cache_id=, @cache_id)
|
268
|
+
v.cache!(new_file)
|
276
269
|
end
|
277
270
|
end
|
278
271
|
|
@@ -290,11 +283,11 @@ module CarrierWave
|
|
290
283
|
end
|
291
284
|
|
292
285
|
def retrieve_versions_from_cache!(cache_name)
|
293
|
-
|
286
|
+
active_versions.each { |name, v| v.retrieve_from_cache!(cache_name) }
|
294
287
|
end
|
295
288
|
|
296
289
|
def retrieve_versions_from_store!(identifier)
|
297
|
-
|
290
|
+
active_versions.each { |name, v| v.retrieve_from_store!(identifier) }
|
298
291
|
end
|
299
292
|
|
300
293
|
end # Versions
|
data/lib/carrierwave/uploader.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require "carrierwave/uploader/configuration"
|
4
2
|
require "carrierwave/uploader/callbacks"
|
5
3
|
require "carrierwave/uploader/proxy"
|
@@ -11,6 +9,9 @@ require "carrierwave/uploader/download"
|
|
11
9
|
require "carrierwave/uploader/remove"
|
12
10
|
require "carrierwave/uploader/extension_whitelist"
|
13
11
|
require "carrierwave/uploader/extension_blacklist"
|
12
|
+
require "carrierwave/uploader/content_type_whitelist"
|
13
|
+
require "carrierwave/uploader/content_type_blacklist"
|
14
|
+
require "carrierwave/uploader/file_size"
|
14
15
|
require "carrierwave/uploader/processing"
|
15
16
|
require "carrierwave/uploader/versions"
|
16
17
|
require "carrierwave/uploader/default_url"
|
@@ -53,6 +54,9 @@ module CarrierWave
|
|
53
54
|
include CarrierWave::Uploader::Remove
|
54
55
|
include CarrierWave::Uploader::ExtensionWhitelist
|
55
56
|
include CarrierWave::Uploader::ExtensionBlacklist
|
57
|
+
include CarrierWave::Uploader::ContentTypeWhitelist
|
58
|
+
include CarrierWave::Uploader::ContentTypeBlacklist
|
59
|
+
include CarrierWave::Uploader::FileSize
|
56
60
|
include CarrierWave::Uploader::Processing
|
57
61
|
include CarrierWave::Uploader::Versions
|
58
62
|
include CarrierWave::Uploader::DefaultUrl
|
@@ -1,16 +1,15 @@
|
|
1
|
-
|
1
|
+
require 'uri'
|
2
2
|
|
3
3
|
module CarrierWave
|
4
4
|
module Utilities
|
5
5
|
module Uri
|
6
|
+
# based on Ruby < 2.0's URI.encode
|
7
|
+
SAFE_STRING = URI::REGEXP::PATTERN::UNRESERVED + '\/'
|
8
|
+
UNSAFE = Regexp.new("[^#{SAFE_STRING}]", false)
|
6
9
|
|
7
10
|
private
|
8
11
|
def encode_path(path)
|
9
|
-
|
10
|
-
safe_string = URI::REGEXP::PATTERN::UNRESERVED + '\/'
|
11
|
-
unsafe = Regexp.new("[^#{safe_string}]", false)
|
12
|
-
|
13
|
-
path.to_s.gsub(unsafe) do
|
12
|
+
path.to_s.gsub(UNSAFE) do
|
14
13
|
us = $&
|
15
14
|
tmp = ''
|
16
15
|
us.each_byte do |uc|
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'active_model/validator'
|
4
2
|
require 'active_support/concern'
|
5
3
|
|
@@ -13,7 +11,7 @@ module CarrierWave
|
|
13
11
|
class ProcessingValidator < ::ActiveModel::EachValidator
|
14
12
|
|
15
13
|
def validate_each(record, attribute, value)
|
16
|
-
if e = record.
|
14
|
+
if e = record.__send__("#{attribute}_processing_error")
|
17
15
|
message = (e.message == e.class.to_s) ? :carrierwave_processing_error : e.message
|
18
16
|
record.errors.add(attribute, message)
|
19
17
|
end
|
@@ -23,7 +21,7 @@ module CarrierWave
|
|
23
21
|
class IntegrityValidator < ::ActiveModel::EachValidator
|
24
22
|
|
25
23
|
def validate_each(record, attribute, value)
|
26
|
-
if e = record.
|
24
|
+
if e = record.__send__("#{attribute}_integrity_error")
|
27
25
|
message = (e.message == e.class.to_s) ? :carrierwave_integrity_error : e.message
|
28
26
|
record.errors.add(attribute, message)
|
29
27
|
end
|
@@ -33,7 +31,7 @@ module CarrierWave
|
|
33
31
|
class DownloadValidator < ::ActiveModel::EachValidator
|
34
32
|
|
35
33
|
def validate_each(record, attribute, value)
|
36
|
-
if e = record.
|
34
|
+
if e = record.__send__("#{attribute}_download_error")
|
37
35
|
message = (e.message == e.class.to_s) ? :carrierwave_download_error : e.message
|
38
36
|
record.errors.add(attribute, message)
|
39
37
|
end
|
data/lib/carrierwave/version.rb
CHANGED
data/lib/carrierwave.rb
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'fileutils'
|
4
2
|
require 'active_support/core_ext/object/blank'
|
3
|
+
require 'active_support/core_ext/object/try'
|
5
4
|
require 'active_support/core_ext/class/attribute'
|
6
5
|
require 'active_support/concern'
|
7
6
|
|
@@ -9,6 +8,7 @@ module CarrierWave
|
|
9
8
|
|
10
9
|
class << self
|
11
10
|
attr_accessor :root, :base_path
|
11
|
+
attr_writer :tmp_path
|
12
12
|
|
13
13
|
def configure(&block)
|
14
14
|
CarrierWave::Uploader::Base.configure(&block)
|
@@ -17,6 +17,10 @@ module CarrierWave
|
|
17
17
|
def clean_cached_files!(seconds=60*60*24)
|
18
18
|
CarrierWave::Uploader::Base.clean_cached_files!(seconds)
|
19
19
|
end
|
20
|
+
|
21
|
+
def tmp_path
|
22
|
+
@tmp_path ||= File.expand_path(File.join('..', 'tmp'), root)
|
23
|
+
end
|
20
24
|
end
|
21
25
|
|
22
26
|
end
|
@@ -34,9 +38,13 @@ elsif defined?(Rails)
|
|
34
38
|
|
35
39
|
module CarrierWave
|
36
40
|
class Railtie < Rails::Railtie
|
37
|
-
initializer "carrierwave.setup_paths" do
|
41
|
+
initializer "carrierwave.setup_paths" do |app|
|
38
42
|
CarrierWave.root = Rails.root.join(Rails.public_path).to_s
|
39
43
|
CarrierWave.base_path = ENV['RAILS_RELATIVE_URL_ROOT']
|
44
|
+
available_locales = app.config.i18n.available_locales
|
45
|
+
if available_locales.blank? || available_locales.include?(:en)
|
46
|
+
I18n.load_path.prepend(File.join(File.dirname(__FILE__), 'carrierwave', 'locale', "en.yml"))
|
47
|
+
end
|
40
48
|
end
|
41
49
|
|
42
50
|
initializer "carrierwave.active_record" do
|
@@ -44,13 +52,6 @@ elsif defined?(Rails)
|
|
44
52
|
require 'carrierwave/orm/activerecord'
|
45
53
|
end
|
46
54
|
end
|
47
|
-
|
48
|
-
##
|
49
|
-
# Loads the Carrierwave locale files before the Rails application locales
|
50
|
-
# letting the Rails application overrite the carrierwave locale defaults
|
51
|
-
config.before_configuration do
|
52
|
-
I18n.load_path << File.join(File.dirname(__FILE__), "carrierwave", "locale", 'en.yml')
|
53
|
-
end
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
@@ -72,6 +73,7 @@ end
|
|
72
73
|
require "carrierwave/utilities"
|
73
74
|
require "carrierwave/error"
|
74
75
|
require "carrierwave/sanitized_file"
|
76
|
+
require "carrierwave/mounter"
|
75
77
|
require "carrierwave/mount"
|
76
78
|
require "carrierwave/processing"
|
77
79
|
require "carrierwave/version"
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
4
2
|
|
5
3
|
# Include RMagick or MiniMagick support:
|
@@ -17,7 +15,7 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
17
15
|
end
|
18
16
|
|
19
17
|
# Provide a default URL as a default if there hasn't been a file uploaded:
|
20
|
-
# def default_url
|
18
|
+
# def default_url(*args)
|
21
19
|
# # For Rails 3.1+ asset pipeline compatibility:
|
22
20
|
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
23
21
|
#
|
@@ -25,7 +23,7 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
25
23
|
# end
|
26
24
|
|
27
25
|
# Process files as they are uploaded:
|
28
|
-
# process :
|
26
|
+
# process scale: [200, 300]
|
29
27
|
#
|
30
28
|
# def scale(width, height)
|
31
29
|
# # do something
|
@@ -33,12 +31,12 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
33
31
|
|
34
32
|
# Create different versions of your uploaded files:
|
35
33
|
# version :thumb do
|
36
|
-
# process :
|
34
|
+
# process resize_to_fit: [50, 50]
|
37
35
|
# end
|
38
36
|
|
39
37
|
# Add a white list of extensions which are allowed to be uploaded.
|
40
38
|
# For images you might use something like this:
|
41
|
-
# def
|
39
|
+
# def extension_whitelist
|
42
40
|
# %w(jpg jpeg gif png)
|
43
41
|
# end
|
44
42
|
|