class StateMachine::Graph
Provides a set of higher-order features on top of the raw GraphViz graphs
Attributes
The image format to generate the graph in
The graph's full filename
The name of the font to draw state names in
Public Class Methods
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”.
# 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
Public Instance Methods
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')
# File lib/state_machine/graph.rb, line 75 def add_edges(*args) edge = v0_api? ? add_edge(*args) : super edge.fontname = @font edge end
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')
# File lib/state_machine/graph.rb, line 62 def add_nodes(*args) node = v0_api? ? add_node(*args) : super node.fontname = @font node end
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.
# File lib/state_machine/graph.rb, line 51 def output super(@file_format => @file_path) end
Private Instance Methods
Determines whether the old v0 api is in use
# File lib/state_machine/graph.rb, line 83 def v0_api? version[0] == '0' || version[0] == '1' && version[1] == '0' && version[2] <= '2' end
The ruby-graphviz version data
# File lib/state_machine/graph.rb, line 88 def version Constants::RGV_VERSION.split('.') end