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.
Class Method Summary collapse
-
.define(ident, &block) ⇒ Object
-
.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
.define(ident, &block) ⇒ Object
41 42 43 44 45 46 |
# File 'lib/nanoc/base/compilation/filter.rb', line 41 def define(ident, &block) filter_class = Class.new(::Nanoc::Filter) { identifier(ident) } filter_class.send(:define_method, :run) do |content, params| instance_exec(content, params, &block) end end |
.requires(*requires) ⇒ void .requires ⇒ Enumerable<String>
97 98 99 100 101 102 103 |
# File 'lib/nanoc/base/compilation/filter.rb', line 97 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.
64 65 66 67 68 69 70 71 72 |
# File 'lib/nanoc/base/compilation/filter.rb', line 64 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.
192 193 194 195 196 197 198 199 200 201 202 203 204 205 |
# File 'lib/nanoc/base/compilation/filter.rb', line 192 def depend_on(items) orig_items = items items = items.map { |i| i.is_a?(Nanoc::ItemWithRepsView) ? i.unwrap : i } # Notify dependency_tracker = @assigns[:item]._context.dependency_tracker items.each { |item| dependency_tracker.bounce(item) } # 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.
166 167 168 169 |
# File 'lib/nanoc/base/compilation/filter.rb', line 166 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.
154 155 156 |
# File 'lib/nanoc/base/compilation/filter.rb', line 154 def run(content_or_filename, params = {}) # rubocop:disable Lint/UnusedMethodArgument raise NotImplementedError.new('Nanoc::Filter subclasses must implement #run') end |