Class: Facter::Core::DirectedGraph

Inherits:
Hash
  • Object
show all
Includes:
TSort
Defined in:
lib/facter/core/directed_graph.rb

Defined Under Namespace

Classes: CycleError, MissingVertex

Instance Method Summary collapse

Methods included from Plist::Emit

dump, #save_plist, save_plist, #to_plist

Instance Method Details

#acyclic?Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/facter/core/directed_graph.rb', line 9

def acyclic?
  cycles.empty?
end

#cyclesObject



13
14
15
16
17
18
19
# File 'lib/facter/core/directed_graph.rb', line 13

def cycles
  cycles = []
  each_strongly_connected_component do |component|
    cycles << component if component.size > 1
  end
  cycles
end

#tsortObject



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/facter/core/directed_graph.rb', line 29

def tsort
  missing = Set.new(self.values.flatten) - Set.new(self.keys)

  if not missing.empty?
    raise MissingVertex, "Cannot sort elements; cannot depend on missing elements #{missing.to_a}"
  end

  super

rescue TSort::Cyclic
  raise CycleError, "Cannot sort elements; found the following cycles: #{cycles.inspect}"
end

#tsort_each_child(node) ⇒ Object



23
24
25
26
27
# File 'lib/facter/core/directed_graph.rb', line 23

def tsort_each_child(node)
  fetch(node, []).each do |child|
    yield child
  end
end