class GraphVizBuilder

Public Class Methods

build(id = '') click to toggle source
# File lib/assets/promo/lib/graphviz_builder.rb, line 9
def self.build(id = '')
  builder = new
  builder.graph(id)
end
build_clustered() click to toggle source
# File lib/assets/promo/lib/graphviz_builder.rb, line 14
def self.build_clustered
  builder = new
  builder.clustered_graph
end

Public Instance Methods

clustered_graph() click to toggle source
# File lib/assets/promo/lib/graphviz_builder.rb, line 42
def clustered_graph
  repo = requirements_repository
  GraphViz.new(:G) do |g|
    index = 0
    repo.select{|r| r[:cluster]}.each do |cls|
      g.public_send("cluster_#{index.to_s}")  do |c|
        index += 1;
        c[:rank => "same", style: :dashed, label: cls.title]
        c[:color => :white] if index.odd?
        cls.each do |n|
          next if n == cls || n.parent == cls
          c.add_node(n.id);
          c.add_edge(n.id, n.parent.id) # unless n == cls
        end
      end
    end
  end
end
graph(id = '') click to toggle source
# File lib/assets/promo/lib/graphviz_builder.rb, line 19
def graph(id = '')
  repo = requirements_repository
  node = id.empty? ? repo : repo.find(id)
  return nil unless node

  GraphViz.new(:G) do |g|
    node.each do |r|
      next if r.root?
      g.add_node(r.id)
      g.add_edge(r.id, r.parent.id) unless r.parent.root?
    end

    unless id.empty?
      r = node.parent
      while !r.parent.root? do
        g.add_node(r.id)
        g.add_edge(r.id, r.parent.id)
        r = r.parent
      end
    end
  end
end