carrierwave 1.3.4 → 3.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +278 -86
  3. data/lib/carrierwave/compatibility/paperclip.rb +4 -2
  4. data/lib/carrierwave/downloader/base.rb +101 -0
  5. data/lib/carrierwave/downloader/remote_file.rb +68 -0
  6. data/lib/carrierwave/locale/en.yml +9 -6
  7. data/lib/carrierwave/mount.rb +53 -61
  8. data/lib/carrierwave/mounter.rb +169 -77
  9. data/lib/carrierwave/orm/activerecord.rb +23 -58
  10. data/lib/carrierwave/processing/mini_magick.rb +137 -123
  11. data/lib/carrierwave/processing/rmagick.rb +47 -20
  12. data/lib/carrierwave/processing/vips.rb +315 -0
  13. data/lib/carrierwave/processing.rb +1 -0
  14. data/lib/carrierwave/sanitized_file.rb +83 -70
  15. data/lib/carrierwave/storage/abstract.rb +5 -5
  16. data/lib/carrierwave/storage/file.rb +6 -5
  17. data/lib/carrierwave/storage/fog.rb +114 -62
  18. data/lib/carrierwave/storage.rb +1 -0
  19. data/lib/carrierwave/test/matchers.rb +11 -7
  20. data/lib/carrierwave/uploader/cache.rb +40 -24
  21. data/lib/carrierwave/uploader/callbacks.rb +1 -1
  22. data/lib/carrierwave/uploader/configuration.rb +42 -19
  23. data/lib/carrierwave/uploader/content_type_allowlist.rb +62 -0
  24. data/lib/carrierwave/uploader/content_type_denylist.rb +62 -0
  25. data/lib/carrierwave/uploader/dimension.rb +66 -0
  26. data/lib/carrierwave/uploader/download.rb +2 -123
  27. data/lib/carrierwave/uploader/extension_allowlist.rb +63 -0
  28. data/lib/carrierwave/uploader/extension_denylist.rb +64 -0
  29. data/lib/carrierwave/uploader/file_size.rb +2 -2
  30. data/lib/carrierwave/uploader/mountable.rb +6 -0
  31. data/lib/carrierwave/uploader/processing.rb +45 -7
  32. data/lib/carrierwave/uploader/proxy.rb +17 -4
  33. data/lib/carrierwave/uploader/serialization.rb +1 -1
  34. data/lib/carrierwave/uploader/store.rb +73 -7
  35. data/lib/carrierwave/uploader/url.rb +7 -4
  36. data/lib/carrierwave/uploader/versions.rb +161 -111
  37. data/lib/carrierwave/uploader.rb +10 -17
  38. data/lib/carrierwave/utilities/file_name.rb +47 -0
  39. data/lib/carrierwave/utilities/uri.rb +14 -11
  40. data/lib/carrierwave/utilities.rb +1 -0
  41. data/lib/carrierwave/validations/active_model.rb +7 -9
  42. data/lib/carrierwave/version.rb +1 -1
  43. data/lib/carrierwave.rb +22 -17
  44. data/lib/generators/templates/{uploader.rb → uploader.rb.erb} +5 -4
  45. data/lib/generators/uploader_generator.rb +3 -3
  46. metadata +94 -47
  47. data/lib/carrierwave/uploader/content_type_blacklist.rb +0 -48
  48. data/lib/carrierwave/uploader/content_type_whitelist.rb +0 -48
  49. data/lib/carrierwave/uploader/extension_blacklist.rb +0 -51
  50. data/lib/carrierwave/uploader/extension_whitelist.rb +0 -52
@@ -7,11 +7,12 @@ require "carrierwave/uploader/cache"
7
7
  require "carrierwave/uploader/store"
8
8
  require "carrierwave/uploader/download"
9
9
  require "carrierwave/uploader/remove"
10
- require "carrierwave/uploader/extension_whitelist"
11
- require "carrierwave/uploader/extension_blacklist"
12
- require "carrierwave/uploader/content_type_whitelist"
13
- require "carrierwave/uploader/content_type_blacklist"
10
+ require "carrierwave/uploader/extension_allowlist"
11
+ require "carrierwave/uploader/extension_denylist"
12
+ require "carrierwave/uploader/content_type_allowlist"
13
+ require "carrierwave/uploader/content_type_denylist"
14
14
  require "carrierwave/uploader/file_size"
