Dependency calculator based on topological sort

http://www.electricmonk.nl/log/2008/08/07/dependency-resolving-algorithm/

by soulwire

CoffeeScript

class Node

    constructor: ( @name, @edges =[] ) ->
    add: ( edges... ) -> @edges = @edges.concat edges

# Build nodes
a = new Node 'a'
b = new Node 'b'
c = new Node 'c'
d = new Node 'd'
e = new Node 'e'

# Add edges
a.add b, d
b.add c, e
c.add d, e

console.log 'nodes:', a, b, c, d, e

# Define the entry point
root = a

# Resolve dependancies
resolve = ( node, result = [] ) ->
    console.log 'resolve', node.name
    resolve edge, result for edge in node.edges when edge not in result
    result.push node
    result

# Get going
result = resolve root

console.log 'result:', ( node.name for node in result )