class ActiveStorage::Variation
Изменение размера Active Storage
Набор преобразований, которые можно применить к блобу для создания варианта. Этот класс доступен через метод ActiveStorage::Blob#variant и редко используется напрямую.
В случае необходимости прямого использования, он инициализируется с помощью хэша преобразований, где ключ — команда, а значение — аргументы. Пример:
ActiveStorage::Variation.new(resize_to_limit: [100, 100], colourspace: "b-w", rotate: "-90", saver: { trim: true })
Параметры напрямую отображаются на команды из ImageProcessing.
Атрибуты
Общедоступные методы класса
# File activestorage/app/models/active_storage/variation.rb, line 35 def decode(key) new ActiveStorage.verifier.verify(key, purpose: :variation) end
Возвращает экземпляр Variation с преобразованиями, которые были закодированы encode.
# File activestorage/app/models/active_storage/variation.rb, line 41 def encode(transformations) ActiveStorage.verifier.generate(transformations, purpose: :variation) end
Возвращает подписанный ключ для transformations, который может использоваться для ссылки на конкретный вариант в URL или комбинированном ключе (например, ActiveStorage::Variant#key).
# File activestorage/app/models/active_storage/variation.rb, line 46 def initialize(transformations) @transformations = transformations.deep_symbolize_keys end
# File activestorage/app/models/active_storage/variation.rb, line 23
def wrap(variator)
case variator
when self
variator
when String
decode variator
else
new variator
end
end Возвращает экземпляр Variation на основе заданного «вариатора». Если «вариатор» является экземпляром Variation, он возвращается без изменений. Если это String, он передаётся в ActiveStorage::Variation.decode. В противном случае, предполагается, что это хэш преобразований Hash и передаётся непосредственно в конструктор.
Общедоступные методы экземпляров
# File activestorage/app/models/active_storage/variation.rb, line 70 def content_type Marcel::MimeType.for(extension: format.to_s) end
# File activestorage/app/models/active_storage/variation.rb, line 50 def default_to(defaults) self.class.new transformations.reverse_merge(defaults) end
# File activestorage/app/models/active_storage/variation.rb, line 79 def digest OpenSSL::Digest::SHA1.base64digest Marshal.dump(transformations) end
# File activestorage/app/models/active_storage/variation.rb, line 62
def format
transformations.fetch(:format, :png).tap do |format|
if Marcel::Magic.by_extension(format.to_s).nil?
raise ArgumentError, "Invalid variant format (#{format.inspect})"
end
end
end # File activestorage/app/models/active_storage/variation.rb, line 75 def key self.class.encode(transformations) end
Возвращает подписанный ключ для всех transformations, с которыми был создан этот вариант.
# File activestorage/app/models/active_storage/variation.rb, line 56
def transform(file, &block)
ActiveSupport::Notifications.instrument("transform.active_storage") do
transformer.transform(file, format: format, &block)
end
end Принимает объект File, выполняет transformations над ним и сохраняет преобразованное изображение во временный файл.
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.