class Webby::Filters::Cursor
Instances of this class handle processing a set of filters for a given renderer and page. Note: The instance is passed as the second argument to filters
that require two parameters and can be used to access information on the renderer, page, or filters being processed.
Attributes
filters[R]
page[R]
renderer[R]
Public Class Methods
new(renderer, page)
click to toggle source
# File lib/webby/filters.rb, line 36 def initialize(renderer, page) @renderer, @page = renderer, page @filters = Array(page.filter) @log = Logging::Logger[Webby::Renderer] @processed = 0 @prev_cursor = nil end
Public Instance Methods
_handle(filter, handler, *args)
click to toggle source
Process arguments through a single filter
# File lib/webby/filters.rb, line 69 def _handle(filter, handler, *args) result = handler.call(*args) @processed += 1 result rescue StandardError => err raise ::Webby::Error, "#{filter} filter error: #{err.message.inspect}" end
current_filter()
click to toggle source
The name of the current filter
# File lib/webby/filters.rb, line 64 def current_filter filters[@processed] end
remaining_filters()
click to toggle source
The list of filters yet to be processed
# File lib/webby/filters.rb, line 59 def remaining_filters filters[@processed..-1] end
start_for(input)
click to toggle source
# File lib/webby/filters.rb, line 44 def start_for(input) @prev_cursor = @renderer.instance_variable_get(:@_cursor) @renderer.instance_variable_set(:@_cursor, self) filters.inject(input) do |result, filter| handler = Filters[filter] raise ::Webby::Error, "unknown filter: #{filter.inspect}" if handler.nil? args = [result, self][0, handler.arity] _handle(filter, handler, *args) end ensure @renderer.instance_variable_set(:@_cursor, @prev_cursor) end