класс ActiveStorage::Previewer
Это абстрактный базовый класс для превьюеров, которые генерируют изображения из блобов. См. ActiveStorage::Previewer::MuPDFPreviewer и ActiveStorage::Previewer::VideoPreviewer для примеров конкретных подклассов.
Атрибуты
Публичные методы класса
# File activestorage/lib/active_storage/previewer.rb, line 12 def self.accept?(blob) false end
Реализуйте этот метод в конкретном подклассе. Пусть он возвращает true, если предоставленный blob подходит для генерации изображения превьюером.
# File activestorage/lib/active_storage/previewer.rb, line 16 def initialize(blob) @blob = blob end
Публичные методы экземпляра
# File activestorage/lib/active_storage/previewer.rb, line 23 def preview(**options) raise NotImplementedError end
Переопределите этот метод в конкретном подклассе. Пусть он генерирует прикрепляемое изображение превью (т.е. всё, что принимает ActiveStorage::Attached::One#attach). Передайте дополнительные параметры в подлежащий блобу, который создаётся.
Приватные методы экземпляра
# File activestorage/lib/active_storage/previewer.rb, line 29 def download_blob_to_tempfile(&block) # :doc: blob.open tmpdir: tmpdir, &block end
Загружает блоб в временный файл на диске. Возвращает временный файл.
# File activestorage/lib/active_storage/previewer.rb, line 47
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 86 def logger # :doc: ActiveStorage.logger end
# File activestorage/lib/active_storage/previewer.rb, line 90 def tmpdir # :doc: Dir.tmpdir end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.