app/models/active_storage/variation.rb in activestorage-6.0.6.1 vs app/models/active_storage/variation.rb in activestorage-6.1.0.rc1
- old
+ new
@@ -1,7 +1,9 @@
# frozen_string_literal: true
+require "mimemagic"
+
# A set of transformations that can be applied to a blob to create a variant. This class is exposed via
# the ActiveStorage::Blob#variant method and should rarely be used directly.
#
# In case you do need to use this directly, it's instantiated using a hash of transformations where
# the key is the command and the value is the arguments. Example:
@@ -41,40 +43,43 @@
def initialize(transformations)
@transformations = transformations.deep_symbolize_keys
end
+ def default_to(defaults)
+ self.class.new transformations.reverse_merge(defaults)
+ end
+
# Accepts a File object, performs the +transformations+ against it, and
- # saves the transformed image into a temporary file. If +format+ is specified
- # it will be the format of the result image, otherwise the result image
- # retains the source format.
- def transform(file, format: nil, &block)
+ # saves the transformed image into a temporary file.
+ def transform(file, &block)
ActiveSupport::Notifications.instrument("transform.active_storage") do
transformer.transform(file, format: format, &block)
end
end
+ def format
+ transformations.fetch(:format, :png).tap do |format|
+ if MimeMagic.by_extension(format).nil?
+ raise ArgumentError, "Invalid variant format (#{format.inspect})"
+ end
+ end
+ end
+
+ def content_type
+ MimeMagic.by_extension(format).to_s
+ end
+
# Returns a signed key for all the +transformations+ that this variation was instantiated with.
def key
self.class.encode(transformations)
end
+ def digest
+ Digest::SHA1.base64digest Marshal.dump(transformations)
+ end
+
private
def transformer
- if ActiveStorage.variant_processor
- begin
- require "image_processing"
- rescue LoadError
- ActiveSupport::Deprecation.warn <<~WARNING.squish
- Generating image variants will require the image_processing gem in Rails 6.1.
- Please add `gem 'image_processing', '~> 1.2'` to your Gemfile.
- WARNING
-
- ActiveStorage::Transformers::MiniMagickTransformer.new(transformations)
- else
- ActiveStorage::Transformers::ImageProcessingTransformer.new(transformations)
- end
- else
- ActiveStorage::Transformers::MiniMagickTransformer.new(transformations)
- end
+ ActiveStorage::Transformers::ImageProcessingTransformer.new(transformations.except(:format))
end
end