Class: ActiveStorage::Previewer
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Inherits: | Object |
Defined in: | activestorage/lib/active_storage/previewer.rb |
Overview
This is an abstract base class for previewers, which generate images from blobs. See MuPDFPreviewer
and VideoPreviewer
for examples of concrete subclasses.
Class Method Summary
-
.accept?(blob) ⇒ Boolean
Implement this method in a concrete subclass.
- .new(blob) ⇒ Previewer constructor
Instance Attribute Summary
- #blob readonly
Instance Method Summary
-
#preview(**options)
Override this method in a concrete subclass.
-
#download_blob_to_tempfile(&block)
private
Downloads the blob to a tempfile on disk.
-
#draw(*argv)
private
Executes a system command, capturing its binary output in a tempfile.
- #logger private
- #tmpdir private
Constructor Details
.new(blob) ⇒ Previewer
Class Method Details
.accept?(blob) ⇒ Boolean
Implement this method in a concrete subclass. Have it return true when given a blob from which the previewer can generate an image.
# File 'activestorage/lib/active_storage/previewer.rb', line 12
def self.accept?(blob) false end
Instance Attribute Details
#blob (readonly)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer.rb', line 8
attr_reader :blob
Instance Method Details
#download_blob_to_tempfile(&block) (private)
Downloads the blob to a tempfile on disk. Yields the tempfile.
#draw(*argv) (private)
Executes a system command, capturing its binary output in a tempfile. Yields the tempfile.
Use this method to shell out to a system library (e.g. muPDF or FFmpeg) for preview image generation. The resulting tempfile can be used as the :io
value in an attachable ::Hash
:
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
The output tempfile is opened in the directory returned by #tmpdir.
#logger (private)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer.rb', line 86
def logger #:doc: ActiveStorage.logger end
#preview(**options)
Override this method in a concrete subclass. Have it yield an attachable preview image (i.e. anything accepted by Attached::One#attach). Pass the additional options to the underlying blob that is created.
# File 'activestorage/lib/active_storage/previewer.rb', line 23
def preview(** ) raise NotImplementedError end
#tmpdir (private)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer.rb', line 90
def tmpdir #:doc: Dir.tmpdir end