15
+ require "carrierwave/uploader/dimension"
15
16
  require "carrierwave/uploader/processing"
16
17
  require "carrierwave/uploader/versions"
17
18
  require "carrierwave/uploader/default_url"
@@ -43,15 +44,6 @@ module CarrierWave
43
44
  class Base
44
45
  attr_reader :file
45
46
 
46
- ##
47
- # Workaround for class_attribute malfunction when used with Module#prepend
48
- #
49
- if RUBY_VERSION < '2.1.0'
50
- def self.singleton_class?
51
- !ancestors.include? self
52
- end
53
- end
54
-
55
47
  include CarrierWave::Uploader::Configuration
56
48
  include CarrierWave::Uploader::Callbacks
57
49
  include CarrierWave::Uploader::Proxy
@@ -61,11 +53,12 @@ module CarrierWave
61
53
  include CarrierWave::Uploader::Store
62
54
  include CarrierWave::Uploader::Download
63
55
  include CarrierWave::Uploader::Remove
64
- include CarrierWave::Uploader::ExtensionWhitelist
65
- include CarrierWave::Uploader::ExtensionBlacklist
66
- include CarrierWave::Uploader::ContentTypeWhitelist
67
- include CarrierWave::Uploader::ContentTypeBlacklist
56
+ include CarrierWave::Uploader::ExtensionAllowlist
57
+ include CarrierWave::Uploader::ExtensionDenylist
58
+ include CarrierWave::Uploader::ContentTypeAllowlist
59
+ include CarrierWave::Uploader::ContentTypeDenylist
68
60
  include CarrierWave::Uploader::FileSize
61
+ include CarrierWave::Uploader::Dimension
69
62
  include CarrierWave::Uploader::Processing
70
63
  include CarrierWave::Uploader::Versions
71
64
  include CarrierWave::Uploader::DefaultUrl
@@ -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
@@ -3,20 +3,23 @@ require 'uri'
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
+ # based on Ruby < 2.0's URI.encode
7
+ PATH_SAFE = URI::RFC2396_REGEXP::PATTERN::UNRESERVED + '\/'
8
+ PATH_UNSAFE = Regexp.new("[^#{PATH_SAFE}]", false)
9
+ NON_ASCII = /[^[:ascii:]]/.freeze
9
10
 
10
11
  private
12
+
11
13
  def encode_path(path)
12
- path.to_s.gsub(UNSAFE) do
13
- us = $&
14
- tmp = ''
15
- us.each_byte do |uc|
16
- tmp << sprintf('%%%02X', uc)
17
- end
18
- tmp
19
- end
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
20
+
21
+ def decode_uri(str)
22
+ URI::DEFAULT_PARSER.unescape(str)
20
23
  end
21
24
  end # Uri
22
25
  end # Utilities
@@ -1,4 +1,5 @@
1
1
  require 'carrierwave/utilities/uri'
2
+ require 'carrierwave/utilities/file_name'
2
3
 
3
4
  module CarrierWave
4
5
  module Utilities
@@ -11,9 +11,8 @@ module CarrierWave
11
11
  class ProcessingValidator < ::ActiveModel::EachValidator
12
12
 
13
13
  def validate_each(record, attribute, value)
14
- if e = record.__send__("#{attribute}_processing_error")
15
- message = (e.message == e.class.to_s) ? :carrierwave_processing_error : e.message
16
- 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)
17
16
  end
18
17
  end
19
18
  end
@@ -21,9 +20,8 @@ module CarrierWave
21
20
  class IntegrityValidator < ::ActiveModel::EachValidator
22
21
 
23
22
  def validate_each(record, attribute, value)
24
- if e = record.__send__("#{attribute}_integrity_error")
25
- message = (e.message == e.class.to_s) ? :carrierwave_integrity_error : e.message
26
- 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)
27
25
  end
28
26
  end
29
27
  end
@@ -31,9 +29,8 @@ module CarrierWave
31
29
  class DownloadValidator < ::ActiveModel::EachValidator
32
30
 
33
31
  def validate_each(record, attribute, value)
34
- if e = record.__send__("#{attribute}_download_error")
35
- message = (e.message == e.class.to_s) ? :carrierwave_download_error : e.message
36
- 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)
37
34
  end
