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