class Sprockets::Exporters::Base
Convienence class for all exporters to inherit from
An exporter is responsible for exporting a Sprockets::Asset to a file system. For example the Exporters::File class writes the asset to it's destination. The Exporters::Zlib class writes a gzip copy of the asset to disk.
Attributes
Public Class Methods
Public: Creates new instance
Initialize will be called with keyword arguments:
-
asset: An instance of Sprockets::Asset.
-
environment: An instance of Sprockets::Environment.
-
directory: String representing the target directory to write to.
These will all be stored as accessible values. In addition a
target
will be available which is the target directory and the
asset's digest path combined.
# File lib/sprockets/exporters/base.rb, line 24 def initialize(asset: nil, environment: nil, directory: nil) @asset = asset @environment = environment @directory = directory @target = ::File.join(directory, asset.digest_path) setup end
Public Instance Methods
Public: Contains logic for writing “exporting” asset to disk
If the exporter is not skipped it then Sprockets will execute it's `call` method. This method takes no arguments and should only use elements passed in via initialize or stored in `setup`.
# File lib/sprockets/exporters/base.rb, line 55 def call raise "Must subclass and implement call" end
Public: Callback that is executed after intialization
Any setup that needs to be done can be performed in the setup
method. It will be called immediately after initialization.
# File lib/sprockets/exporters/base.rb, line 36 def setup end
Public: Handles logic for skipping exporter and notifying logger
The `skip?` will be called before anything will be written. If `skip?`
returns truthy it will not continue. This method takes a `logger` that
responds to debug
and info
. The `skip?` method
is the only place expected to write to a logger, any other messages may
produce jumbled logs.
# File lib/sprockets/exporters/base.rb, line 46 def skip?(logger) false end
Public: Yields a file that can be written to with the input
`filename`. Defaults to the `target`. Method is safe to use in forked or threaded environments.
# File lib/sprockets/exporters/base.rb, line 63 def write(filename = target) FileUtils.mkdir_p File.dirname(filename) PathUtils.atomic_write(filename) do |f| yield f end end