38
35
  end
39
36
  end
@@ -58,6 +55,7 @@ module CarrierWave
58
55
  def validates_processing_of(*attr_names)
59
56
  validates_with ProcessingValidator, _merge_attributes(attr_names)
60
57
  end
58
+
61
59
  #
62
60
  ##
63
61
  # Makes the record invalid if the remote file couldn't be downloaded
@@ -1,3 +1,3 @@
1
1
  module CarrierWave
2
- VERSION = "1.3.4"
2
+ VERSION = "3.1.2".freeze
3
3
  end
data/lib/carrierwave.rb CHANGED
@@ -3,6 +3,7 @@ require 'active_support/core_ext/object/blank'
3
3
  require 'active_support/core_ext/object/try'
4
4
  require 'active_support/core_ext/class/attribute'
5
5
  require 'active_support/concern'
6
+ require 'active_support/deprecation'
6
7
 
7
8
  module CarrierWave
8
9
 
@@ -21,20 +22,15 @@ module CarrierWave
21
22
  def tmp_path
22
23
  @tmp_path ||= File.expand_path(File.join('..', 'tmp'), root)
23
24
  end
25
+
26
+ def deprecator
27
+ @deprecator ||= ActiveSupport::Deprecation.new("#{CarrierWave::VERSION.split('.')[0].to_i + 1}.0", "CarrierWave")
28
+ end
24
29
  end
25
30
 
26
31
  end
27
32
 
28
- if defined?(Merb)
29
-
30
- CarrierWave.root = Merb.dir_for(:public)
31
- Merb::BootLoader.before_app_loads do
32
- # Setup path for uploaders and load all of them before classes are loaded
33
- Merb.push_path(:uploaders, Merb.root / 'app' / 'uploaders', '*.rb')
34
- Dir.glob(File.join(Merb.load_paths[:uploaders])).each {|f| require f }
35
- end
36
-
37
- elsif defined?(Jets)
33
+ if defined?(Jets)
38
34
 
39
35
  module CarrierWave
40
36
  class Turbine < Jets::Turbine
@@ -72,6 +68,14 @@ elsif defined?(Rails)
72
68
  require 'carrierwave/orm/activerecord'
73
69
  end
74
70
  end
71
+
72
+ initializer "carrierwave.deprecator" do |app|
73
+ app.deprecators[:carrierwave] = CarrierWave.deprecator if app.respond_to?(:deprecators)
74
+ end
75
+
76
+ config.before_eager_load do
77
+ CarrierWave::Storage::Fog.eager_load
78
+ end
75
79
  end
76
80
  end
77
81
 
@@ -80,13 +84,14 @@ elsif defined?(Sinatra)
80
84
  CarrierWave.root = File.join(PADRINO_ROOT, "public")
81
85
  else
82
86
 
83
- CarrierWave.root = if Sinatra::Application.respond_to?(:public_folder)
84
- # Sinatra >= 1.3
85
- Sinatra::Application.public_folder
86
- else
87
- # Sinatra < 1.3
88
- Sinatra::Application.public
89
- end
87
+ CarrierWave.root =
88
+ if Sinatra::Application.respond_to?(:public_folder)
89
+ # Sinatra >= 1.3
90
+ Sinatra::Application.public_folder
91
+ else
92
+ # Sinatra < 1.3
93
+ Sinatra::Application.public
94
+ end
90
95
  end
91
96
  end
92
97
 
@@ -1,7 +1,8 @@
1
1
  class <%= class_name %>Uploader < CarrierWave::Uploader::Base
2
- # Include RMagick or MiniMagick support:
2
+ # Include RMagick, MiniMagick, or Vips support:
3
3
  # include CarrierWave::RMagick
4
4
  # include CarrierWave::MiniMagick
5
+ # include CarrierWave::Vips
5
6
 
6
7
  # Choose what kind of storage to use for this uploader:
7
8
  storage :file
@@ -33,15 +34,15 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
33
34
  # process resize_to_fit: [50, 50]
34
35
  # end
35
36
 
36
- # Add a white list of extensions which are allowed to be uploaded.
37
+ # Add an allowlist of extensions which are allowed to be uploaded.
37
38
  # For images you might use something like this:
