X-Git-Url: https://git.njae.me.uk/?a=blobdiff_plain;f=lib%2Fgraph.njae%2Fedge.rb;h=f3efc91eec9157301ece98c735663d2c94f0d1c8;hb=7f4cb17f7381f76d94c8df4fca5f913c48a5a3b5;hp=6581033d2a885bbe4fe8beddf1eddfb38879b50a;hpb=c34def40508c16cfc815fa02c8743d071491af7b;p=graph.njae.git

diff --git a/lib/graph.njae/edge.rb b/lib/graph.njae/edge.rb
index 6581033..f3efc91 100644
--- a/lib/graph.njae/edge.rb
+++ b/lib/graph.njae/edge.rb
@@ -10,8 +10,8 @@ module GraphNjae
   # Each connection is handled by a Graph::Connection object, so that each end
   # of the Edge can have it's own attributes.
   class Edge < OpenStruct
-    def initialize
-      super
+    def initialize(values = {})
+      super(values)
       self.connections = []
       self
     end
@@ -20,6 +20,7 @@ module GraphNjae
     def <<(other)
       c = Connection.new
       c.end = other
+      other.edges << self unless other.edges.include? self
       self.connections << c
       self
     end
@@ -31,15 +32,29 @@ module GraphNjae
     
     # Return the connection object that joins this Edge to the specified Vertex
     def connection_at(vertex)
-      self.connections.select {|c| c.end.equal?  vertex}.first
+      self.connections.find {|c| c.end.equal?  vertex}
+    end
+    
+    # Return the vertex at the other end of the one given.
+    # Self-loops should still return the vertex
+    def other_end(vertex)
+      if self.vertices[0] == vertex
+        self.vertices[1]
+      else
+        self.vertices[0]
+      end
+    end
+    
+    def to_s
+      '<E: ' + self.type.to_s + ' [' + self.vertices.map {|n| n.to_s}.join(', ') + '] >'
     end
   end
   
   # A connection between an Edge and a Vertex.The connection can have arbitrary attributes,
   # treated as method names.
   class Connection < OpenStruct
-    def initialize
-      super
+    def initialize(values = {})
+      super(values)
       self
     end
   end