class Bundler::Graph::GraphVizClient

def g

def g
  @g ||= ::GraphViz.digraph(@graph_name, {:concentrate => true, :normalize => true, :nodesep => 0.55}) do |g|
    g.edge[:weight]   = 2
    g.edge[:fontname] = g.node[:fontname] = 'Arial, Helvetica, SansSerif'
    g.edge[:fontsize] = 12
  end
end

def initialize(graph_instance)

def initialize(graph_instance)
  @graph_name    = graph_instance.class::GRAPH_NAME
  @groups        = graph_instance.groups
  @relations     = graph_instance.relations
  @node_options  = graph_instance.node_options
  @edge_options  = graph_instance.edge_options
  @output_file   = graph_instance.output_file
  @output_format = graph_instance.output_format
end

def run

def run
  @groups.each do |group|
    g.add_nodes(
      group,
      {:style     => 'filled',
       :fillcolor => '#B9B9D5',
       :shape     => "box3d",
       :fontsize  => 16}.merge(@node_options[group])
    )
  end
  @relations.each do |parent, children|
    children.each do |child|
      if @groups.include?(parent)
        g.add_nodes(child, {:style => 'filled', :fillcolor => '#B9B9D5'}.merge(@node_options[child]))
        g.add_edges(parent, child, {:constraint => false}.merge(@edge_options["#{parent}_#{child}"]))
      else
        g.add_nodes(child, @node_options[child])
        g.add_edges(parent, child, @edge_options["#{parent}_#{child}"])
      end
    end
  end
  if @output_format.to_s == "debug"
    $stdout.puts g.output :none => String
    Bundler.ui.info "debugging bundle viz..."
  else
    begin
      g.output @output_format.to_sym => "#{@output_file}.#{@output_format}"
      Bundler.ui.info "#{@output_file}.#{@output_format}"
    rescue ArgumentError => e
      $stderr.puts "Unsupported output format. See Ruby-Graphviz/lib/graphviz/constants.rb"
      raise e
    end
  end
end