carrierwave 1.2.1 → 2.1.1

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.

Potentially problematic release.


This version of carrierwave might be problematic. Click here for more details.

@@ -7,7 +7,7 @@ module CarrierWave
7
7
  extend ActiveSupport::Concern
8
8
 
9
9
  def serializable_hash(options = nil)
10
- {"url" => url}.merge Hash[versions.map { |name, version| [name, { "url" => version.url }] }]
10
+ {"url" => url}.merge Hash[versions.map { |name, version| [name.to_s, { "url" => version.url }] }]
11
11
  end
12
12
 
13
13
  def as_json(options=nil)
@@ -7,6 +7,15 @@ module CarrierWave
7
7
  include CarrierWave::Uploader::Configuration
8
8
  include CarrierWave::Uploader::Cache
9
9
 
10
+ included do
11
+ prepend Module.new {
12
+ def initialize(*)
13
+ super
14
+ @file, @filename, @cache_id, @identifier = nil
15
+ end
16
+ }
17
+ end
18
+
10
19
  ##
11
20
  # Override this in your Uploader to change the filename.
12
21
  #
@@ -52,7 +61,7 @@ module CarrierWave
52
61
  #
53
62
  def store!(new_file=nil)
54
63
  cache!(new_file) if new_file && ((@cache_id != parent_cache_id) || @cache_id.nil?)
55
- if !cache_only and @file and @cache_id
64
+ if !cache_only && @file && @cache_id
56
65
  with_callbacks(:store, new_file) do
57
66
  new_file = storage.store!(@file)
58
67
  if delete_tmp_file_after_storage
@@ -60,7 +69,8 @@ module CarrierWave
60
69
  cache_storage.delete_dir!(cache_path(nil))
61
70
  end
62
71
  @file = new_file
63
- @cache_id = nil
72
+ @cache_id = @identifier = nil
73
+ @staged = false
64
74
  end
65
75
  end
66
76
  end
@@ -75,6 +85,7 @@ module CarrierWave
75
85
  def retrieve_from_store!(identifier)
76
86
  with_callbacks(:retrieve_from_store, identifier) do
77
87
  @file = storage.retrieve!(identifier)
88
+ @identifier = identifier
78
89
  end
79
90
  end
80
91
 
@@ -15,8 +15,8 @@ module CarrierWave
15
15
  # [String] the location where this file is accessible via a url
16
16
  #
17
17
  def url(options = {})
18
- if file.respond_to?(:url) and not (tmp_url = file.url).blank?
19
- file.method(:url).arity == 0 ? tmp_url : file.url(options)
18
+ if file.respond_to?(:url) && !(tmp_url = file.url).blank?
19
+ file.method(:url).arity.zero? ? tmp_url : file.url(options)
20
20
  elsif file.respond_to?(:path)
21
21
  path = encode_path(file.path.sub(File.expand_path(root), ''))
22
22
 
@@ -19,6 +19,13 @@ module CarrierWave
19
19
  after :remove, :remove_versions!
20
20
  after :retrieve_from_cache, :retrieve_versions_from_cache!
21
21
  after :retrieve_from_store, :retrieve_versions_from_store!
22
+
23
+ prepend Module.new {
24
+ def initialize(*)
25
+ super
26
+ @versions = nil
27
+ end
28
+ }
22
29
  end
23
30
 
24
31
  module ClassMethods
@@ -77,7 +84,7 @@ module CarrierWave
77
84
  # value from the parent class unless explicitly overwritten
78
85
  def self.enable_processing(value=nil)
79
86
  self.enable_processing = value if value
80
- if !@enable_processing.nil?
87
+ if defined?(@enable_processing) && !@enable_processing.nil?
81
88
  @enable_processing
82
89
  else
83
90
  superclass.enable_processing
@@ -213,16 +220,18 @@ module CarrierWave
213
220
  # Recreate versions and reprocess them. This can be used to recreate
214
221
  # versions if their parameters somehow have changed.
215
222
  #
