class StatefulEnum::Graph::GraphDrawer

Public Class Methods

new(model, column, states, prefix, suffix, &block) click to toggle source
# File lib/generators/stateful_enum/graph_generator.rb, line 24
def initialize(model, column, states, prefix, suffix, &block)
  @states, @prefix, @suffix = states, prefix, suffix
  @g = ::GraphViz.new 'G', rankdir: 'TB'

  states.each do |state|
    @g.add_node state.to_s, label: state.to_s, width: '1', height: '1', shape: 'ellipse'
  end
  if (default_value = model.columns_hash[column.to_s].default)
    default_label = model.defined_enums[column.to_s].key default_value.to_i  # SQLite returns the default value in String
    @g.add_edge @g.add_node('start state', shape: 'point'), @g.get_node(default_label)
  end

  instance_eval(&block)

  (@g.each_edge.map(&:node_two).uniq - @g.each_edge.map(&:node_one).uniq).each do |final|
    @g.get_node(final) {|n| n['shape'] = 'doublecircle' }
  end

  @g.output png: File.join((ENV['DEST_DIR'] || Dir.pwd), "#{model.name}.png")
end

Public Instance Methods

event(name, &block) click to toggle source
# File lib/generators/stateful_enum/graph_generator.rb, line 45
def event(name, &block)
  EventDrawer.new @g, @states, @prefix, @suffix, name, &block
end