38
- # def extension_whitelist
39
+ # def extension_allowlist
39
40
  # %w(jpg jpeg gif png)
40
41
  # end
41
42
 
42
43
  # Override the filename of the uploaded files:
43
44
  # Avoid using model.id or version_name here, see uploader/store.rb for details.
44
45
  # def filename
45
- # "something.jpg" if original_filename
46
+ # "something.jpg"
46
47
  # end
47
48
  end
@@ -1,7 +1,7 @@
1
1
  class UploaderGenerator < Rails::Generators::NamedBase
2
- source_root File.expand_path("../templates", __FILE__)
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
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: carrierwave
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.3.4
4
+ version: 3.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-09-24 00:00:00.000000000 Z
11
+ date: 2025-04-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,90 +16,112 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0
19
+ version: 6.0.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: 4.0.0
26
+ version: 6.0.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: activemodel
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: 4.0.0
33
+ version: 6.0.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: 4.0.0
40
+ version: 6.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: mime-types
42
+ name: image_processing
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: '1.1'
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.16'
54
+ version: '1.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: ssrf_filter
56
+ name: marcel
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
- - - "<"
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 1.0.0
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
60
67
  - !ruby/object:Gem::Version
61
- version: 1.1.0
68
+ version: 1.0.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: addressable
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
62
73
  - - "~>"
63
74
  - !ruby/object:Gem::Version
64
- version: '1.0'
75
+ version: '2.6'
65
76
  type: :runtime
66
77
  prerelease: false
67
78
  version_requirements: !ruby/object:Gem::Requirement
68
79
  requirements:
69
- - - "<"
80
+ - - "~>"
70
81
  - !ruby/object:Gem::Version
71
- version: 1.1.0
82
+ version: '2.6'
83
+ - !ruby/object:Gem::Dependency
84
+ name: ssrf_filter
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '1.0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
72
94
  - - "~>"
73
95
  - !ruby/object:Gem::Version
74
96
  version: '1.0'
75
97
  - !ruby/object:Gem::Dependency
76
- name: rails
98
+ name: csv
77
99
  requirement: !ruby/object:Gem::Requirement
78
100
  requirements:
79
- - - ">="
101
+ - - "~>"
80
102
  - !ruby/object:Gem::Version
81
- version: 5.0.0
103
+ version: '3.0'
82
104
  type: :development
83
105
  prerelease: false
84
106
  version_requirements: !ruby/object:Gem::Requirement
85
107
  requirements:
86
- - - ">="
108
+ - - "~>"
87
109
  - !ruby/object:Gem::Version
88
- version: 5.0.0
110
+ version: '3.0'
89
111
  - !ruby/object:Gem::Dependency
90
112
  name: cucumber
91
113
  requirement: !ruby/object:Gem::Requirement
92
114
  requirements:
93
- - - "~>"
115
+ - - ">="
94
116
  - !ruby/object:Gem::Version
95
- version: '2.3'
117
+ version: '0'
96
118
  type: :development
97
119
  prerelease: false
98
120
  version_requirements: !ruby/object:Gem::Requirement
99
121
  requirements:
100
- - - "~>"
122
+ - - ">="
101
123
  - !ruby/object:Gem::Version
102
- version: '2.3'
124
+ version: '0'
103
125
  - !ruby/object:Gem::Dependency
104
126
  name: rspec
105
127
  requirement: !ruby/object:Gem::Requirement
@@ -115,7 +137,7 @@ dependencies:
115
137
  - !ruby/object:Gem::Version
116
138
  version: '3.4'
117
139
  - !ruby/object:Gem::Dependency
118
- name: webmock
140
+ name: rspec-retry
119
141
  requirement: !ruby/object:Gem::Requirement
120
142
  requirements:
121
143
  - - ">="
@@ -129,21 +151,21 @@ dependencies:
129
151
  - !ruby/object:Gem::Version
130
152
  version: '0'
131
153
  - !ruby/object:Gem::Dependency
132
- name: fog-core
154
+ name: rubocop
133
155
  requirement: !ruby/object:Gem::Requirement
134
156
  requirements:
135
157
  - - "~>"
136
158
  - !ruby/object:Gem::Version
137
- version: 2.1.0
159
+ version: '1.28'
138
160
  type: :development
139
161
  prerelease: false
140
162
  version_requirements: !ruby/object:Gem::Requirement
