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!("&", "&amp;")
    content.gsub!(">", "&gt;")
    content.gsub!("<", "&lt;")
    content.gsub!(/\*\*(.+?)\*\*/, '<b>\1</b>')
    content = content.lines.map { |l| %Q{<tr><td align="left">#{l}</td></tr>} }.join

    if content.empty?
      label = "<&lt;empty&gt;>"
    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

Version Path
furnace-0.4.0.beta.1 lib/furnace/graphviz.rb
furnace-0.3.1 lib/furnace/graphviz.rb
furnace-0.3.0 lib/furnace/graphviz.rb
furnace-0.3.0.beta3 lib/furnace/graphviz.rb
furnace-0.3.0.beta2 lib/furnace/graphviz.rb
furnace-0.3.0.beta1 lib/furnace/graphviz.rb
furnace-0.2.6 lib/furnace/graphviz.rb