Class: LegacyFacter::Core::DirectedGraph

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

Defined Under Namespace

Classes: CycleError, MissingVertex

Instance Method Summary collapse

Instance Method Details

#acyclic?Boolean

Returns:

  • (Boolean)


11
12
13
# File 'lib/facter/custom_facts/core/directed_graph.rb', line 11

def acyclic?
  cycles.empty?
end

#cyclesObject



15
16
17
18
19
20
21
# File 'lib/facter/custom_facts/core/directed_graph.rb', line 15

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

#tsortObject



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

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

  unless 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



25
26
27
28
29
# File 'lib/facter/custom_facts/core/directed_graph.rb', line 25

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