Added hash parameter to graph initialization
authorNeil Smith <neil.github@njae.me.uk>
Fri, 10 Feb 2012 16:05:21 +0000 (16:05 +0000)
committerNeil Smith <neil.github@njae.me.uk>
Fri, 10 Feb 2012 16:05:21 +0000 (16:05 +0000)
Gemfile
Gemfile.lock
lib/graph.njae/edge.rb
lib/graph.njae/graph.rb
lib/graph.njae/vertex.rb
spec/graph/edge_spec.rb
spec/graph/graph_spec.rb
spec/graph/vertex_spec.rb

diff --git a/Gemfile b/Gemfile
index d6b498fb33e8fc5f7a6d1556d256581d62551779..f677f3d2db9e7086230d0faa88ab187cbba78e09 100644 (file)
--- a/Gemfile
+++ b/Gemfile
@@ -6,9 +6,8 @@ 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.6.0"
-  gem "bundler", "~> 1.0.0"
-  gem "jeweler", "~> 1.6.2"
-  gem "rcov", ">= 0"
+  gem "rspec"
+  gem "bundler"
+  gem "jeweler"
   gem "rdoc"
 end
index 024a43aff37e114ec4542cae7494b01eb7830a87..9b1b95bce3c4f321cef4e1b43dc973e6891a0f5c 100644 (file)
@@ -1,30 +1,31 @@
 GEM
   remote: http://rubygems.org/
   specs:
-    diff-lcs (1.1.2)
+    diff-lcs (1.1.3)
     git (1.2.5)
-    jeweler (1.6.2)
+    jeweler (1.8.3)
       bundler (~> 1.0)
       git (>= 1.2.5)
       rake
-    rake (0.9.2)
-    rcov (0.9.9)
-    rdoc (3.7)
-    rspec (2.6.0)
-      rspec-core (~> 2.6.0)
-      rspec-expectations (~> 2.6.0)
-      rspec-mocks (~> 2.6.0)
-    rspec-core (2.6.4)
-    rspec-expectations (2.6.0)
+      rdoc
+    json (1.6.5)
+    rake (0.9.2.2)
+    rdoc (3.12)
+      json (~> 1.4)
+    rspec (2.8.0)
+      rspec-core (~> 2.8.0)
+      rspec-expectations (~> 2.8.0)
+      rspec-mocks (~> 2.8.0)
+    rspec-core (2.8.0)
+    rspec-expectations (2.8.0)
       diff-lcs (~> 1.1.2)
-    rspec-mocks (2.6.0)
+    rspec-mocks (2.8.0)
 
 PLATFORMS
   ruby
 
 DEPENDENCIES
-  bundler (~> 1.0.0)
-  jeweler (~> 1.6.2)
-  rcov
+  bundler
+  jeweler
   rdoc
-  rspec (~> 2.6.0)
+  rspec
index f38a32b21e693bbf645c25bdcca159579f97dceb..814360ba818818cd43df1cf0859208d324098c20 100644 (file)
@@ -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
index e08a1ad8544d12aec4cacf3a095ca5e1e5df6aea..b1de59b324be4297ceed4ef6c1a8dd2fdfe890df 100644 (file)
@@ -7,8 +7,8 @@ module GraphNjae
   # 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
+    def initialize(values = {})
+      super(values)
       self.edges = Array.new
       self.vertices = Array.new
       self
@@ -23,5 +23,20 @@ module GraphNjae
       end
       self
     end
-  end
+    
+    # Form a product graph of this graph and the other.
+    # Return the new graph.
+    def product(other)
+      product_graph = Graph.new
+      self.vertices.each do |v1|
+        other.vertices.each do |v2|
+          product_vertex = Vertex.new
+          product_vertex.left_node = v1
+          product_vertex.right_node = v2
+          product_graph << product_vertex
+        end
+      end
+    end
+    
+  end # class
 end
index 4a75b6df2c628c0cba8a25fead7aff670a1c1563..6b34351740c04c0754a5e431f1ea38bd7773a0a0 100644 (file)
@@ -6,8 +6,8 @@ module GraphNjae
   # A vertex in a graph. The edge can have arbitrary attributes,treated as 
   # method names.
   class Vertex < OpenStruct
-    def initialize
-      super
+    def initialize(values = {})
+      super(values)
       self.edges = []
       self
     end
index 2e7dbfcc9a64863648ed928699155ea173c004b0..d139667126886b8c382368378ab1c43aafe44fc5 100644 (file)
@@ -8,6 +8,15 @@ module GraphNjae
         e = Edge.new
         e.connections.should be_empty
       end
+      
+      it "creates an edge with some parameters" do
+        e = Edge.new :value1 => 1, :value2 => "value2", :value3 => :v3
+        e.value1.should == 1
+        e.value2.should == "value2"
+        e.value3.should == :v3
+        e.value4.should be_nil
+      end
+
     end # #initialize
     
     describe "adds attribues" do
index 09cc6a433cddd36d28d78fa4c09fc9f2542450da..5da61f5ef1b2bd627e0d285bb873401c6ea28c17 100644 (file)
@@ -16,6 +16,15 @@ module GraphNjae
         g.edges.should be_empty
         g.vertices.should be_empty
       end
+      
+      it "creates a graph with some parameters" do
+        g = Graph.new :value1 => 1, :value2 => "value2", :value3 => :v3
+        g.value1.should == 1
+        g.value2.should == "value2"
+        g.value3.should == :v3
+        g.value4.should be_nil
+      end
+
     end # #initialize
       
     describe "adds attribues" do
index 49ce58ccf92b6c234b9ce2a4264b4e6f4ece74c0..b193bc81057558d24f9cf10ca7674937cb5d570d 100644 (file)
@@ -9,6 +9,14 @@ module GraphNjae
         v = Vertex.new
         v.edges.should be_empty
       end
+      
+      it "creates a vertex with some parameters" do
+        v = Vertex.new :value1 => 1, :value2 => "value2", :value3 => :v3
+        v.value1.should == 1
+        v.value2.should == "value2"
+        v.value3.should == :v3
+        v.value4.should be_nil
+      end
     end # #initialize
     
     describe "adds attribues" do