Class: StateMachine::Graph

Inherits:
GraphViz
  • Object
show all
Includes:
Assertions
Defined in:
lib/state_machine/graph.rb

Overview

Provides a set of higher-order features on top of the raw GraphViz graphs

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Assertions

#assert_exclusive_keys, #assert_valid_keys

Constructor Details

#initialize(name, options = {}) ⇒ Graph

Creates a new graph with the given name.

Configuration options:

  • :path - The path to write the graph file to. Default is the current directory (“.”).

  • :format - The image format to generate the graph in. Default is “png'.

  • :font - The name of the font to draw state names in. Default is “Arial”.

  • :orientation - The direction of the graph (“portrait” or “landscape”). Default is “portrait”.



37
38
39
40
41
42
43
44
45
46
# File 'lib/state_machine/graph.rb', line 37

def initialize(name, options = {})
  options = {:path => '.', :format => 'png', :font => 'Arial', :orientation => 'portrait'}.merge(options)
  assert_valid_keys(options, :path, :format, :font, :orientation)
  
  @font = options[:font]
  @file_path = File.join(options[:path], "#{name}.#{options[:format]}")
  @file_format = options[:format]
  
  super('G', :rankdir => options[:orientation] == 'landscape' ? 'LR' : 'TB')
end

Instance Attribute Details

#file_formatObject (readonly)

The image format to generate the graph in



24
25
26
# File 'lib/state_machine/graph.rb', line 24

def file_format
  @file_format
end

#file_pathObject (readonly)

The graph's full filename



21
22
23
# File 'lib/state_machine/graph.rb', line 21

def file_path
  @file_path
end

#fontObject (readonly)

The name of the font to draw state names in



18
19
20
# File 'lib/state_machine/graph.rb', line 18

def font
  @font
end

Instance Method Details

#add_edges(*args) ⇒ Object

Adds a new edge to the graph. The font for the edge will be automatically set based on the graph configuration. The generated edge will be returned.

For example,

graph = StateMachine::Graph.new('test')
graph.add_edges('parked', 'idling', :label => 'ignite')


75
76
77
78
79
# File 'lib/state_machine/graph.rb', line 75

def add_edges(*args)
  edge = v0_api? ? add_edge(*args) : super
  edge.fontname = @font
  edge
end

#add_nodes(*args) ⇒ Object

Adds a new node to the graph. The font for the node will be automatically set based on the graph configuration. The generated node will be returned.

For example,

graph = StateMachine::Graph.new('test')
graph.add_nodes('parked', :label => 'Parked', :width => '1', :height => '1', :shape => 'ellipse')


62
63
64
65
66
# File 'lib/state_machine/graph.rb', line 62

def add_nodes(*args)
  node = v0_api? ? add_node(*args) : super
  node.fontname = @font
  node
end

#outputObject

Generates the actual image file based on the nodes / edges added to the graph. The path to the file is based on the configuration options for this graph.



51
52
53
# File 'lib/state_machine/graph.rb', line 51

def output
  super(@file_format => @file_path)
end