Skip to content

Instantly share code, notes, and snippets.

@workmad3
Last active December 21, 2015 05:29
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save workmad3/6257580 to your computer and use it in GitHub Desktop.
Save workmad3/6257580 to your computer and use it in GitHub Desktop.
require 'graphviz'
def add_module(g, parent, m, visited, depth = 0)
return if depth > 100
if visited[m]
g.add_edges(parent, visited[m])
return
end
visited[m] = current = g.add_nodes(m.to_s)
if parent
g.add_edges(parent, current)
end
m.constants.each do |c|
if m.const_get(c).is_a?(Module) || m.const_get(c).is_a?(Class)
add_module(g, current, m.const_get(c), visited, depth.succ)
end
end
end
# Create a new graph
g = GraphViz.new( :G, :type => :digraph )
visited = {}
add_module(g, nil, SomeModule, visited)
g.output( :png => "#{visited.keys.first.name}.png" )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment