Class: ActiveStorage::Variation
- Inherits:
-
Object
- Object
- ActiveStorage::Variation
- Defined in:
- app/models/active_storage/variation.rb
Overview
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")
You can also combine multiple transformations in one step, e.g. for center-weighted cropping:
ActiveStorage::Variation.new(combine_options: {
resize: "100x100^",
gravity: "center",
crop: "100x100+0+0",
})
A list of all possible transformations is available at www.imagemagick.org/script/mogrify.php.
Defined Under Namespace
Classes: UnsupportedImageProcessingArgument, UnsupportedImageProcessingMethod
Instance Attribute Summary collapse
-
#transformations ⇒ Object
readonly
Returns the value of attribute transformations.
Class Method Summary collapse
-
.decode(key) ⇒ Object
Returns a Variation instance with the transformations that were encoded by
encode
. -
.encode(transformations) ⇒ Object
Returns a signed key for the
transformations
, which can be used to refer to a specific variation in a URL or combined key (likeActiveStorage::Variant#key
). -
.wrap(variator) ⇒ Object
Returns a Variation instance based on the given variator.
Instance Method Summary collapse
-
#initialize(transformations) ⇒ Variation
constructor
A new instance of Variation.
-
#key ⇒ Object
Returns a signed key for all the
transformations
that this variation was instantiated with. -
#transform(image) ⇒ Object
Accepts an open MiniMagick image instance, like what's returned by
MiniMagick::Image.read(io)
, and performs thetransformations
against it.
Constructor Details
#initialize(transformations) ⇒ Variation
Returns a new instance of Variation.
53 54 55 |
# File 'app/models/active_storage/variation.rb', line 53 def initialize(transformations) @transformations = transformations end |
Instance Attribute Details
#transformations ⇒ Object (readonly)
Returns the value of attribute transformations.
21 22 23 |
# File 'app/models/active_storage/variation.rb', line 21 def transformations @transformations end |
Class Method Details
.decode(key) ⇒ Object
Returns a Variation instance with the transformations that were encoded by encode
.
42 43 44 |
# File 'app/models/active_storage/variation.rb', line 42 def decode(key) new ActiveStorage.verifier.verify(key, purpose: :variation) end |
.encode(transformations) ⇒ Object
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
).
48 49 50 |
# File 'app/models/active_storage/variation.rb', line 48 def encode(transformations) ActiveStorage.verifier.generate(transformations, purpose: :variation) end |
.wrap(variator) ⇒ Object
Returns a Variation instance based on the given variator. If the variator is a Variation, it is returned unmodified. If it is a String, it is passed to ActiveStorage::Variation.decode. Otherwise, it is assumed to be a transformations Hash and is passed directly to the constructor.
30 31 32 33 34 35 36 37 38 39 |
# File 'app/models/active_storage/variation.rb', line 30 def wrap(variator) case variator when self variator when String decode variator else new variator end end |
Instance Method Details
#key ⇒ Object
Returns a signed key for all the transformations
that this variation was instantiated with.
79 80 81 |
# File 'app/models/active_storage/variation.rb', line 79 def key self.class.encode(transformations) end |
#transform(image) ⇒ Object
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.
59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'app/models/active_storage/variation.rb', line 59 def transform(image) ActiveSupport::Notifications.instrument("transform.active_storage") do transformations.each do |name, argument_or_subtransformations| validate_transformation(name, argument_or_subtransformations) image.mogrify do |command| if name.to_s == "combine_options" argument_or_subtransformations.each do |subtransformation_name, subtransformation_argument| validate_transformation(subtransformation_name, subtransformation_argument) pass_transform_argument(command, subtransformation_name, subtransformation_argument) end else validate_transformation(name, argument_or_subtransformations) pass_transform_argument(command, name, argument_or_subtransformations) end end end end end |