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