class ActiveStorage::Previewer
Предварительный просмотр Active Storage
Это абстрактный базовый класс для средств предварительного просмотра, создающих изображения из блобов. Примеры конкретных подклассов см. в ActiveStorage::Previewer::MuPDFPreviewer и ActiveStorage::Previewer::VideoPreviewer.
Атрибуты
Открытые методы класса
# File activestorage/lib/active_storage/previewer.rb, line 14 def self.accept?(blob) false end
Реализуйте этот метод в конкретном подклассе. Он должен возвращать true, если ему передан блоб, из которого средство предварительного просмотра может создать изображение.
# File activestorage/lib/active_storage/previewer.rb, line 18 def initialize(blob) @blob = blob end
Открытые методы экземпляра
# File activestorage/lib/active_storage/previewer.rb, line 25 def preview(**options) raise NotImplementedError end
Переопределите этот метод в конкретном подклассе. Он должен передавать блоку прикрепляемое изображение для предварительного просмотра (то есть любой объект, принимаемый ActiveStorage::Attached::One#attach). Передайте дополнительные параметры базовому блобу, который создаётся.
Приватные методы экземпляра
# File activestorage/lib/active_storage/previewer.rb, line 31 def download_blob_to_tempfile(&block) # :doc: blob.open tmpdir: tmpdir, &block end
Загружает блоб во временный файл на диске. Передаёт временный файл блоку.
# File activestorage/lib/active_storage/previewer.rb, line 49
def draw(*argv) # :doc:
open_tempfile do |file|
instrument :preview, key: blob.key do
capture(*argv, to: file)
end
yield file
end
end Выполняет системную команду, сохраняя её двоичный вывод во временный файл. Передаёт временный файл блоку.
Используйте этот метод для вызова системной библиотеки из командной оболочки (например, muPDF или FFmpeg) при создании изображения для предварительного просмотра. Полученный временный файл можно использовать как значение :io в прикрепляемом хеше:
def preview
download_blob_to_tempfile do |input|
draw "my-drawing-command", input.path, "--format", "png", "-" do |output|
yield io: output, filename: "#{blob.filename.base}.png", content_type: "image/png"
end
end
end
Выходной временный файл открывается в каталоге, возвращаемом методом tmpdir.
# File activestorage/lib/active_storage/previewer.rb, line 93 def logger # :doc: ActiveStorage.logger end
# File activestorage/lib/active_storage/previewer.rb, line 97 def tmpdir # :doc: Dir.tmpdir end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.