-require 'ostruct'
-
-module Graph
- class Vertex < OpenStruct
- def initialize
- super
- self.edges = []
- self
- end
-
- def connect(other)
- e = Edge.new
- e << self << other
- self.edges << e
- other.edges << e unless self === other
- e
- end
-
- def <<(other)
- connect(other)
- self
- end
-
- def neighbours
- vertices = self.edges.map {|e| e.vertices}.flatten
- vertices_to_me = vertices.select {|v| v == self}
- other_vertices = vertices.select {|v| v != self}
- (vertices_to_me[1..-1] || []) + other_vertices
- end
-
- end
-end