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
dotandneato.
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.
364 365 366 367 368 |
# File 'lib/rgl/rdot.rb', line 364 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
386 387 388 389 |
# File 'lib/rgl/rdot.rb', line 386 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
376 377 378 379 |
# File 'lib/rgl/rdot.rb', line 376 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
399 400 401 |
# File 'lib/rgl/rdot.rb', line 399 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.
408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 |
# File 'lib/rgl/rdot.rb', line 408 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 |