class Treedent::Node

Attributes

parent[R]
successor[RW]
value[R]

Public Class Methods

new(value = nil, parent = nil, successor = nil) click to toggle source
# File lib/treedent/node.rb, line 6
def initialize(value = nil, parent = nil, successor = nil)
  @value, @parent, @successor = value, parent, successor
end

Public Instance Methods

ancestors(&block) click to toggle source
# File lib/treedent/node.rb, line 34
def ancestors(&block)
  traverse_relationship(:parent, &block)
end
depth() click to toggle source
# File lib/treedent/node.rb, line 10
def depth
  @depth ||= ancestors.count
end
final_sibling?() click to toggle source
# File lib/treedent/node.rb, line 14
def final_sibling?
  successor.nil? || successors.all? { |node| node.parent != parent }
end
last?() click to toggle source
# File lib/treedent/node.rb, line 26
def last?
  successor.nil?
end
orphan?() click to toggle source
# File lib/treedent/node.rb, line 22
def orphan?
  parent.root?
end
root?() click to toggle source
# File lib/treedent/node.rb, line 30
def root?
  value.nil?
end
successors(&block) click to toggle source
# File lib/treedent/node.rb, line 38
def successors(&block)
  traverse_relationship(:successor, &block)
end
successors_only_descend?() click to toggle source
# File lib/treedent/node.rb, line 18
def successors_only_descend?
  successors.all? { |node| node.depth >= depth }
end

Private Instance Methods

traverse_relationship(relation) { |node while node = public_send| ... } click to toggle source
# File lib/treedent/node.rb, line 44
def traverse_relationship(relation, &block)
  return enum_for(:traverse_relationship, relation) unless block_given?
  
  node = self
  yield node while node = node.public_send(relation)
end