module Forester::Iterators

Constants

TRAVERSAL_MODES

Public Instance Methods

each_content(options = {}) click to toggle source
# File lib/forester/tree_node_ext/iterators.rb, line 26
def each_content(options = {})
  node_enumerator = each_node(options)

  Enumerator.new do |yielder|
    stop = false
    until stop
      begin
        yielder << node_enumerator.next.content
      rescue StopIteration
        stop = true
      end
    end
  end
end
each_level() click to toggle source
# File lib/forester/tree_node_ext/iterators.rb, line 41
def each_level
  Enumerator.new do |yielder|
    level = [self]
    until level.empty?
      yielder << level
      level = level.flat_map(&:children)
    end
  end
end
each_node(options = {}, &block) click to toggle source
# File lib/forester/tree_node_ext/iterators.rb, line 10
def each_node(options = {}, &block)
  default_options = {
    traversal: :depth_first
  }
  options = default_options.merge(options)

  method_name = traversal_modes[options[:traversal]]

  if method_name
    send(method_name, &block)
  else
    available = traversal_modes.keys.join(', ')
    raise ArgumentError, "invalid traversal mode: #{options[:traversal]} (#{available})"
  end
end

Private Instance Methods

traversal_modes() click to toggle source
# File lib/forester/tree_node_ext/iterators.rb, line 53
def traversal_modes
  TRAVERSAL_MODES
end