carrierwave 0.11.2 → 3.0.7
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/README.md +452 -178
- data/lib/carrierwave/compatibility/paperclip.rb +4 -4
- data/lib/carrierwave/downloader/base.rb +101 -0
- data/lib/carrierwave/downloader/remote_file.rb +68 -0
- data/lib/carrierwave/error.rb +1 -0
- data/lib/carrierwave/locale/en.yml +11 -5
- data/lib/carrierwave/mount.rb +217 -182
- data/lib/carrierwave/mounter.rb +255 -0
- data/lib/carrierwave/orm/activerecord.rb +29 -35
- data/lib/carrierwave/processing/mini_magick.rb +140 -84
- data/lib/carrierwave/processing/rmagick.rb +72 -21
- data/lib/carrierwave/processing/vips.rb +284 -0
- data/lib/carrierwave/processing.rb +1 -1
- data/lib/carrierwave/sanitized_file.rb +83 -84
- data/lib/carrierwave/storage/abstract.rb +16 -3
- data/lib/carrierwave/storage/file.rb +71 -3
- data/lib/carrierwave/storage/fog.rb +215 -57
- data/lib/carrierwave/storage.rb +1 -9
- data/lib/carrierwave/test/matchers.rb +88 -19
- data/lib/carrierwave/uploader/cache.rb +75 -45
- data/lib/carrierwave/uploader/callbacks.rb +1 -3
- data/lib/carrierwave/uploader/configuration.rb +80 -16
- data/lib/carrierwave/uploader/content_type_allowlist.rb +62 -0
- data/lib/carrierwave/uploader/content_type_denylist.rb +62 -0
- data/lib/carrierwave/uploader/default_url.rb +3 -5
- data/lib/carrierwave/uploader/dimension.rb +66 -0
- data/lib/carrierwave/uploader/download.rb +4 -74
- data/lib/carrierwave/uploader/extension_allowlist.rb +63 -0
- data/lib/carrierwave/uploader/extension_denylist.rb +64 -0
- data/lib/carrierwave/uploader/file_size.rb +43 -0
- data/lib/carrierwave/uploader/mountable.rb +13 -8
- data/lib/carrierwave/uploader/processing.rb +48 -13
- data/lib/carrierwave/uploader/proxy.rb +20 -9
- data/lib/carrierwave/uploader/remove.rb +0 -2
- data/lib/carrierwave/uploader/serialization.rb +2 -4
- data/lib/carrierwave/uploader/store.rb +59 -28
- data/lib/carrierwave/uploader/url.rb +8 -7
- data/lib/carrierwave/uploader/versions.rb +171 -123
- data/lib/carrierwave/uploader.rb +12 -10
- data/lib/carrierwave/utilities/file_name.rb +47 -0
- data/lib/carrierwave/utilities/uri.rb +14 -12
- data/lib/carrierwave/utilities.rb +1 -3
- data/lib/carrierwave/validations/active_model.rb +7 -11
- data/lib/carrierwave/version.rb +1 -1
- data/lib/carrierwave.rb +39 -21
- data/lib/generators/templates/{uploader.rb → uploader.rb.erb} +6 -10
- data/lib/generators/uploader_generator.rb +3 -3
- metadata +135 -83
- 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/uploader/content_type_blacklist.rb +0 -48
- data/lib/carrierwave/uploader/content_type_whitelist.rb +0 -48
- data/lib/carrierwave/uploader/extension_blacklist.rb +0 -47
- data/lib/carrierwave/uploader/extension_whitelist.rb +0 -49
- data/lib/carrierwave/utilities/deprecation.rb +0 -18
@@ -0,0 +1,47 @@
|
|
1
|
+
module CarrierWave
|
2
|
+
module Utilities
|
3
|
+
module FileName
|
4
|
+
|
5
|
+
##
|
6
|
+
# Returns the part of the filename before the extension. So if a file is called 'test.jpeg'
|
7
|
+
# this would return 'test'
|
8
|
+
#
|
9
|
+
# === Returns
|
10
|
+
#
|
11
|
+
# [String] the first part of the filename
|
12
|
+
#
|
13
|
+
def basename
|
14
|
+
split_extension(filename)[0] if filename
|
15
|
+
end
|
16
|
+
|
17
|
+
##
|
18
|
+
# Returns the file extension
|
19
|
+
#
|
20
|
+
# === Returns
|
21
|
+
#
|
22
|
+
# [String] extension of file or "" if the file has no extension
|
23
|
+
#
|
24
|
+
def extension
|
25
|
+
split_extension(filename)[1] if filename
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def split_extension(filename)
|
31
|
+
# regular expressions to try for identifying extensions
|
32
|
+
extension_matchers = [
|
33
|
+
/\A(.+)\.(tar\.([glx]?z|bz2))\z/, # matches "something.tar.gz"
|
34
|
+
/\A(.+)\.([^\.]+)\z/ # matches "something.jpg"
|
35
|
+
]
|
36
|
+
|
37
|
+
extension_matchers.each do |regexp|
|
38
|
+
if filename =~ regexp
|
39
|
+
return $1, $2
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
[filename, ""] # In case we weren't able to split the extension
|
44
|
+
end
|
45
|
+
end # FileName
|
46
|
+
end # Utilities
|
47
|
+
end # CarrierWave
|
@@ -1,23 +1,25 @@
|
|
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
|
+
PATH_SAFE = URI::REGEXP::PATTERN::UNRESERVED + '\/'
|
8
|
+
PATH_UNSAFE = Regexp.new("[^#{PATH_SAFE}]", false)
|
9
|
+
NON_ASCII = /[^[:ascii:]]/.freeze
|
6
10
|
|
7
11
|
private
|
12
|
+
|
8
13
|
def encode_path(path)
|
9
|
-
|
10
|
-
|
11
|
-
|
14
|
+
URI::DEFAULT_PARSER.escape(path, PATH_UNSAFE)
|
15
|
+
end
|
16
|
+
|
17
|
+
def encode_non_ascii(str)
|
18
|
+
URI::DEFAULT_PARSER.escape(str, NON_ASCII)
|
19
|
+
end
|
12
20
|
|
13
|
-
|
14
|
-
|
15
|
-
tmp = ''
|
16
|
-
us.each_byte do |uc|
|
17
|
-
tmp << sprintf('%%%02X', uc)
|
18
|
-
end
|
19
|
-
tmp
|
20
|
-
end
|
21
|
+
def decode_uri(str)
|
22
|
+
URI::DEFAULT_PARSER.unescape(str)
|
21
23
|
end
|
22
24
|
end # Uri
|
23
25
|
end # Utilities
|
@@ -1,5 +1,3 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
require 'active_model/validator'
|
4
2
|
require 'active_support/concern'
|
5
3
|
|
@@ -13,9 +11,8 @@ module CarrierWave
|
|
13
11
|
class ProcessingValidator < ::ActiveModel::EachValidator
|
14
12
|
|
15
13
|
def validate_each(record, attribute, value)
|
16
|
-
|
17
|
-
message
|
18
|
-
record.errors.add(attribute, message)
|
14
|
+
record.__send__("#{attribute}_processing_errors").each do |e|
|
15
|
+
record.errors.add(attribute, :carrierwave_processing_error, message: (e.message != e.class.to_s) && e.message)
|
19
16
|
end
|
20
17
|
end
|
21
18
|
end
|
@@ -23,9 +20,8 @@ module CarrierWave
|
|
23
20
|
class IntegrityValidator < ::ActiveModel::EachValidator
|
24
21
|
|
25
22
|
def validate_each(record, attribute, value)
|
26
|
-
|
27
|
-
message
|
28
|
-
record.errors.add(attribute, message)
|
23
|
+
record.__send__("#{attribute}_integrity_errors").each do |e|
|
24
|
+
record.errors.add(attribute, :carrierwave_integrity_error, message: (e.message != e.class.to_s) && e.message)
|
29
25
|
end
|
30
26
|
end
|
31
27
|
end
|
@@ -33,9 +29,8 @@ module CarrierWave
|
|
33
29
|
class DownloadValidator < ::ActiveModel::EachValidator
|
34
30
|
|
35
31
|
def validate_each(record, attribute, value)
|
36
|
-
|
37
|
-
message
|
38
|
-
record.errors.add(attribute, message)
|
32
|
+
record.__send__("#{attribute}_download_errors").each do |e|
|
33
|
+
record.errors.add(attribute, :carrierwave_download_error, message: (e.message != e.class.to_s) && e.message)
|
39
34
|
end
|
40
35
|
end
|
41
36
|
end
|
@@ -60,6 +55,7 @@ module CarrierWave
|
|
60
55
|
def validates_processing_of(*attr_names)
|
61
56
|
validates_with ProcessingValidator, _merge_attributes(attr_names)
|
62
57
|
end
|
58
|
+
|
63
59
|
#
|
64
60
|
##
|
65
61
|
# Makes the record invalid if the remote file couldn't be downloaded
|
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,26 +17,45 @@ 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
|
23
27
|
|
24
|
-
if defined?(
|
28
|
+
if defined?(Jets)
|
29
|
+
|
30
|
+
module CarrierWave
|
31
|
+
class Turbine < Jets::Turbine
|
32
|
+
initializer "carrierwave.setup_paths" do |app|
|
33
|
+
CarrierWave.root = Jets.root.to_s
|
34
|
+
CarrierWave.tmp_path = "/tmp/carrierwave"
|
35
|
+
CarrierWave.configure do |config|
|
36
|
+
config.cache_dir = "/tmp/carrierwave/uploads/tmp"
|
37
|
+
end
|
38
|
+
end
|
25
39
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
40
|
+
initializer "carrierwave.active_record" do
|
41
|
+
ActiveSupport.on_load :active_record do
|
42
|
+
require 'carrierwave/orm/activerecord'
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
31
46
|
end
|
32
47
|
|
33
48
|
elsif defined?(Rails)
|
34
49
|
|
35
50
|
module CarrierWave
|
36
51
|
class Railtie < Rails::Railtie
|
37
|
-
initializer "carrierwave.setup_paths" do
|
52
|
+
initializer "carrierwave.setup_paths" do |app|
|
38
53
|
CarrierWave.root = Rails.root.join(Rails.public_path).to_s
|
39
54
|
CarrierWave.base_path = ENV['RAILS_RELATIVE_URL_ROOT']
|
55
|
+
available_locales = Array(app.config.i18n.available_locales || [])
|
56
|
+
if available_locales.blank? || available_locales.include?(:en)
|
57
|
+
I18n.load_path.prepend(File.join(File.dirname(__FILE__), 'carrierwave', 'locale', "en.yml"))
|
58
|
+
end
|
40
59
|
end
|
41
60
|
|
42
61
|
initializer "carrierwave.active_record" do
|
@@ -45,11 +64,8 @@ elsif defined?(Rails)
|
|
45
64
|
end
|
46
65
|
end
|
47
66
|
|
48
|
-
|
49
|
-
|
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')
|
67
|
+
config.before_eager_load do
|
68
|
+
CarrierWave::Storage::Fog.eager_load
|
53
69
|
end
|
54
70
|
end
|
55
71
|
end
|
@@ -59,19 +75,21 @@ elsif defined?(Sinatra)
|
|
59
75
|
CarrierWave.root = File.join(PADRINO_ROOT, "public")
|
60
76
|
else
|
61
77
|
|
62
|
-
CarrierWave.root =
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
78
|
+
CarrierWave.root =
|
79
|
+
if Sinatra::Application.respond_to?(:public_folder)
|
80
|
+
# Sinatra >= 1.3
|
81
|
+
Sinatra::Application.public_folder
|
82
|
+
else
|
83
|
+
# Sinatra < 1.3
|
84
|
+
Sinatra::Application.public
|
85
|
+
end
|
69
86
|
end
|
70
87
|
end
|
71
88
|
|
72
89
|
require "carrierwave/utilities"
|
73
90
|
require "carrierwave/error"
|
74
91
|
require "carrierwave/sanitized_file"
|
92
|
+
require "carrierwave/mounter"
|
75
93
|
require "carrierwave/mount"
|
76
94
|
require "carrierwave/processing"
|
77
95
|
require "carrierwave/version"
|
@@ -1,7 +1,4 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
1
|
class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
4
|
-
|
5
2
|
# Include RMagick or MiniMagick support:
|
6
3
|
# include CarrierWave::RMagick
|
7
4
|
# include CarrierWave::MiniMagick
|
@@ -17,7 +14,7 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
17
14
|
end
|
18
15
|
|
19
16
|
# Provide a default URL as a default if there hasn't been a file uploaded:
|
20
|
-
# def default_url
|
17
|
+
# def default_url(*args)
|
21
18
|
# # For Rails 3.1+ asset pipeline compatibility:
|
22
19
|
# # ActionController::Base.helpers.asset_path("fallback/" + [version_name, "default.png"].compact.join('_'))
|
23
20
|
#
|
@@ -25,7 +22,7 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
25
22
|
# end
|
26
23
|
|
27
24
|
# Process files as they are uploaded:
|
28
|
-
# process :
|
25
|
+
# process scale: [200, 300]
|
29
26
|
#
|
30
27
|
# def scale(width, height)
|
31
28
|
# # do something
|
@@ -33,19 +30,18 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
|
|
33
30
|
|
34
31
|
# Create different versions of your uploaded files:
|
35
32
|
# version :thumb do
|
36
|
-
# process :
|
33
|
+
# process resize_to_fit: [50, 50]
|
37
34
|
# end
|
38
35
|
|
39
|
-
# Add
|
36
|
+
# Add an allowlist of extensions which are allowed to be uploaded.
|
40
37
|
# For images you might use something like this:
|
41
|
-
# def
|
38
|
+
# def extension_allowlist
|
42
39
|
# %w(jpg jpeg gif png)
|
43
40
|
# end
|
44
41
|
|
45
42
|
# Override the filename of the uploaded files:
|
46
43
|
# Avoid using model.id or version_name here, see uploader/store.rb for details.
|
47
44
|
# def filename
|
48
|
-
# "something.jpg"
|
45
|
+
# "something.jpg"
|
49
46
|
# end
|
50
|
-
|
51
47
|
end
|
@@ -1,7 +1,7 @@
|
|
1
1
|
class UploaderGenerator < Rails::Generators::NamedBase
|
2
|
-
source_root File.expand_path(
|
2
|
+
source_root File.expand_path('templates', __dir__)
|
3
3
|
|
4
4
|
def create_uploader_file
|
5
|
-
template "uploader.rb", File.join('app/uploaders', class_path, "#{file_name}_uploader.rb")
|
5
|
+
template "uploader.rb.erb", File.join('app/uploaders', class_path, "#{file_name}_uploader.rb")
|
6
6
|
end
|
7
|
-
end
|
7
|
+
end
|