Class: Nanoc::Filter Abstract
- Inherits:
-
Int::Context
- Object
- Int::Context
- Nanoc::Filter
- Defined in:
- lib/nanoc/base/compilation/filter.rb
Overview
Subclass and override #run to implement a custom filter.
Nanoc::Filter is responsible for filtering items. It is the superclass for all textual filters.
A filter instance should only be used once. Filters should not be reused since they store state.
When creating a filter with a hash containing assigned variables, those
variables will be made available in the @assigns
instance variable and
the #assigns method. The assigns itself will also be available as
instance variables and instance methods.
Constant Summary
Class Method Summary collapse
-
.requires(*requires) ⇒ Object
-
.type(arg) ⇒ void
Sets the new type for the filter.
Instance Method Summary collapse
-
#depend_on(items) ⇒ void
Creates a dependency from the item that is currently being filtered onto the given collection of items.
-
#output_filename ⇒ String
Returns a filename that is used to write data to.
-
#run(content_or_filename, params = {}) ⇒ String, void
abstract
Runs the filter on the given content or filename.
Class Method Details
.requires(*requires) ⇒ void .requires ⇒ Enumerable<String>
90 91 92 93 94 95 96 |
# File 'lib/nanoc/base/compilation/filter.rb', line 90 def requires(*requires) if requires.any? @requires = requires else @requires || [] end end |
.type(arg) ⇒ void
This method returns an undefined value.
Sets the new type for the filter. The type can be :binary
(default)
or :text
. The given argument can either be a symbol indicating both
“from” and “to” types, or a hash where the only key is the “from” type
and the only value is the “to” type.
57 58 59 60 61 62 63 64 65 |
# File 'lib/nanoc/base/compilation/filter.rb', line 57 def type(arg) if arg.is_a?(Hash) @from = arg.keys[0] @to = arg.values[0] else @from = arg @to = arg end end |
Instance Method Details
#depend_on(items) ⇒ void
This method returns an undefined value.
Creates a dependency from the item that is currently being filtered onto the given collection of items. In other words, require the given items to be compiled first before this items is processed.
185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 |
# File 'lib/nanoc/base/compilation/filter.rb', line 185 def depend_on(items) orig_items = items items = items.map { |i| i.is_a?(Nanoc::ItemWithRepsView) ? i.unwrap : i } # Notify items.each do |item| Nanoc::Int::NotificationCenter.post(:visit_started, item) Nanoc::Int::NotificationCenter.post(:visit_ended, item) end # Raise unmet dependency error if necessary items.each do |item| rep = orig_items.sample._context.reps[item].find { |r| !r.compiled? } raise Nanoc::Int::Errors::UnmetDependency.new(rep) if rep end end |
#output_filename ⇒ String
Returns a filename that is used to write data to. This method is only used on binary items. When running a binary filter on a file, the resulting file must end up in the location returned by this method.
The returned filename will be absolute, so it is safe to change to another directory inside the filter.
159 160 161 162 |
# File 'lib/nanoc/base/compilation/filter.rb', line 159 def output_filename @output_filename ||= Nanoc::Int::TempFilenameFactory.instance.create(TMP_BINARY_ITEMS_DIR) end |
#run(content_or_filename, params = {}) ⇒ String, void
Runs the filter on the given content or filename.
147 148 149 |
# File 'lib/nanoc/base/compilation/filter.rb', line 147 def run(content_or_filename, params = {}) # rubocop:disable Lint/UnusedMethodArgument raise NotImplementedError.new('Nanoc::Filter subclasses must implement #run') end |