Class: Graphviz::Node

Inherits:
Object
  • Object
show all
Defined in:
lib/graphviz/graph.rb

Overview

Represents a visual node in the graph, which can be connected to other nodes.

Direct Known Subclasses

Graph

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name, graph = nil, **attributes) ⇒ Node

Initialize the node in the graph with the unique name.

Parameters:

  • attributes (Hash)

    The associated graphviz attributes for this node.



28
29
30
31
32
33
34
35
# File 'lib/graphviz/graph.rb', line 28

def initialize(name, graph = nil, **attributes)
	@name = name
	@attributes = attributes
	
	@connections = []
	
	graph << self if graph
end

Instance Attribute Details

#attributesHash

Returns Any attributes specified for this node.

Returns:

  • (Hash)

    Any attributes specified for this node.



49
50
51
# File 'lib/graphviz/graph.rb', line 49

def attributes
  @attributes
end

#connectionsArray<Edge> (readonly)

Returns Any edges connecting to other nodes.

Returns:

  • (Array<Edge>)

    Any edges connecting to other nodes.



46
47
48
# File 'lib/graphviz/graph.rb', line 46

def connections
  @connections
end

#nameString (readonly)

Returns The unique name of the node.

Returns:

  • (String)

    The unique name of the node.



43
44
45
# File 'lib/graphviz/graph.rb', line 43

def name
  @name
end

Instance Method Details

#add_node(name = nil, **attributes) ⇒ Object

Add a node and #connect to it.

Parameters:

  • attributes (Hash)

    The associated graphviz attributes for the new node.



68
69
70
71
72
73
74
# File 'lib/graphviz/graph.rb', line 68

def add_node(name = nil, **attributes)
	node = @graph.add_node(name, **attributes)
	
	connect(node)
	
	return node
end

#attach(parent) ⇒ Object

Attach this node to the given graph:



38
39
40
# File 'lib/graphviz/graph.rb', line 38

def attach(parent)
	@graph = parent
end

#connect(destination, attributes = {}) ⇒ Object

Create an edge between this node and the destination with the specified options.

Parameters:

  • attributes (Hash) (defaults to: {})

    The associated graphviz attributes for the edge.



53
54
55
56
57
58
59
# File 'lib/graphviz/graph.rb', line 53

def connect(destination, attributes = {})
	edge = Edge.new(@graph, self, destination, attributes)
	
	@connections << edge
	
	return edge
end

#connected?(node) ⇒ Boolean

Calculate if this node is connected to another. O(N) search required.

Returns:

  • (Boolean)


62
63
64
# File 'lib/graphviz/graph.rb', line 62

def connected?(node)
	return @connections.find{|edge| edge.destination == node}
end

#dump_attributes(attributes) ⇒ Object

Dump the attributes to dot text format.



97
98
99
100
101
102
103
# File 'lib/graphviz/graph.rb', line 97

def dump_attributes(attributes)
	if attributes.size > 0
		"[" + attributes.collect{|(name, value)| "#{name}=#{dump_value(value)}"}.join(", ") + "]"
	else
		""
	end
end

#dump_graph(buffer, indent, options) ⇒ Object



80
81
82
83
84
85
# File 'lib/graphviz/graph.rb', line 80

def dump_graph(buffer, indent, options)
	node_attributes_text = dump_attributes(@attributes)
	node_name = dump_value(self.identifier)
	
	buffer.puts "#{indent}#{node_name}#{node_attributes_text};"
end

#dump_value(value) ⇒ Object

Dump the value to dot text format.



88
89
90
91
92
93
94
# File 'lib/graphviz/graph.rb', line 88

def dump_value(value)
	if Symbol === value
		value.to_s
	else
		value.inspect
	end
end

#identifierObject



76
77
78
# File 'lib/graphviz/graph.rb', line 76

def identifier
	@name
end