141
163
  requirements:
142
164
  - - "~>"
143
165
  - !ruby/object:Gem::Version
144
- version: 2.1.0
166
+ version: '1.28'
145
167
  - !ruby/object:Gem::Dependency
146
- name: fog-aws
168
+ name: webmock
147
169
  requirement: !ruby/object:Gem::Requirement
148
170
  requirements:
149
171
  - - ">="
@@ -157,7 +179,7 @@ dependencies:
157
179
  - !ruby/object:Gem::Version
158
180
  version: '0'
159
181
  - !ruby/object:Gem::Dependency
160
- name: fog-google
182
+ name: fog-aws
161
183
  requirement: !ruby/object:Gem::Requirement
162
184
  requirements:
163
185
  - - ">="
@@ -171,21 +193,27 @@ dependencies:
171
193
  - !ruby/object:Gem::Version
172
194
  version: '0'
173
195
  - !ruby/object:Gem::Dependency
174
- name: fog-local
196
+ name: fog-google
175
197
  requirement: !ruby/object:Gem::Requirement
176
198
  requirements:
177
- - - ">="
199
+ - - "~>"
178
200
  - !ruby/object:Gem::Version
179
- version: '0'
201
+ version: '1.7'
202
+ - - "!="
203
+ - !ruby/object:Gem::Version
204
+ version: 1.12.1
180
205
  type: :development
181
206
  prerelease: false
182
207
  version_requirements: !ruby/object:Gem::Requirement
183
208
  requirements:
184
- - - ">="
209
+ - - "~>"
185
210
  - !ruby/object:Gem::Version
186
- version: '0'
211
+ version: '1.7'
212
+ - - "!="
213
+ - !ruby/object:Gem::Version
214
+ version: 1.12.1
187
215
  - !ruby/object:Gem::Dependency
188
- name: fog-rackspace
216
+ name: fog-local
189
217
  requirement: !ruby/object:Gem::Requirement
190
218
  requirements:
191
219
  - - ">="
@@ -204,14 +232,14 @@ dependencies:
204
232
  requirements:
205
233
  - - ">="
206
234
  - !ruby/object:Gem::Version
207
- version: 3.6.0
235
+ version: '0'
208
236
  type: :development
209
237
  prerelease: false
210
238
  version_requirements: !ruby/object:Gem::Requirement
211
239
  requirements:
212
240
  - - ">="
213
241
  - !ruby/object:Gem::Version
214
- version: 3.6.0
242
+ version: '0'
215
243
  - !ruby/object:Gem::Dependency
216
244
  name: rmagick
217
245
  requirement: !ruby/object:Gem::Requirement
@@ -268,6 +296,20 @@ dependencies:
268
296
  - - ">="
269
297
  - !ruby/object:Gem::Version
270
298
  version: '0'
299
+ - !ruby/object:Gem::Dependency
300
+ name: pry-byebug
301
+ requirement: !ruby/object:Gem::Requirement
302
+ requirements:
303
+ - - ">="
304
+ - !ruby/object:Gem::Version
305
+ version: '0'
306
+ type: :development
307
+ prerelease: false
308
+ version_requirements: !ruby/object:Gem::Requirement
309
+ requirements:
310
+ - - ">="
311
+ - !ruby/object:Gem::Version
312
+ version: '0'
271
313
  description: Upload files in your Ruby applications, map them to a range of ORMs,
272
314
  store them on different backends.
273
315
  email:
@@ -280,6 +322,8 @@ files:
280
322
  - README.md
281
323
  - lib/carrierwave.rb
282
324
  - lib/carrierwave/compatibility/paperclip.rb
325
+ - lib/carrierwave/downloader/base.rb
326
+ - lib/carrierwave/downloader/remote_file.rb
283
327
  - lib/carrierwave/error.rb
284
328
  - lib/carrierwave/locale/en.yml
285
329
  - lib/carrierwave/mount.rb
@@ -288,6 +332,7 @@ files:
288
332
  - lib/carrierwave/processing.rb
289
333
  - lib/carrierwave/processing/mini_magick.rb
290
334
  - lib/carrierwave/processing/rmagick.rb
335
+ - lib/carrierwave/processing/vips.rb
291
336
  - lib/carrierwave/sanitized_file.rb
