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 )