Class: StateMachines::Graph
- Inherits:
-
GraphViz
- Object
- GraphViz
- StateMachines::Graph
- Defined in:
- lib/state_machines/graphviz/graph.rb
Overview
Provides a set of higher-order features on top of the raw GraphViz graphs
Instance Attribute Summary collapse
-
#file_format ⇒ Object
readonly
The image format to generate the graph in.
-
#file_path ⇒ Object
readonly
The graph's full filename.
-
#font ⇒ Object
readonly
The name of the font to draw state names in.
Instance Method Summary collapse
-
#add_edges(*args) ⇒ Object
Adds a new edge to the graph.
-
#add_nodes(*args) ⇒ Object
Adds a new node to the graph.
-
#initialize(name, options = {}) ⇒ Graph
constructor
Creates a new graph with the given name.
-
#output ⇒ Object
Generates the actual image file based on the nodes / edges added to the graph.
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".
26 27 28 29 30 31 32 33 34 35 36 37 |
# File 'lib/state_machines/graphviz/graph.rb', line 26 def initialize(name, = {}) = { path: 'doc/state_machines', format: 'png', font: 'Arial', orientation: 'portrait' }.merge() StateMachines::OptionsValidator.assert_valid_keys!(, :path, :format, :font, :orientation) # TODO: fail if path cannot be created or readonly FileUtils.mkpath([:path]) unless Dir.exist? [:path] @font = [:font] @file_path = File.join([:path], "#{name}.#{[:format]}") @file_format = [:format] super('G', rankdir: [:orientation] == 'landscape' ? 'LR' : 'TB') end |
Instance Attribute Details
#file_format ⇒ Object (readonly)
The image format to generate the graph in
13 14 15 |
# File 'lib/state_machines/graphviz/graph.rb', line 13 def file_format @file_format end |
#file_path ⇒ Object (readonly)
The graph's full filename
10 11 12 |
# File 'lib/state_machines/graphviz/graph.rb', line 10 def file_path @file_path end |
#font ⇒ Object (readonly)
The name of the font to draw state names in
7 8 9 |
# File 'lib/state_machines/graphviz/graph.rb', line 7 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 = StateMachines::Graph.new('test')
graph.add_edges('parked', 'idling', :label => 'ignite')
66 67 68 69 70 |
# File 'lib/state_machines/graphviz/graph.rb', line 66 def add_edges(*args) edge = 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 = StateMachines::Graph.new('test')
graph.add_nodes('parked', :label => 'Parked', :width => '1', :height => '1', :shape => 'ellipse')
53 54 55 56 57 |
# File 'lib/state_machines/graphviz/graph.rb', line 53 def add_nodes(*args) node = super node.fontname = @font node end |
#output ⇒ Object
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.
42 43 44 |
# File 'lib/state_machines/graphviz/graph.rb', line 42 def output super(@file_format => @file_path) end |