Class: AASMDiagram::Diagram

Inherits:
Object
  • Object
show all
Defined in:
lib/aasm_diagram/diagram.rb

Overview

Save a diagram of a single AASM state machine to an image

Instance Method Summary collapse

Constructor Details

#initialize(aasm_instance, filename, type = :png) ⇒ Diagram

Returns a new instance of Diagram.



6
7
8
9
10
11
# File 'lib/aasm_diagram/diagram.rb', line 6

def initialize(aasm_instance, filename, type=:png)
  @aasm_instance = aasm_instance
  @type = type
  draw
  save(filename)
end

Instance Method Details

#drawObject



13
14
15
16
17
# File 'lib/aasm_diagram/diagram.rb', line 13

def draw
  @graphviz = GraphViz.new(:G, type: :digraph)
  draw_nodes
  draw_edges
end

#draw_edgesObject



25
26
27
28
29
30
31
32
33
34
# File 'lib/aasm_diagram/diagram.rb', line 25

def draw_edges
  events.each do |event|
    event.transitions.each do |transition|
      from = @graphviz.get_node(transition.from.to_s)
      to = @graphviz.get_node(transition.to.to_s)
      label = event.name.to_s
      @graphviz.add_edges(from, to, label: label)  unless from.nil?
    end
  end
end

#draw_nodesObject



19
20
21
22
23
# File 'lib/aasm_diagram/diagram.rb', line 19

def draw_nodes
  state_names.map do |state_name|
    @graphviz.add_nodes(state_name.to_s)
  end
end

#save(filename) ⇒ Object



36
37
38
# File 'lib/aasm_diagram/diagram.rb', line 36

def save(filename)
  @graphviz.output(@type => filename)
end