X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=lib%2Fgraph.njae%2Fgraph.rb;h=eb2ddc6e3e55b296720e400cba6aea87296f38a5;hb=HEAD;hp=bdf75b231e0089ec0acbae0dfc9c2f5fb6d2ce8b;hpb=53a70e2e8b36fc7b7f0b7edb2b1448969f8df0c8;p=graph.njae.git diff --git a/lib/graph.njae/graph.rb b/lib/graph.njae/graph.rb index bdf75b2..eb2ddc6 100644 --- a/lib/graph.njae/graph.rb +++ b/lib/graph.njae/graph.rb @@ -1,5 +1,3 @@ -require 'ostruct' - require 'logger' $log = Logger.new(STDERR) $log.level = Logger::WARN @@ -38,6 +36,31 @@ module GraphNjae edge << vertex1 << vertex2 end + def to_dot(opts = {}) + vertex_args = opts[:vertex_args] || {} + vertex_block = opts[:vertex_block] || nil + edge_args = opts[:edge_args] || {} + edge_block = opts[:edge_block] || nil + dot = "graph {\n" + self.vertices.each do |v| + if vertex_block.nil? + dot << v.to_dot(vertex_args) + else + dot << v.to_dot(&vertex_block) + end + dot << "\n" + end + self.edges.each do |e| + if edge_block.nil? + dot << e.to_dot(edge_args) + else + dot << e.to_dot(&edge_block) + end + dot << "\n" + end + dot << '}' + end + # Form a product graph of this graph and the other. # Return the product graph. def product(other)