Tidied up, added comments, created documentation.
authorNeil Smith <neil.github@njae.me.uk>
Thu, 22 Sep 2011 08:11:17 +0000 (09:11 +0100)
committerNeil Smith <neil.github@njae.me.uk>
Thu, 22 Sep 2011 08:11:17 +0000 (09:11 +0100)
Gemfile
Rakefile
lib/graph/edge.rb
lib/graph/edge.rb~
lib/graph/graph.rb
lib/graph/graph.rb~
lib/graph/vertex.rb
lib/graph/vertex.rb~

diff --git a/Gemfile b/Gemfile
index 8606a1498170fe7faf9bd4a4c777515c1afd3017..d6b498fb33e8fc5f7a6d1556d256581d62551779 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -6,8 +6,9 @@ source "http://rubygems.org"
 # Add dependencies to develop your gem here.
 # Include everything needed to run rake, tests, features, etc.
 group :development do
-  gem "rspec", "~> 2.3.0"
+  gem "rspec", "~> 2.6.0"
   gem "bundler", "~> 1.0.0"
   gem "jeweler", "~> 1.6.2"
   gem "rcov", ">= 0"
+  gem "rdoc"
 end
index 07112cf6487a90d4beae7f94e2bdb1cb60bdb349..0c3452e7e91230e8d6f82cb1aaef88c02d2cc7de 100644 (file)
--- a/Rakefile
+++ b/Rakefile
@@ -17,8 +17,8 @@ Jeweler::Tasks.new do |gem|
   gem.name = "graph.njae"
   gem.homepage = "http://github.com/NeilNjae/graph.njae"
   gem.license = "MIT"
-  gem.summary = %Q{TODO: one-line summary of your gem}
-  gem.description = %Q{TODO: longer description of your gem}
+  gem.summary = %Q{A simple graph library}
+  gem.description = %Q{A simple graph library}
   gem.email = "neil.github@njae.me.uk"
   gem.authors = ["Neil Smith"]
   # dependencies defined in Gemfile
@@ -38,8 +38,10 @@ end
 
 task :default => :spec
 
-require 'rake/rdoctask'
-Rake::RDocTask.new do |rdoc|
+# require 'rake/rdoctask'
+# Rake::RDocTask.new do |rdoc|
+require 'rdoc/task'
+RDoc::Task.new do |rdoc|
   version = File.exist?('VERSION') ? File.read('VERSION') : ""
 
   rdoc.rdoc_dir = 'rdoc'
index c579a2f6cbf27188406c9121a900aae27c6353f4..e783d354b42241eba9065fd458c7df514edd1e6a 100644 (file)
@@ -1,6 +1,14 @@
 require 'ostruct'
 
+# A simple graph library
+
 module Graph
+  
+  # An edge (or multiedge) in a graph. The edge can have arbitrary attributes,
+  # treated as method names.
+  #
+  # 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
@@ -8,6 +16,7 @@ module Graph
       self
     end
     
+    # Connect this edge to a vertex
     def <<(other)
       c = Connection.new
       c.end = other
@@ -15,15 +24,19 @@ module Graph
       self
     end
     
+    # Return the set of vertices this edge connects.
     def vertices
       self.connections.map {|c| c.end}
     end
     
+    # 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
     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
index 10f133e9b9bedd46cdb431b0fa108b19d1aa9aac..c579a2f6cbf27188406c9121a900aae27c6353f4 100644 (file)
@@ -27,6 +27,7 @@ module Graph
   class Connection < OpenStruct
     def initialize
       super
+      self
     end
   end
 end
index c9d83b16c6d1ea152a36a77caaf38d7318be7ffa..25c95cc590142f2e55d76723a7a377a0dd8f4038 100644 (file)
@@ -1,6 +1,11 @@
 require 'ostruct'
 
+# A simple graph library
+
 module Graph
+  
+  # A container for all the parts of a graph.  The graph can have arbitrary attributes,
+  # treated as method names.
   class Graph < OpenStruct
     def initialize
       super
@@ -9,6 +14,7 @@ module Graph
       self
     end
     
+    # Add a Vertex or Edge to the graph.
     def <<(other)
       if other.class == Vertex
         self.vertices << other
index 0201c84f97efdbddd18e147e9df5dda6e023743d..c9d83b16c6d1ea152a36a77caaf38d7318be7ffa 100644 (file)
@@ -6,6 +6,7 @@ module Graph
       super
       self.edges = Array.new
       self.vertices = Array.new
+      self
     end
     
     def <<(other)
index 0bccb57296cde47787b5b6b77f54a34a87f0393b..cb315e783facc188541a6386a9574d01d2754ebc 100644 (file)
@@ -1,6 +1,10 @@
 require 'ostruct'
 
+# A simple graph library
+
 module Graph
+  # A vertex in a graph. The edge can have arbitrary attributes,treated as 
+  # method names.
   class Vertex < OpenStruct
     def initialize
       super
@@ -8,6 +12,8 @@ module Graph
       self
     end
     
+    # Connect this vertex to another, creating an Edge to do so, and returning
+    # the Edge
     def connect(other)
       e = Edge.new
       e << self << other
@@ -16,11 +22,14 @@ module Graph
       e
     end
     
+    # Connect this vertex to another, creating an Edge to do so, and returning
+    # this Vertex
     def <<(other)
       connect(other)
       self
     end
     
+    # Return the set of neighbouring vertices
     def neighbours
       vertices = self.edges.map {|e| e.vertices}.flatten
       vertices_to_me = vertices.select {|v| v == self}
index 6a85373fc76f03a656d6aa6878de66b19c63f718..0bccb57296cde47787b5b6b77f54a34a87f0393b 100644 (file)
@@ -5,6 +5,7 @@ module Graph
     def initialize
       super
       self.edges = []
+      self
     end
     
     def connect(other)