class GraphToSvgVisualiser

Outputs a `dot` language representation of a dependency graph

Public Instance Methods

generate(deps, file) click to toggle source
# File lib/cpp_dependency_graph/graph_to_svg_visualiser.rb, line 7
def generate(deps, file)
  @g = GraphViz.new('dependency_graph')
  create_nodes(deps)
  connect_nodes(deps)
  @g.output(svg: file)
end

Private Instance Methods

add_node(name) click to toggle source
# File lib/cpp_dependency_graph/graph_to_svg_visualiser.rb, line 25
def add_node(name)
  @g.add_node(name, shape: 'box3d')
end
connect_nodes(deps) click to toggle source
# File lib/cpp_dependency_graph/graph_to_svg_visualiser.rb, line 29
def connect_nodes(deps)
  deps.each do |source, links|
    links.each do |link|
      if link.cyclic?
        @g.add_edges(source, link.target, color: 'red')
      else
        @g.add_edges(source, link.target)
      end
    end
  end
end
create_nodes(deps) click to toggle source
# File lib/cpp_dependency_graph/graph_to_svg_visualiser.rb, line 16
def create_nodes(deps)
  node_names = deps.flat_map do |_, links|
    links.map { |link| [link.source, link.target] }.flatten
  end.uniq
  node_names.each do |name|
    add_node(name)
  end
end