Class: GraphVisualiser

Inherits:
Object
  • Object
show all
Defined in:
lib/cpp_dependency_graph/graph_visualiser.rb

Instance Method Summary collapse

Instance Method Details

#generate_dot_file(deps, file) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/cpp_dependency_graph/graph_visualiser.rb', line 7

def generate_dot_file(deps, file)
  @g = Graphviz::Graph.new(name = 'dependency_graph')

  node_names = deps.flat_map do |_, links|
                 links.map { |link| [link.source, link.target] }.flatten
               end.uniq
  nodes = node_names.map { |name| [name, create_node(name)] }.to_h

  deps.each do |source, links|
    links.each do |link|
      connection = nodes[source].connect(nodes[link.target])
      connection.attributes[:color] = 'red' if link.cyclic?
    end
  end

  File.write(file, @g.to_dot)
  # Graphviz::output(g, path: 'file') # TODO: https://github.com/ioquatix/graphviz/issues/7
end

#generate_html_file(deps, file) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/cpp_dependency_graph/graph_visualiser.rb', line 26

def generate_html_file(deps, file)
  node_names = deps.flat_map do |_, links|
                 links.map { |link| [link.source, link.target] }.flatten
               end.uniq
  nodes = node_names.map { |name| { name: name } }

  connections = deps.flat_map do |_, links|
                  links.map do |link|
                    { source: link.source, dest: link.target }
                  end
                end

  json_nodes = JSON.pretty_generate(nodes)
  json_connections = JSON.pretty_generate(connections)
  # File.write(file, json_nodes + json_connections)

  template_file = resolve_file_path('views/index.html.template')
  template = File.read(template_file)
  contents = template % { dependency_links: json_connections }
  File.write(file, contents)
end