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