Class: ActiveStorage::Previewer
Relationships & Source Files | |
Namespace Children | |
Classes:
| |
Extension / Inclusion / Inheritance Descendants | |
Subclasses:
|
|
Super Chains via Extension / Inclusion / Inheritance | |
Instance Chain:
self,
Downloading
|
|
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
Override this method in a concrete subclass.
-
#draw(*argv)
private
Executes a system command, capturing its binary output in a tempfile.
- #logger private
Downloading
- Included
#download_blob_to | Efficiently downloads blob data into the given file. |
#download_blob_to_tempfile | Opens a new tempfile in |
#tempdir | Returns the directory in which tempfiles should be opened. |
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 16
def self.accept?(blob) false end
Instance Attribute Details
#blob (readonly)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer.rb', line 12
attr_reader :blob
Instance Method Details
#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 Downloading#tempdir.
# File 'activestorage/lib/active_storage/previewer.rb', line 45
def draw(*argv) #:doc: ActiveSupport::Notifications.instrument("preview.active_storage") do open_tempfile_for_drawing do |file| capture(*argv, to: file) yield file end end end
#logger (private)
[ GitHub ]# File 'activestorage/lib/active_storage/previewer.rb', line 70
def logger #:doc: ActiveStorage.logger end
#preview
Override this method in a concrete subclass. Have it yield an attachable preview image (i.e. anything accepted by Attached::One#attach).
# File 'activestorage/lib/active_storage/previewer.rb', line 26
def preview raise NotImplementedError end