216
- def recreate_versions!(*versions)
223
+ def recreate_versions!(*names)
217
224
  # Some files could possibly not be stored on the local disk. This
218
225
  # doesn't play nicely with processing. Make sure that we're only
219
226
  # processing a cached file
220
227
  #
221
228
  # The call to store! will trigger the necessary callbacks to both
222
229
  # process this version and all sub-versions
223
- if versions.any?
224
- file = sanitized_file if !cached?
225
- store_versions!(file, versions)
230
+
231
+ if names.any?
232
+ set_versions_to_cache_and_store(names)
233
+ store!(file)
234
+ reset_versions_to_cache_and_store
226
235
  else
227
236
  cache! if !cached?
228
237
  store!
@@ -230,6 +239,39 @@ module CarrierWave
230
239
  end
231
240
 
232
241
  private
242
+
243
+ def set_versions_to_cache_and_store(names)
244
+ @versions_to_cache = source_versions_of(names)
245
+ @versions_to_store = active_versions_with_names_in(@versions_to_cache + names)
246
+ end
247
+
248
+ def reset_versions_to_cache_and_store
249
+ @versions_to_cache, @versions_to_store = nil, nil
250
+ end
251
+
252
+ def versions_to_cache
253
+ @versions_to_cache || dependent_versions
254
+ end
255
+
256
+ def versions_to_store
257
+ @versions_to_store || active_versions
258
+ end
259
+
260
+ def source_versions_of(requested_names)
261
+ versions.inject([]) do |sources, (name, uploader)|
262
+ next sources unless requested_names.include?(name)
263
+ next sources unless source_name = uploader.class.version_options[:from_version]
264
+
265
+ sources << [source_name, versions[source_name]]
266
+ end.uniq
267
+ end
268
+
269
+ def active_versions_with_names_in(names)
270
+ active_versions.select do |pretendent_name, uploader|
271
+ names.include?(pretendent_name)
272
+ end
273
+ end
274
+
233
275
  def assign_parent_cache_id(file)
234
276
  active_versions.each do |name, uploader|
235
277
  uploader.parent_cache_id = @cache_id
@@ -263,19 +305,14 @@ module CarrierWave
263
305
  end
264
306
 
265
307
  def cache_versions!(new_file)
266
- dependent_versions.each do |name, v|
308
+ versions_to_cache.each do |name, v|
267
309
  v.send(:cache_id=, @cache_id)
268
310
  v.cache!(new_file)
269
311
  end
270
312
  end
271
313
 
272
- def store_versions!(new_file, versions=nil)
273
- if versions
274
- active = Hash[active_versions]
275
- versions.each { |v| active[v].try(:store!, new_file) } unless active.empty?
276
- else
277
- active_versions.each { |name, v| v.store!(new_file) }
278
- end
314
+ def store_versions!(new_file)
315
+ versions_to_store.each { |name, v| v.store!(new_file) }
279
316
  end
280
317
 
281
318
  def remove_versions!
@@ -11,7 +11,7 @@ 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")
14
+ record.__send__("#{attribute}_processing_errors").each do |e|
15
15
  message = (e.message == e.class.to_s) ? :carrierwave_processing_error : e.message
16
16
  record.errors.add(attribute, message)
17
17
  end
@@ -21,7 +21,7 @@ module CarrierWave
21
21
  class IntegrityValidator < ::ActiveModel::EachValidator
22
22
 
23
23
  def validate_each(record, attribute, value)
24
- if e = record.__send__("#{attribute}_integrity_error")
24
+ record.__send__("#{attribute}_integrity_errors").each do |e|
25
25
  message = (e.message == e.class.to_s) ? :carrierwave_integrity_error : e.message
26
26
  record.errors.add(attribute, message)
27
27
  end
@@ -31,7 +31,7 @@ module CarrierWave
31
31
  class DownloadValidator < ::ActiveModel::EachValidator
32
32
 
33
33
  def validate_each(record, attribute, value)
