Class: RGL::DOT::Graph
Overview
A graph representation. Whether or not it is rendered as directed or undirected depends on which of the programs dot or neato is used to process and render the graph.
Instance Method Summary collapse
-
#<<(element) ⇒ Object
(also: #push)
Adds a new node, edge, or subgraph to this graph.
-
#each_element(&block) ⇒ Object
Calls block once for each node, edge, or subgraph contained by this graph, passing the node, edge, or subgraph to the block.
-
#initialize(params = {}, option_list = GRAPH_OPTS+GRAPH_OPTS_LGCY) ⇒ Graph
constructor
Creates a new Graph with the params Hash providing settings for all graph options.
-
#pop ⇒ Object
Removes the most recently added node, edge, or subgraph from this graph and returns it.
-
#to_s(leader = '', indent = ' ') ⇒ Object
Returns a string representation of this graph which is consumable by the graphviz tools
dot
andneato
.
Constructor Details
#initialize(params = {}, option_list = GRAPH_OPTS+GRAPH_OPTS_LGCY) ⇒ Graph
Creates a new Graph with the params Hash providing settings for all graph options. The option_list parameter restricts those options to the list of valid names it contains. The exception to this is the elements option which, if specified, must be an Enumerable containing a list of nodes, edges, and/or subgraphs.
361 362 363 364 365 |
# File 'lib/rgl/rdot.rb', line 361 def initialize(params = {}, option_list = GRAPH_OPTS+GRAPH_OPTS_LGCY) super(params, option_list) @elements = params['elements'] ? params['elements'] : [] @dot_string = 'graph' end |
Instance Method Details
#<<(element) ⇒ Object Also known as: push
Adds a new node, edge, or subgraph to this graph.
:call-seq:
graph << element -> graph
383 384 385 386 |
# File 'lib/rgl/rdot.rb', line 383 def <<(element) @elements << element self end |
#each_element(&block) ⇒ Object
Calls block once for each node, edge, or subgraph contained by this graph, passing the node, edge, or subgraph to the block.
:call-seq:
graph.each_element {|element| block} -> graph
373 374 375 376 |
# File 'lib/rgl/rdot.rb', line 373 def each_element(&block) @elements.each(&block) self end |
#pop ⇒ Object
Removes the most recently added node, edge, or subgraph from this graph and returns it.
:call-seq:
graph.pop -> element
396 397 398 |
# File 'lib/rgl/rdot.rb', line 396 def pop @elements.pop end |
#to_s(leader = '', indent = ' ') ⇒ Object
Returns a string representation of this graph which is consumable by the graphviz tools dot
and neato
. The leader parameter is used to indent every line of the returned string, and the indent parameter is used to additionally indent nested items.
405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 |
# File 'lib/rgl/rdot.rb', line 405 def to_s(leader = '', indent = ' ') hdr = leader + @dot_string + (@name.nil? ? '' : ' ' + quote_ID(@name)) + " {\n" = @options.to_a.collect do |name, val| unless val.nil? if name == 'label' leader + indent + "#{quote_ID(name)} = #{quote_label(val)}" else leader + indent + "#{quote_ID(name)} = #{quote_ID(val)}" end end end.compact.join("\n") elements = @elements.collect do |element| element.to_s(leader + indent, indent) end.join("\n\n") hdr + (.empty? ? '' : + "\n\n") + (elements.empty? ? '' : elements + "\n") + leader + "}" end |