From f894aa9ab210604d45aa4bd051a06d76dbaf91f3 Mon Sep 17 00:00:00 2001 From: maxdemarzi Date: Thu, 9 Dec 2010 00:17:17 -0800 Subject: [PATCH] adding tests, wacky way to solve untyped incoming,outgoing and both calls --- lib/neography/node_relationship.rb | 6 ++-- lib/neography/node_traverser.rb | 27 +++++++++++++-- spec/integration/relationship_spec.rb | 50 +++++---------------------- 3 files changed, 35 insertions(+), 48 deletions(-) diff --git a/lib/neography/node_relationship.rb b/lib/neography/node_relationship.rb index b5fdbdd..4938f80 100644 --- a/lib/neography/node_relationship.rb +++ b/lib/neography/node_relationship.rb @@ -5,7 +5,7 @@ def outgoing(types=nil) if types NodeTraverser.new(self).outgoing(types) else - NodeTraverser.new(self).outgoing + NodeTraverser.new(self).outgoing(types).collect {|n| n} end end @@ -13,7 +13,7 @@ def incoming(types=nil) if types NodeTraverser.new(self).incoming(types) else - NodeTraverser.new(self).incoming + NodeTraverser.new(self).incoming(types).collect {|n| n} end end @@ -21,7 +21,7 @@ def both(types=nil) if types NodeTraverser.new(self).both(types) else - NodeTraverser.new(self) # default is both + NodeTraverser.new(self).both(types).collect {|n| n} end end diff --git a/lib/neography/node_traverser.rb b/lib/neography/node_traverser.rb index b9c020a..0897e9d 100644 --- a/lib/neography/node_traverser.rb +++ b/lib/neography/node_traverser.rb @@ -26,8 +26,9 @@ def create(other_node) when "incoming", "in" rel = Neography::Relationship.new(@from.neo_server.create_relationship(@relationships.first["type"], other_node, @from)) else - rel << @from.neo_server.create_relationship(@relationships.first["type"], @from, other_node) - rel << @from.neo_server.create_relationship(@relationships.first["type"], other_node, @from) + rel = Array.new + rel << Neography::Relationship.new(@from.neo_server.create_relationship(@relationships.first["type"], @from, other_node)) + rel << Neography::Relationship.new(@from.neo_server.create_relationship(@relationships.first["type"], other_node, @from)) end rel end @@ -104,7 +105,27 @@ def iterator options["prune evaluator"] = @prune unless @prune.nil? options["return filter"] = @filter unless @filter.nil? options["depth"] = @depth unless @depth.nil? - @from.neo_server.traverse(@from, "nodes", options) + + if @relationships[0]["type"].blank? + rels = @from.neo_server.get_node_relationships(@from, @relationships[0]["direction"]) + case @relationships[0]["direction"] + when "in" +# rels.collect { |r| r["start"]}.uniq.collect{ |r| @from.neo_server.get_node(r) } + rels.collect { |r| @from.neo_server.get_node(r["start"]) }.uniq + when "out" + rels.collect { |r| @from.neo_server.get_node(r["end"]) }.uniq + else + rels.collect { |r| + if @from.neo_id == r["start"].split('/').last + @from.neo_server.get_node(r["end"]) + else + @from.neo_server.get_node(r["start"]) + end + }.uniq + end + else + @from.neo_server.traverse(@from, "nodes", options) + end end end diff --git a/spec/integration/relationship_spec.rb b/spec/integration/relationship_spec.rb index d85fbe2..529b41a 100644 --- a/spec/integration/relationship_spec.rb +++ b/spec/integration/relationship_spec.rb @@ -6,21 +6,16 @@ p1 = Neography::Node.create p2 = Neography::Node.create - new_rel = Neography::Relationship.create(:family, p1, p2) - puts new_rel.inspect - new_rel.start_node.should == p1 - new_rel.end_node.should == p2 - - -# p1.outgoing(:family).should include(p2) -# p2.incoming(:family).should include(p1) + Neography::Relationship.create(:family, p1, p2) + p1.outgoing(:family).should include(p2) + p2.incoming(:family).should include(p1) end it "#new(:family, p1, p2, :since => '1998', :colour => 'blue') creates relationship and sets its properties" do p1 = Neography::Node.create p2 = Neography::Node.create - rel = Neography::Relationship.create(:family, p1, p2, :since => 1998, :colour => 'blue') + rel[:since].should == 1998 rel[:colour].should == 'blue' rel.since.should == 1998 @@ -30,42 +25,13 @@ it "#outgoing(:friends).create(other) creates a new relationship between self and other node" do p1 = Neography::Node.create p2 = Neography::Node.create - rel = p1.outgoing(:foo).create(p2) - p1.outgoing(:foo).first.should == p2 - rel.should be_kind_of(Neography::Relationship) - end - end - describe "rel?" do - it "#rel? returns true if there are any relationships" do - n1 = Neography::Node.create - n2 = Neography::Node.create - new_rel = Neography::Relationship.create(:foo, n1, n2) - n1.rel?.should be_true - n1.rel?(:bar).should be_false - n1.rel?(:foo).should be_true - n1.rel?(:incoming, :foo).should be_false - n1.rel?(:outgoing, :foo).should be_true - n1.rel?(:foo, :incoming).should be_false - n1.rel?(:foo, :outgoing).should be_true - - n1.rel?(:incoming).should be_false - n1.rel?(:outgoing).should be_true - n1.rel?(:both).should be_true - n1.rel?(:all).should be_true - n1.rel?.should be_true + rel.should be_kind_of(Neography::Relationship) + p1.outgoing(:foo).first.should == p2 + p1.outgoing(:foo).should include(p2) + p2.incoming(:foo).should include(p1) end end - - describe "delete relationship" do - it "can delete an existing relationship" do - p1 = Neography::Node.create - p2 = Neography::Node.create - new_rel = Neography::Relationship.create(:family, p1, p2) - new_rel.del - Neography::Relationship.load(new_rel).should be_nil - end - end end \ No newline at end of file