Class: Flat2Tree::Entry

Inherits:
Object
  • Object
show all
Defined in:
lib/flat2tree/entry.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name = nil, nodes = nil, meta = nil) ⇒ Entry

Returns a new instance of Entry.



4
5
6
# File 'lib/flat2tree/entry.rb', line 4

def initialize(name = nil, nodes = nil, meta = nil)
  @name, @nodes, @meta = name, nodes, meta
end

Instance Attribute Details

#metaObject

Returns the value of attribute meta.



2
3
4
# File 'lib/flat2tree/entry.rb', line 2

def meta
  @meta
end

#nameObject

Returns the value of attribute name.



2
3
4
# File 'lib/flat2tree/entry.rb', line 2

def name
  @name
end

#nodesObject

Returns the value of attribute nodes.



2
3
4
# File 'lib/flat2tree/entry.rb', line 2

def nodes
  @nodes
end

Instance Method Details

#dependencies(flat_list) ⇒ Object

expand flat list into tree



9
10
11
12
13
14
15
16
17
18
19
# File 'lib/flat2tree/entry.rb', line 9

def dependencies(flat_list)
  @nodes = flat_list.map(&:clone)
  @nodes.each do |entry|
    entry.nodes = entry.nodes.map do |node|
      @nodes.detect{|entry| entry.name == node }
    end
  end
  # extract the start node if name was given
  @nodes = @nodes.detect{|node| node.name == name }.nodes unless name.nil?
  self
end

#reverse_dependencies(flat_list) ⇒ Object

reverse the dependency tree



22
23
24
25
26
27
28
29
30
# File 'lib/flat2tree/entry.rb', line 22

def reverse_dependencies(flat_list)
  if name.nil?
    @nodes = flat_list.map(&:clone) # .select{|entry| entry.nodes.empty? }
  else
    @nodes = flat_list.select{|entry| entry.nodes.include?(name) }.map(&:clone)
  end
  nodes.each{|node| node.reverse_dependencies(flat_list) }
  self
end

#simplifyObject



32
33
34
35
36
37
38
39
# File 'lib/flat2tree/entry.rb', line 32

def simplify
  @nodes.reject! do |search_node|
    @nodes.detect{|iteration_node|
      iteration_node.nodes.detect{|node| node.name == search_node.name }
    }
  end
  self
end

#to_s(level = 0) ⇒ Object

printout the tree



42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/flat2tree/entry.rb', line 42

def to_s(level = 0)
  out = "#{prefix(level)}#{name}"
  out << ":\n" if nodes.size > 0 and name
  out << nodes.map do |n|
    if n.is_a?(Flat2Tree::Entry)
      n.to_s(level + 1)
    else
n.to_s.split(/\n/).map{|line| "#{prefix(level + 1)}#{line}"}.join("\n")
    end
  end.join("\n") if nodes.size > 0
  out
end