класс 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
Загружает blob в временный файл на диске. Возвращает временный файл.
# 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 77 def logger #:doc: ActiveStorage.logger end
# File activestorage/lib/active_storage/previewer.rb, line 81 def tmpdir #:doc: Dir.tmpdir end
© 2004–2020 David Heinemeier Hansson
Licensed under the MIT License.