34
- if e = record.__send__("#{attribute}_download_error")
34
+ record.__send__("#{attribute}_download_errors").each do |e|
35
35
  message = (e.message == e.class.to_s) ? :carrierwave_download_error : e.message
36
36
  record.errors.add(attribute, message)
37
37
  end
@@ -1,3 +1,3 @@
1
1
  module CarrierWave
2
- VERSION = "1.2.1"
2
+ VERSION = "2.1.1"
3
3
  end
data/lib/carrierwave.rb CHANGED
@@ -34,6 +34,26 @@ if defined?(Merb)
34
34
  Dir.glob(File.join(Merb.load_paths[:uploaders])).each {|f| require f }
35
35
  end
36
36
 
37
+ elsif defined?(Jets)
38
+
39
+ module CarrierWave
40
+ class Turbine < Jets::Turbine
41
+ initializer "carrierwave.setup_paths" do |app|
42
+ CarrierWave.root = Jets.root.to_s
43
+ CarrierWave.tmp_path = "/tmp/carrierwave"
44
+ CarrierWave.configure do |config|
45
+ config.cache_dir = "/tmp/carrierwave/uploads/tmp"
46
+ end
47
+ end
48
+
49
+ initializer "carrierwave.active_record" do
50
+ ActiveSupport.on_load :active_record do
51
+ require 'carrierwave/orm/activerecord'
52
+ end
53
+ end
54
+ end
55
+ end
56
+
37
57
  elsif defined?(Rails)
38
58
 
39
59
  module CarrierWave
@@ -52,6 +72,10 @@ elsif defined?(Rails)
52
72
  require 'carrierwave/orm/activerecord'
53
73
  end
54
74
  end
75
+
76
+ config.before_eager_load do
77
+ CarrierWave::Storage::Fog.eager_load
78
+ end
55
79
  end
56
80
  end
57
81
 
@@ -1,5 +1,4 @@
1
1
  class <%= class_name %>Uploader < CarrierWave::Uploader::Base
2
-
3
2
  # Include RMagick or MiniMagick support:
4
3
  # include CarrierWave::RMagick
5
4
  # include CarrierWave::MiniMagick
@@ -45,5 +44,4 @@ class <%= class_name %>Uploader < CarrierWave::Uploader::Base
45
44
  # def filename
46
45
  # "something.jpg" if original_filename
47
46
  # end
48
-
49
47
  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.2.1
4
+ version: 2.1.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonas Nicklas
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-10-04 00:00:00.000000000 Z
11
+ date: 2021-02-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,42 +16,98 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: 4.0.0
19
+ version: 5.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: 5.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: 5.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: 5.0.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: mime-types
42
+ name: mini_mime
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: 0.1.3
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: 0.1.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: image_processing
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.1'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.1'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mimemagic
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: 0.3.0
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: 0.3.0
83
+ - !ruby/object:Gem::Dependency
84
+ name: addressable
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '2.6'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '2.6'
97
+ - !ruby/object:Gem::Dependency
98
+ name: ssrf_filter
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '1.0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '1.0'
55
111
  - !ruby/object:Gem::Dependency
56
112
  name: pg
57
113
  requirement: !ruby/object:Gem::Requirement
@@ -72,14 +128,14 @@ dependencies:
72
128
  requirements:
73
129
  - - ">="
74
130
  - !ruby/object:Gem::Version
75
- version: 4.0.0
131
+ version: 5.0.0
76
132
  type: :development
77
133
  prerelease: false
78
134
  version_requirements: !ruby/object:Gem::Requirement
79
135
  requirements:
80
136
  - - ">="
81
137
  - !ruby/object:Gem::Version
82
- version: 4.0.0
138
+ version: 5.0.0
83
139
  - !ruby/object:Gem::Dependency
84
140
  name: cucumber
85
141
  requirement: !ruby/object:Gem::Requirement
@@ -123,35 +179,49 @@ dependencies:
123
179
  - !ruby/object:Gem::Version
124
180
  version: '0'
125
181
  - !ruby/object:Gem::Dependency
