Sha256: 0dec6937b1afa78b0d28af3c6c8ef282718258bead9562cca5938b144305e86e
Contents?: true
Size: 1.06 KB
Versions: 6
Compression:
Stored size: 1.06 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
6 entries across 6 versions & 1 rubygems