Class: Pelusa::Iterator

Inherits:
Object
  • Object
show all
Defined in:
lib/pelusa/iterator.rb

Constant Summary collapse

NodeIterator =
lambda do |node, check|
  check.call(node)

  if node.respond_to?(:each)
    return node.each { |node| NodeIterator.call(node, check) }
  end

  ivars    = node.instance_variables
  children = ivars.map { |ivar| node.instance_variable_get(ivar) }

  return children.each { |node| NodeIterator.call(node, check) }
end

Instance Method Summary collapse

Constructor Details

#initialize(&lint) ⇒ Iterator

Public: Initializes a new Iterator with a particular lint check.

lint - The lint block that yields a node to assert for particular conditions in that node.



20
21
22
# File 'lib/pelusa/iterator.rb', line 20

def initialize(&lint)
  @iterator = lambda { |node| NodeIterator.call(node, lint) }
end

Instance Method Details

#call(node) ⇒ Object

Public: Calls the iterator with the given arguments.

node - The root node from which to iterate.



27
28
29
# File 'lib/pelusa/iterator.rb', line 27

def call(node)
  @iterator.call(node)
end

#to_procObject

Public: Returns the iterator. Useful when using symbol to proc conversions, such as &iterator.

Returns the Proc iterator.



35
36
37
# File 'lib/pelusa/iterator.rb', line 35

def to_proc
  @iterator
end