lib/dogviz/graphviz_renderer.rb in dogviz-0.0.18 vs lib/dogviz/graphviz_renderer.rb in dogviz-0.0.19

- old
+ new

@@ -8,47 +8,59 @@ def initialize(title, hints) @graph = GraphViz.digraph(title) @graph[hints] @subgraphs = {} @nodes = {} + @rendered_subgraph_ids = {} end def render_edge(from, other, options) edge = graph.add_edges from.id, other.id options.each { |key, value| edge[key] = value unless value.nil? } edge end - def render_node(parent, id, options, attributes) - clean_node_options options - default_options = {:shape => 'box', :style => ''} - node = parent_node(parent).add_nodes(id, default_options.merge(options)) - apply_render_attributes node, attributes + def render_node(parent, id, attributes) + clean_node_attributes attributes + default_attributes = {:shape => 'box', :style => ''} + merged_attributes = default_attributes.merge(attributes) + node = parent_node(parent).add_nodes(id, merged_attributes) end - def render_subgraph(parent, id, options, attributes) - subgraph = parent_node(parent).add_graph(id, options) - apply_render_attributes subgraph, attributes + def render_subgraph(parent, id, attributes) + if (attributes[:bounded] == true) then + rendered_id = 'cluster_' + id + else + rendered_id = id + end + @rendered_subgraph_ids[id] = rendered_id + + subgraph = parent_node(parent).add_graph(rendered_id, clean_subgraph_attributes(attributes.clone)) @subgraphs[id] = subgraph subgraph end private - def clean_node_options(options) - options.delete(:rank) - options.delete(:cluster) - options + def clean_node_attributes(attributes) + attributes.delete(:rank) + attributes.delete(:bounded) + attributes end + def clean_subgraph_attributes(attributes) + attributes.delete(:bounded) + attributes + end + def parent_node(parent) - return graph unless parent.respond_to?(:render_id) - node = graph.search_node(parent.render_id) + return graph if parent.root? + node = graph.search_node(parent.id) return node unless node.nil? - subgraph = @subgraphs[parent.render_id] - raise "couldn't find node or graph: #{parent.render_id}, out of graphs: #{graph_ids}" if subgraph.nil? + subgraph = @subgraphs[parent.id] + raise "couldn't find node or graph: #{parent.id}, out of graphs: #{graph_ids}" if subgraph.nil? subgraph end def apply_render_attributes(node, attributes) attributes.each do |key, value| \ No newline at end of file