класс 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 22 def preview raise NotImplementedError end
Переопределите этот метод в конкретном подклассе. Он должен возвращать прикреплённое превью изображения (т.е. всё, что принимается ActiveStorage::Attached::One#attach).
Приватные методы экземпляра
# File activestorage/lib/active_storage/previewer.rb, line 28 def download_blob_to_tempfile(&block) #:doc: blob.open tmpdir: tmpdir, &block end
Загружает blob в временный файл на диске. Возвращает временный файл.
# File activestorage/lib/active_storage/previewer.rb, line 46
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 76 def logger #:doc: ActiveStorage.logger end
# File activestorage/lib/active_storage/previewer.rb, line 80 def tmpdir #:doc: Dir.tmpdir end
© 2004–2019 David Heinemeier Hansson
Licensed under the MIT License.