Class: Webby::Filters::Cursor

Inherits:
Object
  • Object
show all
Defined in:
lib/webby/filters.rb

Overview

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.

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(renderer, page) ⇒ Cursor

Returns a new instance of Cursor.



40
41
42
43
44
45
46
# File 'lib/webby/filters.rb', line 40

def initialize(renderer, page)
  @renderer, @page = renderer, page
  @filters = Array(page.filter)
  @log = Logging::Logger[Webby::Renderer]
  @processed = 0
  @prev_cursor = nil
end

Instance Attribute Details

#filtersObject (readonly)

Returns the value of attribute filters.



39
40
41
# File 'lib/webby/filters.rb', line 39

def filters
  @filters
end

#pageObject (readonly)

Returns the value of attribute page.



39
40
41
# File 'lib/webby/filters.rb', line 39

def page
  @page
end

#rendererObject (readonly)

Returns the value of attribute renderer.



39
40
41
# File 'lib/webby/filters.rb', line 39

def renderer
  @renderer
end

Instance Method Details

#current_filterObject

The name of the current filter



68
69
70
# File 'lib/webby/filters.rb', line 68

def current_filter
  filters[@processed]
end

#remaining_filtersObject

The list of filters yet to be processed



63
64
65
# File 'lib/webby/filters.rb', line 63

def remaining_filters
  filters[@processed..-1]
end

#start_for(input) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
# File 'lib/webby/filters.rb', line 48

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