Class: Rbgraph::Graph

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

Direct Known Subclasses

DirectedGraph, UndirectedGraph

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(nodes = {}, edges = {}) ⇒ Graph

Returns a new instance of Graph.



8
9
10
11
# File 'lib/rbgraph/graph.rb', line 8

def initialize(nodes = {}, edges = {})
  self.nodes = nodes
  self.edges = edges
end

Instance Attribute Details

#edgesObject

Returns the value of attribute edges.



6
7
8
# File 'lib/rbgraph/graph.rb', line 6

def edges
  @edges
end

#nodesObject

Returns the value of attribute nodes.



5
6
7
# File 'lib/rbgraph/graph.rb', line 5

def nodes
  @nodes
end

Instance Method Details

#add_edge!(node1, node2, edge_attributes = {}) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/rbgraph/graph.rb', line 27

def add_edge!(node1, node2, edge_attributes = {})
  node1 = add_node!(node1)
  node2 = add_node!(node2)
  edge = Edge.new(node1, node2, edge_attributes)
  edge = if edges[edge.id].nil?
    edges[edge.id] = edge
  else
    edges[edge.id].merge(edge)
  end
  connect_nodes(node1, node2, edge)
  edge
end

#add_node!(node) ⇒ Object



17
18
19
20
21
22
23
24
25
# File 'lib/rbgraph/graph.rb', line 17

def add_node!(node)
  node = node.is_a?(Node) ? node : Node.new(node)
  if nodes[node.id].nil?
    nodes[node.id] = node
  else
    nodes[node.id].merge(node)
  end
  nodes[node.id]
end

#connect_nodes(node1, node2, edge) ⇒ Object



40
41
42
# File 'lib/rbgraph/graph.rb', line 40

def connect_nodes(node1, node2, edge)
  raise NotImplementedError("Cannot connect nodes on a general graph! Use either Directed or Undirected subclasses")
end

#sizeObject



13
14
15
# File 'lib/rbgraph/graph.rb', line 13

def size
  nodes.values.length
end