292
337
  - lib/carrierwave/storage.rb
293
338
  - lib/carrierwave/storage/abstract.rb
@@ -298,12 +343,13 @@ files:
298
343
  - lib/carrierwave/uploader/cache.rb
299
344
  - lib/carrierwave/uploader/callbacks.rb
300
345
  - lib/carrierwave/uploader/configuration.rb
301
- - lib/carrierwave/uploader/content_type_blacklist.rb
302
- - lib/carrierwave/uploader/content_type_whitelist.rb
346
+ - lib/carrierwave/uploader/content_type_allowlist.rb
347
+ - lib/carrierwave/uploader/content_type_denylist.rb
303
348
  - lib/carrierwave/uploader/default_url.rb
349
+ - lib/carrierwave/uploader/dimension.rb
304
350
  - lib/carrierwave/uploader/download.rb
305
- - lib/carrierwave/uploader/extension_blacklist.rb
306
- - lib/carrierwave/uploader/extension_whitelist.rb
351
+ - lib/carrierwave/uploader/extension_allowlist.rb
352
+ - lib/carrierwave/uploader/extension_denylist.rb
307
353
  - lib/carrierwave/uploader/file_size.rb
308
354
  - lib/carrierwave/uploader/mountable.rb
309
355
  - lib/carrierwave/uploader/processing.rb
@@ -314,10 +360,11 @@ files:
314
360
  - lib/carrierwave/uploader/url.rb
315
361
  - lib/carrierwave/uploader/versions.rb
316
362
  - lib/carrierwave/utilities.rb
363
+ - lib/carrierwave/utilities/file_name.rb
317
364
  - lib/carrierwave/utilities/uri.rb
318
365
  - lib/carrierwave/validations/active_model.rb
319
366
  - lib/carrierwave/version.rb
320
- - lib/generators/templates/uploader.rb
367
+ - lib/generators/templates/uploader.rb.erb
321
368
  - lib/generators/uploader_generator.rb
322
369
  homepage: https://github.com/carrierwaveuploader/carrierwave
323
370
  licenses:
@@ -332,14 +379,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
332
379
  requirements:
333
380
  - - ">="
334
381
  - !ruby/object:Gem::Version
335
- version: 2.0.0
382
+ version: 2.5.0
336
383
  required_rubygems_version: !ruby/object:Gem::Requirement
337
384
  requirements:
338
385
  - - ">="
339
386
  - !ruby/object:Gem::Version
340
387
  version: '0'
341
388
  requirements: []
342
- rubygems_version: 3.4.6
389
+ rubygems_version: 3.5.22
343
390
  signing_key:
344
391
  specification_version: 4
345
392
  summary: Ruby file upload library
@@ -1,48 +0,0 @@
1
- module CarrierWave
2
- module Uploader
3
- module ContentTypeBlacklist
4
- extend ActiveSupport::Concern
5
-
6
- included do
7
- before :cache, :check_content_type_blacklist!
8
- end
9
-
10
- ##
11
- # Override this method in your uploader to provide a blacklist of files content types
12
- # which are not allowed to be uploaded.
13
- # Not only strings but Regexp are allowed as well.
14
- #
15
- # === Returns
16
- #
17
- # [NilClass, String, Regexp, Array[String, Regexp]] a blacklist of content types which are not allowed to be uploaded
18
- #
19
- # === Examples
20
- #
21
- # def content_type_blacklist
22
- # %w(text/json application/json)
23
- # end
24
- #
25
- # Basically the same, but using a Regexp:
26
- #
27
- # def content_type_blacklist
28
- # [/(text|application)\/json/]
29
- # end
30
- #
31
- def content_type_blacklist; end
32
-
33
- private
34
-
35
- def check_content_type_blacklist!(new_file)
36
- content_type = new_file.content_type
37
- if content_type_blacklist && blacklisted_content_type?(content_type)
38
- raise CarrierWave::IntegrityError, I18n.translate(:"errors.messages.content_type_blacklist_error", content_type: content_type)
39
- end
40
- end
41
-
42
- def blacklisted_content_type?(content_type)
43
- Array(content_type_blacklist).any? { |item| content_type =~ /#{item}/ }
44
- end
45
-
46
- end # ContentTypeBlacklist
47
- end # Uploader
48
- end # CarrierWave