класс 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.