126
- name: fog
182
+ name: fog-aws
127
183
  requirement: !ruby/object:Gem::Requirement
128
184
  requirements:
129
185
  - - ">="
130
186
  - !ruby/object:Gem::Version
131
- version: 1.28.0
187
+ version: '0'
132
188
  type: :development
133
189
  prerelease: false
134
190
  version_requirements: !ruby/object:Gem::Requirement
135
191
  requirements:
136
192
  - - ">="
137
193
  - !ruby/object:Gem::Version
138
- version: 1.28.0
194
+ version: '0'
139
195
  - !ruby/object:Gem::Dependency
140
- name: mini_magick
196
+ name: fog-google
197
+ requirement: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '1.7'
202
+ type: :development
203
+ prerelease: false
204
+ version_requirements: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '1.7'
209
+ - !ruby/object:Gem::Dependency
210
+ name: fog-local
141
211
  requirement: !ruby/object:Gem::Requirement
142
212
  requirements:
143
213
  - - ">="
144
214
  - !ruby/object:Gem::Version
145
- version: 3.6.0
215
+ version: '0'
146
216
  type: :development
147
217
  prerelease: false
148
218
  version_requirements: !ruby/object:Gem::Requirement
149
219
  requirements:
150
220
  - - ">="
151
221
  - !ruby/object:Gem::Version
152
- version: 3.6.0
222
+ version: '0'
153
223
  - !ruby/object:Gem::Dependency
154
- name: rmagick
224
+ name: fog-rackspace
155
225
  requirement: !ruby/object:Gem::Requirement
156
226
  requirements:
157
227
  - - ">="
@@ -164,6 +234,34 @@ dependencies:
164
234
  - - ">="
165
235
  - !ruby/object:Gem::Version
166
236
  version: '0'
237
+ - !ruby/object:Gem::Dependency
238
+ name: mini_magick
239
+ requirement: !ruby/object:Gem::Requirement
240
+ requirements:
241
+ - - ">="
242
+ - !ruby/object:Gem::Version
243
+ version: 3.6.0
244
+ type: :development
245
+ prerelease: false
246
+ version_requirements: !ruby/object:Gem::Requirement
247
+ requirements:
248
+ - - ">="
249
+ - !ruby/object:Gem::Version
250
+ version: 3.6.0
251
+ - !ruby/object:Gem::Dependency
252
+ name: rmagick
253
+ requirement: !ruby/object:Gem::Requirement
254
+ requirements:
255
+ - - "~>"
256
+ - !ruby/object:Gem::Version
257
+ version: '2.16'
258
+ type: :development
259
+ prerelease: false
260
+ version_requirements: !ruby/object:Gem::Requirement
261
+ requirements:
262
+ - - "~>"
263
+ - !ruby/object:Gem::Version
264
+ version: '2.16'
167
265
  - !ruby/object:Gem::Dependency
168
266
  name: timecop
169
267
  requirement: !ruby/object:Gem::Requirement
@@ -218,6 +316,8 @@ files:
218
316
  - README.md
219
317
  - lib/carrierwave.rb
220
318
  - lib/carrierwave/compatibility/paperclip.rb
319
+ - lib/carrierwave/downloader/base.rb
320
+ - lib/carrierwave/downloader/remote_file.rb
221
321
  - lib/carrierwave/error.rb
222
322
  - lib/carrierwave/locale/en.yml
223
323
  - lib/carrierwave/mount.rb
@@ -243,8 +343,6 @@ files:
243
343
  - lib/carrierwave/uploader/extension_blacklist.rb
244
344
  - lib/carrierwave/uploader/extension_whitelist.rb
245
345
  - lib/carrierwave/uploader/file_size.rb
246
- - lib/carrierwave/uploader/magic_mime_blacklist.rb
247
- - lib/carrierwave/uploader/magic_mime_whitelist.rb
248
346
  - lib/carrierwave/uploader/mountable.rb
249
347
  - lib/carrierwave/uploader/processing.rb
250
348
  - lib/carrierwave/uploader/proxy.rb
