/
template.rb
47 lines (43 loc) · 1.23 KB
/
template.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
require 'graphviz'
module Diaspora
module Cluster
module Creator
class Template
attr_reader :cluster
def initialize(cluster)
raise RuntimeError unless cluster.respond_to?(:each_node)
raise RuntimeError unless cluster.respond_to?(:each_edge)
@cluster = cluster
end
def to_s
canvas.to_s
end
def to_dot(filename = 'cluster.dot')
canvas.output(:dot => "#{filename}")
end
def to_png(filename = 'cluster.png')
canvas.output(:png => "#{filename}")
end
def to_svg(filename = 'cluster.svg')
canvas.output(:svg => "#{filename}")
end
protected
def canvas
return @canvas if @canvas
@canvas = GraphViz.new(cluster.to_s, :type => :graph )
cluster.each_node do |node|
options = {}
options[:label] = (node.respond_to?(:label) ? node.label : node.to_s)
@canvas.add_nodes(node.to_s, options)
end
cluster.each_edge do |edge|
to = edge[0]
from = edge[1]
@canvas.add_edges(to.to_s, from.to_s)
end
@canvas
end
end
end
end
end