Class: Nanoc3::Filter Abstract
- Extended by:
- PluginRegistry::PluginMethods
- Defined in:
- lib/nanoc3/base/compilation/filter.rb
Overview
Subclass and override #run to implement a custom filter.
Nanoc3::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.
Direct Known Subclasses
Nanoc3::Filters::AsciiDoc, Nanoc3::Filters::BlueCloth, Nanoc3::Filters::CodeRay, Nanoc3::Filters::ColorizeSyntax, Nanoc3::Filters::ERB, Nanoc3::Filters::Erubis, Nanoc3::Filters::Haml, Nanoc3::Filters::Kramdown, Nanoc3::Filters::Less, Nanoc3::Filters::Markaby, Nanoc3::Filters::Maruku, Nanoc3::Filters::Mustache, Nanoc3::Filters::RDiscount, Nanoc3::Filters::RDoc, Nanoc3::Filters::Rainpress, Nanoc3::Filters::RedCloth, Nanoc3::Filters::Redcarpet, Nanoc3::Filters::RelativizePaths, Nanoc3::Filters::RubyPants, Nanoc3::Filters::Sass, Nanoc3::Filters::Slim, Nanoc3::Filters::Typogruby, Nanoc3::Filters::UglifyJS
Constant Summary collapse
- TMP_BINARY_ITEMS_DIR =
The path to the directory where temporary binary items are stored
'tmp/binary_items'
Instance Attribute Summary collapse
-
#assigns ⇒ Hash
readonly
A hash containing variables that will be made available during filtering.
Class Method Summary collapse
-
.from_binary? ⇒ Boolean
True if this filter can be applied to binary item representations, false otherwise.
-
.to_binary? ⇒ Boolean
True if this filter results in a binary item representation, false otherwise.
-
.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.
-
#filename ⇒ String
Returns the filename associated with the item that is being filtered.
-
#initialize(hash = {}) ⇒ Filter
constructor
Creates a new filter that has access to the given assigns.
-
#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.
Methods included from PluginRegistry::PluginMethods
identifier, identifiers, named, register
Methods inherited from Context
Constructor Details
#initialize(hash = {}) ⇒ Filter
Creates a new filter that has access to the given assigns.
86 87 88 89 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 86 def initialize(hash={}) @assigns = hash super end |
Instance Attribute Details
#assigns ⇒ Hash (readonly)
A hash containing variables that will be made available during filtering.
38 39 40 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 38 def assigns @assigns end |
Class Method Details
.from_binary? ⇒ Boolean
Returns True if this filter can be applied to binary item representations, false otherwise.
70 71 72 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 70 def from_binary? (@from || :text) == :binary end |
.to_binary? ⇒ Boolean
Returns True if this filter results in a binary item representation, false otherwise.
76 77 78 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 76 def to_binary? (@to || :text) == :binary 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.
60 61 62 63 64 65 66 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 60 def type(arg) if arg.is_a?(Hash) @from, @to = arg.keys[0], arg.values[0] else @from, @to = arg, 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.
149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 149 def depend_on(items) # Notify items.each do |item| Nanoc3::NotificationCenter.post(:visit_started, item) Nanoc3::NotificationCenter.post(:visit_ended, item) end # Raise unmet dependency error if necessary items.each do |item| rep = item.reps.find { |r| !r.compiled? } raise Nanoc3::Errors::UnmetDependency.new(rep) if rep end end |
#filename ⇒ String
Returns the filename associated with the item that is being filtered.
It is in the format `item <identifier> (rep <name>)`.
132 133 134 135 136 137 138 139 140 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 132 def filename if assigns[:layout] "layout #{assigns[:layout].identifier}" elsif assigns[:item] "item #{assigns[:item].identifier} (rep #{assigns[:item_rep].name})" else '?' 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.
117 118 119 120 121 122 123 124 125 126 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 117 def output_filename @output_filename ||= begin FileUtils.mkdir_p(TMP_BINARY_ITEMS_DIR) tempfile = Tempfile.new(filename.gsub(/[^a-z]/, '-'), TMP_BINARY_ITEMS_DIR) new_filename = tempfile.path tempfile.close! File.(new_filename) end end |
#run(content_or_filename, params = {}) ⇒ String, void
Runs the filter on the given content or filename.
105 106 107 |
# File 'lib/nanoc3/base/compilation/filter.rb', line 105 def run(content_or_filename, params={}) raise NotImplementedError.new("Nanoc3::Filter subclasses must implement #run") end |