Sha256: 0f2d0c60b7de5694d1a427b70fc29ee81dd6f5ee1661807ab4cb11a345f76452
Contents?: true
Size: 1.07 KB
Versions: 7
Compression:
Stored size: 1.07 KB
Contents
require 'furnace' class Furnace::Graphviz def initialize @code = "digraph {\n" @code << "node [labeljust=l,nojustify=true,fontname=monospace];" @code << "rankdir=TB;\n" yield self @code << "}" end def node(name, content, options={}) content.gsub!("&", "&") content.gsub!(">", ">") content.gsub!("<", "<") content.gsub!(/\*\*(.+?)\*\*/, '<b>\1</b>') content = content.lines.map { |l| %Q{<tr><td align="left">#{l}</td></tr>} }.join if content.empty? label = "<<empty>>" else label = "<<table border=\"0\">#{content}</table>>" end options = options.merge({ shape: 'box', label: label }) @code << %Q{"#{name.inspect}" #{graphviz_options(options)};\n} end def edge(from, to, label="", options={}) options = options.merge({ label: label.inspect }) @code << %Q{"#{from.inspect}" -> "#{to.inspect}" #{graphviz_options(options)};\n} end def to_s @code end def graphviz_options(options) "[#{options.map { |k,v| "#{k}=#{v}" }.join(",")}]" end end
Version data entries
7 entries across 7 versions & 1 rubygems