Method: ComputedModel::DepGraph#tsort
- Defined in:
- lib/computed_model/dep_graph.rb
#tsort ⇒ ComputedModel::DepGraph::Sorted
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Preprocess the graph by topological sorting. This is a necessary step for loader planning.
62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/computed_model/dep_graph.rb', line 62 def tsort load_order = [] visiting = Set[] visited = Set[] @nodes.each_value do |node| next unless node.type == :primary load_order << node.name visiting.add node.name visited.add node.name end raise ArgumentError, 'No primary loader defined' if load_order.empty? raise "Multiple primary fields: #{load_order.inspect}" if load_order.size > 1 @nodes.each_value do |node| tsort_dfs(node.name, load_order, visiting, visited) end nodes_in_order = load_order.reverse.map { |name| @nodes[name] } ComputedModel::DepGraph::Sorted.new(self, nodes_in_order) end |