@@ -263,7 +361,7 @@ homepage: https://github.com/carrierwaveuploader/carrierwave
263
361
  licenses:
264
362
  - MIT
265
363
  metadata: {}
266
- post_install_message:
364
+ post_install_message:
267
365
  rdoc_options:
268
366
  - "--main"
269
367
  require_paths:
@@ -272,16 +370,15 @@ required_ruby_version: !ruby/object:Gem::Requirement
272
370
  requirements:
273
371
  - - ">="
274
372
  - !ruby/object:Gem::Version
275
- version: 2.0.0
373
+ version: 2.2.2
276
374
  required_rubygems_version: !ruby/object:Gem::Requirement
277
375
  requirements:
278
376
  - - ">="
279
377
  - !ruby/object:Gem::Version
280
378
  version: '0'
281
379
  requirements: []
282
- rubyforge_project:
283
- rubygems_version: 2.5.2
284
- signing_key:
380
+ rubygems_version: 3.1.2
381
+ signing_key:
285
382
  specification_version: 4
286
383
  summary: Ruby file upload library
287
384
  test_files: []
@@ -1,94 +0,0 @@
1
- module CarrierWave
2
- module Uploader
3
-
4
- ##
5
- # This modules validates the content type of a file with the use of
6
- # ruby-filemagic gem and a blacklist regular expression. If you want
7
- # to use this, you'll need to require this file:
8
- #
9
- # require 'carrierwave/uploader/magic_mime_blacklist'
10
- #
11
- # And then include it in your uploader:
12
- #
13
- # class MyUploader < CarrierWave::Uploader::Base
14
- # include CarrierWave::Uploader::MagicMimeBlacklist
15
- #
16
- # def blacklist_mime_type_pattern
17
- # /image\//
18
- # end
19
- # end
20
- #
21
- module MagicMimeBlacklist
22
- extend ActiveSupport::Concern
23
-
24
- included do
25
- begin
26
- require "filemagic"
27
- rescue LoadError => e
28
- e.message << " (You may need to install the ruby-filemagic gem)"
29
- raise e
30
- end
31
-
32
- before :cache, :check_blacklist_pattern!
33
- end
34
-
35
- ##
36
- # Override this method in your uploader to provide a black list pattern (regexp)
37
- # of content-types which are prohibited to be uploaded.
38
- # Compares the file's content-type.
39
- #
40
- # === Returns
41
- #
42
- # [Regexp] a black list regexp to match the content_type
43
- #
44
- # === Examples
45
- #
46
- # def blacklist_mime_type_pattern
47
- # /(text|application)\/json/
48
- # end
49
- #
50
- def blacklist_mime_type_pattern; end
51
-
52
- private
53
-
54
- def check_blacklist_pattern!(new_file)
55
- return if blacklist_mime_type_pattern.nil?
56
-
57
- content_type = extract_content_type(new_file)
58
-
59
- if content_type.match(blacklist_mime_type_pattern)
60
- raise CarrierWave::IntegrityError,
61
- I18n.translate(:"errors.messages.mime_type_pattern_black_list_error",
62
- :content_type => content_type)
63
- end
64
- end
65
-
66
- ##
67
- # Extracts the content type of the given file
68
- #
69
- # === Returns
70
- #
71
- # [String] the extracted content type
72
- #
73
- def extract_content_type(new_file)
74
- content_type = nil
75
-
76
- File.open(new_file.path) do |fd|
77
- data = fd.read(1024) || ""
78
- content_type = filemagic.buffer(data)
79
- end
80
-
81
- content_type
82
- end
83
-
84
- ##
85
- # FileMagic object with the MAGIC_MIME_TYPE flag set
86
- #
87
- # @return [FileMagic] a filemagic object
88
- def filemagic
89
- @filemagic ||= FileMagic.new(FileMagic::MAGIC_MIME_TYPE)
90
- end
91
-
92
- end # MagicMimeblackList
93
- end # Uploader
94
- end # CarrierWave