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)
-
+ (Object) requires(*requires)
-
+ (void) type(arg)
Sets the new type for the filter.
Instance Method Summary (collapse)
-
- (void) depend_on(items)
Creates a dependency from the item that is currently being filtered onto the given collection of items.
-
- (String) output_filename
Returns a filename that is used to write data to.
-
- (String, void) run(content_or_filename, params = {})
abstract
Runs the filter on the given content or filename.
Class Method Details
+ (void) requires(*requires) + (Enumerable<String>) requires
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 |
+ (void) type(arg)
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
- (void) depend_on(items)
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 |
- (String) output_filename
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 |
- (String, void) run(content_or_filename, params = {})
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 |