fix process#alive? to not raise on no such file
[god.git] / lib / god / dependency_graph.rb
blob7a8634275c024526fc04b6617f6460c98c6ee7b8
1 module God
2   class DependencyGraph
3     attr_accessor :nodes
4     
5     def initialize
6       self.nodes = {}
7     end
8     
9     def add(a, b)
10       node_a = self.nodes[a] || Node.new(a)
11       node_b = self.nodes[b] || Node.new(b)
12       
13       node_a.add(node_b)
14       
15       self.nodes[a] ||= node_a
16       self.nodes[b] ||= node_b
17     end
18   end
19 end
21 module God
22   class DependencyGraph
23     class Node
24       attr_accessor :name
25       attr_accessor :dependencies
26       
27       def initialize(name)
28         self.name = name
29         self.dependencies = []
30       end
31       
32       def add(node)
33         self.dependencies << node unless self.dependencies.include?(node)
34       end
35       
36       def has_node?(node)
37         (self == node) || self.dependencies.any { |x| x.has_node?(node) }
38       end
39     end
40   end
41 end