Class: Kludge::Parts

Inherits:
Object
  • Object
show all
Includes:
Enumerable
Defined in:
lib/kludge/parts.rb

Instance Method Summary collapse

Constructor Details

#initializeParts

Returns a new instance of Parts.



5
6
7
# File 'lib/kludge/parts.rb', line 5

def initialize
  @parts = []
end

Instance Method Details

#<<(part) ⇒ Object



31
32
33
# File 'lib/kludge/parts.rb', line 31

def <<(part)
  @parts << part
end

#assign_family(node) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/kludge/parts.rb', line 43

def assign_family(node)
  parent = @parts.detect { |part| part.name == node.dependency }
  return node unless parent
  node.parent = parent
  parent.children << node
  assign_family(parent)
end

#eachObject



9
10
11
12
13
# File 'lib/kludge/parts.rb', line 9

def each
  @parts.each do |part|
    yield part
  end
end

#graphObject



35
36
37
38
39
40
41
# File 'lib/kludge/parts.rb', line 35

def graph
  @graph ||= begin
    leaves.map { |leaf|
      assign_family(leaf)
    }.uniq
  end
end

#leavesObject



51
52
53
54
55
56
57
# File 'lib/kludge/parts.rb', line 51

def leaves
  leaves = @parts.dup
  @parts.each do |part|
    leaves.delete_if { |leaf| leaf.name == part.dependency }
  end
  leaves
end

#namesObject



27
28
29
# File 'lib/kludge/parts.rb', line 27

def names
  @parts.map(&:name)
end

#saveObject



15
16
17
18
19
# File 'lib/kludge/parts.rb', line 15

def save
  graph.each do |root|
    root.save
  end
end

#valid?Boolean

Returns:

  • (Boolean)


21
22
23
24
25
# File 'lib/kludge/parts.rb', line 21

def valid?
  graph.map do |root|
    root.valid?
  end.all?
end