class ActiveStorage::Variation

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:

ActiveStorage::Variation.new(resize: "100x100", monochrome: true, trim: true, rotate: "-90")

A list of all possible transformations is available at www.imagemagick.org/script/mogrify.php.

Attributes

transformations[R]

Public Class Methods

decode(key) click to toggle source

Returns a variation instance with the transformations that were encoded by encode.

# File activestorage/app/models/active_storage/variation.rb, line 19
def decode(key)
  new ActiveStorage.verifier.verify(key, purpose: :variation)
end
encode(transformations) click to toggle source

Returns a signed key for the transformations, which can be used to refer to a specific variation in a URL or combined key (like ActiveStorage::Variant#key).

# File activestorage/app/models/active_storage/variation.rb, line 25
def encode(transformations)
  ActiveStorage.verifier.generate(transformations, purpose: :variation)
end
new(transformations) click to toggle source
# File activestorage/app/models/active_storage/variation.rb, line 30
def initialize(transformations)
  @transformations = transformations
end

Public Instance Methods

key() click to toggle source

Returns a signed key for all the transformations that this variation was instantiated with.

# File activestorage/app/models/active_storage/variation.rb, line 47
def key
  self.class.encode(transformations)
end
transform(image) click to toggle source

Accepts an open MiniMagick image instance, like what's returned by MiniMagick::Image.read(io), and performs the transformations against it. The transformed image instance is then returned.

# File activestorage/app/models/active_storage/variation.rb, line 36
def transform(image)
  transformations.each do |(method, argument)|
    if eligible_argument?(argument)
      image.public_send(method, argument)
    else
      image.public_send(method)
    end
  end
end

Private Instance Methods

eligible_argument?(argument) click to toggle source
# File activestorage/app/models/active_storage/variation.rb, line 52
def eligible_argument?(argument)
  argument.present? && argument != true
end