Class: Forester::TreeNode

Inherits:
Tree::TreeNode
  • Object
show all
Extended by:
Forwardable
Includes:
Aggregators, Mutators, Views
Defined in:
lib/forester/tree_node.rb

Instance Method Summary collapse

Methods included from Views

#as_nested_hash

Methods included from Mutators

#add_field!, #add_field_to_subtree!, #remove_levels_past!

Methods included from Aggregators

#nodes_with, #own_and_descendants, #search, #values_by_subtree_of_level, #with_ancestry

Instance Method Details

#contentsObject



45
46
47
# File 'lib/forester/tree_node.rb', line 45

def contents
  each_node.map(&:content)
end

#each_levelObject



17
18
19
20
21
22
23
24
25
# File 'lib/forester/tree_node.rb', line 17

def each_level
  Enumerator.new do |yielder|
    level = [self]
    begin
      yielder << level
      level = level.flat_map(&:children)
    end until level.empty?
  end
end

#get(field, default = :raise_error, &block) ⇒ Object



29
30
31
32
33
34
35
36
37
38
39
# File 'lib/forester/tree_node.rb', line 29

def get(field, default = :raise_error, &block)
  if has?(field)
    content.get(field)
  elsif block_given?
    yield self
  elsif default != :raise_error
    default
  else
    raise ArgumentError.new("the node \"#{name}\" does not have \"#{field}\"")
  end
end

#nameObject



41
42
43
# File 'lib/forester/tree_node.rb', line 41

def name
  content.get(:name, super)
end

#nodes_of_level(l) ⇒ Object



11
12
13
# File 'lib/forester/tree_node.rb', line 11

def nodes_of_level(l)
  if l.between?(0, max_level) then each_level.take(l + 1).last else [] end
end