neography-ajaycb 0.0.21
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +5 -0
- data/.project +12 -0
- data/.travis.yml +1 -0
- data/CONTRIBUTORS +12 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +39 -0
- data/LICENSE +19 -0
- data/README.rdoc +350 -0
- data/Rakefile +15 -0
- data/examples/facebook.rb +40 -0
- data/examples/facebook_v2.rb +25 -0
- data/examples/greatest.rb +43 -0
- data/examples/linkedin.rb +39 -0
- data/examples/linkedin_v2.rb +22 -0
- data/examples/traversal_example1.rb +65 -0
- data/examples/traversal_example2.rb +54 -0
- data/lib/neography.rb +46 -0
- data/lib/neography/config.rb +17 -0
- data/lib/neography/equal.rb +21 -0
- data/lib/neography/index.rb +13 -0
- data/lib/neography/neography.rb +10 -0
- data/lib/neography/node.rb +45 -0
- data/lib/neography/node_path.rb +29 -0
- data/lib/neography/node_relationship.rb +35 -0
- data/lib/neography/node_traverser.rb +142 -0
- data/lib/neography/path_traverser.rb +94 -0
- data/lib/neography/property.rb +53 -0
- data/lib/neography/property_container.rb +17 -0
- data/lib/neography/railtie.rb +8 -0
- data/lib/neography/relationship.rb +68 -0
- data/lib/neography/relationship_traverser.rb +80 -0
- data/lib/neography/rest.rb +534 -0
- data/lib/neography/tasks.rb +131 -0
- data/lib/neography/version.rb +3 -0
- data/neography.gemspec +29 -0
- data/spec/integration/authorization_spec.rb +48 -0
- data/spec/integration/index_spec.rb +32 -0
- data/spec/integration/neography_spec.rb +10 -0
- data/spec/integration/node_path_spec.rb +222 -0
- data/spec/integration/node_relationship_spec.rb +374 -0
- data/spec/integration/node_spec.rb +215 -0
- data/spec/integration/relationship_spec.rb +37 -0
- data/spec/integration/rest_batch_spec.rb +221 -0
- data/spec/integration/rest_bulk_spec.rb +106 -0
- data/spec/integration/rest_experimental_spec.rb +22 -0
- data/spec/integration/rest_gremlin_fail_spec.rb +46 -0
- data/spec/integration/rest_index_spec.rb +297 -0
- data/spec/integration/rest_node_spec.rb +232 -0
- data/spec/integration/rest_path_spec.rb +209 -0
- data/spec/integration/rest_plugin_spec.rb +67 -0
- data/spec/integration/rest_relationship_spec.rb +327 -0
- data/spec/integration/rest_traverse_spec.rb +149 -0
- data/spec/spec_helper.rb +18 -0
- metadata +222 -0
@@ -0,0 +1,232 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Neography::Rest do
|
4
|
+
before(:each) do
|
5
|
+
@neo = Neography::Rest.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "get_root" do
|
9
|
+
it "can get the root node" do
|
10
|
+
root_node = @neo.get_root
|
11
|
+
root_node.should have_key("self")
|
12
|
+
root_node["self"].split('/').last.should == "0"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "create_node" do
|
17
|
+
it "can create an empty node" do
|
18
|
+
new_node = @neo.create_node
|
19
|
+
new_node.should_not be_nil
|
20
|
+
end
|
21
|
+
|
22
|
+
it "can create a node with one property" do
|
23
|
+
new_node = @neo.create_node("name" => "Max")
|
24
|
+
new_node["data"]["name"].should == "Max"
|
25
|
+
end
|
26
|
+
|
27
|
+
it "can create a node with nil properties" do
|
28
|
+
new_node = @neo.create_node("name" => "Max", "age" => nil )
|
29
|
+
new_node["data"]["name"].should == "Max"
|
30
|
+
new_node["data"]["age"].should be_nil
|
31
|
+
end
|
32
|
+
|
33
|
+
|
34
|
+
it "can create a node with more than one property" do
|
35
|
+
new_node = @neo.create_node("age" => 31, "name" => "Max")
|
36
|
+
new_node["data"]["name"].should == "Max"
|
37
|
+
new_node["data"]["age"].should == 31
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
describe "get_node" do
|
42
|
+
it "can get a node that exists" do
|
43
|
+
new_node = @neo.create_node
|
44
|
+
new_node[:id] = new_node["self"].split('/').last
|
45
|
+
existing_node = @neo.get_node(new_node)
|
46
|
+
existing_node.should_not be_nil
|
47
|
+
existing_node.should have_key("self")
|
48
|
+
existing_node["self"].split('/').last.should == new_node[:id]
|
49
|
+
end
|
50
|
+
|
51
|
+
it "returns nil if it tries to get a node that does not exist" do
|
52
|
+
new_node = @neo.create_node
|
53
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
54
|
+
existing_node = @neo.get_node(fake_node)
|
55
|
+
existing_node.should be_nil
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
describe "set_node_properties" do
|
60
|
+
it "can set a node's properties" do
|
61
|
+
new_node = @neo.create_node
|
62
|
+
@neo.set_node_properties(new_node, {"weight" => 200, "eyes" => "brown"})
|
63
|
+
existing_node = @neo.get_node(new_node)
|
64
|
+
existing_node["data"]["weight"].should == 200
|
65
|
+
existing_node["data"]["eyes"].should == "brown"
|
66
|
+
end
|
67
|
+
|
68
|
+
it "it fails to set properties on a node that does not exist" do
|
69
|
+
new_node = @neo.create_node
|
70
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
71
|
+
@neo.set_node_properties(fake_node, {"weight" => 150, "hair" => "blonde"})
|
72
|
+
node_properties = @neo.get_node_properties(fake_node)
|
73
|
+
node_properties.should be_nil
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
describe "reset_node_properties" do
|
78
|
+
it "can reset a node's properties" do
|
79
|
+
new_node = @neo.create_node
|
80
|
+
@neo.set_node_properties(new_node, {"weight" => 200, "eyes" => "brown", "hair" => "black"})
|
81
|
+
@neo.reset_node_properties(new_node, {"weight" => 190, "eyes" => "blue"})
|
82
|
+
existing_node = @neo.get_node(new_node)
|
83
|
+
existing_node["data"]["weight"].should == 190
|
84
|
+
existing_node["data"]["eyes"].should == "blue"
|
85
|
+
existing_node["data"]["hair"].should be_nil
|
86
|
+
end
|
87
|
+
|
88
|
+
it "it fails to reset properties on a node that does not exist" do
|
89
|
+
new_node = @neo.create_node
|
90
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
91
|
+
@neo.reset_node_properties(fake_node, {"weight" => 170, "eyes" => "green"})
|
92
|
+
node_properties = @neo.get_node_properties(fake_node)
|
93
|
+
node_properties.should be_nil
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
describe "get_node_properties" do
|
98
|
+
it "can get all of a node's properties" do
|
99
|
+
new_node = @neo.create_node("weight" => 200, "eyes" => "brown")
|
100
|
+
node_properties = @neo.get_node_properties(new_node)
|
101
|
+
node_properties["weight"].should == 200
|
102
|
+
node_properties["eyes"].should == "brown"
|
103
|
+
end
|
104
|
+
|
105
|
+
it "can get some of a node's properties" do
|
106
|
+
new_node = @neo.create_node("weight" => 200, "eyes" => "brown", "height" => "2m")
|
107
|
+
node_properties = @neo.get_node_properties(new_node, ["weight", "height"])
|
108
|
+
node_properties["weight"].should == 200
|
109
|
+
node_properties["height"].should == "2m"
|
110
|
+
node_properties["eyes"].should be_nil
|
111
|
+
end
|
112
|
+
|
113
|
+
it "returns nil if it gets the properties on a node that does not have any" do
|
114
|
+
new_node = @neo.create_node
|
115
|
+
@neo.get_node_properties(new_node).should be_nil
|
116
|
+
end
|
117
|
+
|
118
|
+
it "returns nil if it tries to get some of the properties on a node that does not have any" do
|
119
|
+
new_node = @neo.create_node
|
120
|
+
@neo.get_node_properties(new_node, ["weight", "height"]).should be_nil
|
121
|
+
end
|
122
|
+
|
123
|
+
it "returns nil if it fails to get properties on a node that does not exist" do
|
124
|
+
new_node = @neo.create_node
|
125
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
126
|
+
@neo.get_node_properties(fake_node).should be_nil
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
describe "remove_node_properties" do
|
131
|
+
it "can remove a node's properties" do
|
132
|
+
new_node = @neo.create_node("weight" => 200, "eyes" => "brown")
|
133
|
+
@neo.remove_node_properties(new_node)
|
134
|
+
@neo.get_node_properties(new_node).should be_nil
|
135
|
+
end
|
136
|
+
|
137
|
+
it "returns nil if it fails to remove the properties of a node that does not exist" do
|
138
|
+
new_node = @neo.create_node
|
139
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
140
|
+
@neo.remove_node_properties(fake_node).should be_nil
|
141
|
+
end
|
142
|
+
|
143
|
+
it "can remove a specific node property" do
|
144
|
+
new_node = @neo.create_node("weight" => 200, "eyes" => "brown")
|
145
|
+
@neo.remove_node_properties(new_node, "weight")
|
146
|
+
node_properties = @neo.get_node_properties(new_node)
|
147
|
+
node_properties["weight"].should be_nil
|
148
|
+
node_properties["eyes"].should == "brown"
|
149
|
+
end
|
150
|
+
|
151
|
+
it "can remove more than one property" do
|
152
|
+
new_node = @neo.create_node("weight" => 200, "eyes" => "brown", "height" => "2m")
|
153
|
+
@neo.remove_node_properties(new_node, ["weight", "eyes"])
|
154
|
+
node_properties = @neo.get_node_properties(new_node)
|
155
|
+
node_properties["weight"].should be_nil
|
156
|
+
node_properties["eyes"].should be_nil
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "delete_node" do
|
161
|
+
it "can delete an unrelated node" do
|
162
|
+
new_node = @neo.create_node
|
163
|
+
@neo.delete_node(new_node).should be_nil
|
164
|
+
existing_node = @neo.get_node(new_node)
|
165
|
+
existing_node.should be_nil
|
166
|
+
end
|
167
|
+
|
168
|
+
it "cannot delete a node that has relationships" do
|
169
|
+
new_node1 = @neo.create_node
|
170
|
+
new_node2 = @neo.create_node
|
171
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
172
|
+
@neo.delete_node(new_node1).should be_nil
|
173
|
+
existing_node = @neo.get_node(new_node1)
|
174
|
+
existing_node.should_not be_nil
|
175
|
+
end
|
176
|
+
|
177
|
+
it "returns nil if it tries to delete a node that does not exist" do
|
178
|
+
new_node = @neo.create_node
|
179
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
180
|
+
@neo.delete_node(fake_node).should be_nil
|
181
|
+
existing_node = @neo.get_node(fake_node)
|
182
|
+
existing_node.should be_nil
|
183
|
+
end
|
184
|
+
|
185
|
+
it "returns nil if it tries to delete a node that has already been deleted" do
|
186
|
+
new_node = @neo.create_node
|
187
|
+
@neo.delete_node(new_node).should be_nil
|
188
|
+
existing_node = @neo.get_node(new_node)
|
189
|
+
existing_node.should be_nil
|
190
|
+
@neo.delete_node(new_node).should be_nil
|
191
|
+
existing_node = @neo.get_node(new_node)
|
192
|
+
existing_node.should be_nil
|
193
|
+
end
|
194
|
+
end
|
195
|
+
|
196
|
+
describe "delete_node!" do
|
197
|
+
it "can delete an unrelated node" do
|
198
|
+
new_node = @neo.create_node
|
199
|
+
@neo.delete_node!(new_node).should be_nil
|
200
|
+
existing_node = @neo.get_node(new_node)
|
201
|
+
existing_node.should be_nil
|
202
|
+
end
|
203
|
+
|
204
|
+
it "can delete a node that has relationships" do
|
205
|
+
new_node1 = @neo.create_node
|
206
|
+
new_node2 = @neo.create_node
|
207
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
208
|
+
@neo.delete_node!(new_node1).should be_nil
|
209
|
+
existing_node = @neo.get_node(new_node1)
|
210
|
+
existing_node.should be_nil
|
211
|
+
end
|
212
|
+
|
213
|
+
it "returns nil if it tries to delete a node that does not exist" do
|
214
|
+
new_node = @neo.create_node
|
215
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
216
|
+
@neo.delete_node!(fake_node).should be_nil
|
217
|
+
existing_node = @neo.get_node(fake_node)
|
218
|
+
existing_node.should be_nil
|
219
|
+
end
|
220
|
+
|
221
|
+
it "returns nil if it tries to delete a node that has already been deleted" do
|
222
|
+
new_node = @neo.create_node
|
223
|
+
@neo.delete_node!(new_node).should be_nil
|
224
|
+
existing_node = @neo.get_node(new_node)
|
225
|
+
existing_node.should be_nil
|
226
|
+
@neo.delete_node!(new_node).should be_nil
|
227
|
+
existing_node = @neo.get_node(new_node)
|
228
|
+
existing_node.should be_nil
|
229
|
+
end
|
230
|
+
end
|
231
|
+
|
232
|
+
end
|
@@ -0,0 +1,209 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Neography::Rest do
|
4
|
+
before(:each) do
|
5
|
+
@neo = Neography::Rest.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "get path" do
|
9
|
+
it "can get a path between two nodes" do
|
10
|
+
new_node1 = @neo.create_node
|
11
|
+
new_node2 = @neo.create_node
|
12
|
+
new_relationship = @neo.create_relationship("friends", new_node1, new_node2, {"since" => '10-1-2005', "met" => "college"})
|
13
|
+
path = @neo.get_path(new_node1, new_node2, {"type"=> "friends", "direction" => "out"})
|
14
|
+
path["start"].should == new_node1["self"]
|
15
|
+
path["end"].should == new_node2["self"]
|
16
|
+
path["nodes"].should == [new_node1["self"], new_node2["self"]]
|
17
|
+
end
|
18
|
+
|
19
|
+
it "can get the shortest path between two nodes" do
|
20
|
+
new_node1 = @neo.create_node
|
21
|
+
new_node2 = @neo.create_node
|
22
|
+
new_node3 = @neo.create_node
|
23
|
+
new_node4 = @neo.create_node
|
24
|
+
new_node5 = @neo.create_node
|
25
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
26
|
+
@neo.create_relationship("friends", new_node2, new_node3)
|
27
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
28
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
29
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
30
|
+
path = @neo.get_path(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=3, algorithm="shortestPath")
|
31
|
+
path["start"].should == new_node1["self"]
|
32
|
+
path["end"].should == new_node5["self"]
|
33
|
+
path["nodes"].should == [new_node1["self"], new_node2["self"], new_node3["self"], new_node5["self"]]
|
34
|
+
end
|
35
|
+
|
36
|
+
it "can get a simple path between two nodes" do
|
37
|
+
new_node1 = @neo.create_node
|
38
|
+
new_node2 = @neo.create_node
|
39
|
+
new_node3 = @neo.create_node
|
40
|
+
new_node4 = @neo.create_node
|
41
|
+
new_node5 = @neo.create_node
|
42
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
43
|
+
@neo.create_relationship("friends", new_node2, new_node3)
|
44
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
45
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
46
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
47
|
+
path = @neo.get_path(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=3, algorithm="simplePaths")
|
48
|
+
path["start"].should == new_node1["self"]
|
49
|
+
path["end"].should == new_node5["self"]
|
50
|
+
path["nodes"].should == [new_node1["self"], new_node2["self"], new_node3["self"], new_node5["self"]]
|
51
|
+
end
|
52
|
+
|
53
|
+
it "fails to get a path between two nodes 3 nodes apart when using max depth of 2" do
|
54
|
+
new_node1 = @neo.create_node
|
55
|
+
new_node2 = @neo.create_node
|
56
|
+
new_node3 = @neo.create_node
|
57
|
+
new_node4 = @neo.create_node
|
58
|
+
new_node5 = @neo.create_node
|
59
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
60
|
+
@neo.create_relationship("friends", new_node2, new_node3)
|
61
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
62
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
63
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
64
|
+
path = @neo.get_path(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=2, algorithm="shortestPath")
|
65
|
+
path["start"].should be_nil
|
66
|
+
path["end"].should be_nil
|
67
|
+
end
|
68
|
+
|
69
|
+
it "can get a path between two nodes of a specific relationship" do
|
70
|
+
new_node1 = @neo.create_node
|
71
|
+
new_node2 = @neo.create_node
|
72
|
+
new_node3 = @neo.create_node
|
73
|
+
new_node4 = @neo.create_node
|
74
|
+
new_node5 = @neo.create_node
|
75
|
+
@neo.create_relationship("classmates", new_node1, new_node2)
|
76
|
+
@neo.create_relationship("classmates", new_node2, new_node5)
|
77
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
78
|
+
@neo.create_relationship("friends", new_node2, new_node3)
|
79
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
80
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
81
|
+
path = @neo.get_path(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=4, algorithm="shortestPath")
|
82
|
+
path["start"].should == new_node1["self"]
|
83
|
+
path["end"].should == new_node5["self"]
|
84
|
+
path["nodes"].should == [new_node1["self"], new_node2["self"], new_node3["self"], new_node4["self"], new_node5["self"]]
|
85
|
+
end
|
86
|
+
end
|
87
|
+
|
88
|
+
describe "get paths" do
|
89
|
+
it "can get the shortest paths between two nodes" do
|
90
|
+
new_node1 = @neo.create_node
|
91
|
+
new_node2 = @neo.create_node
|
92
|
+
new_node3 = @neo.create_node
|
93
|
+
new_node4 = @neo.create_node
|
94
|
+
new_node5 = @neo.create_node
|
95
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
96
|
+
@neo.create_relationship("friends", new_node2, new_node5)
|
97
|
+
@neo.create_relationship("friends", new_node1, new_node3)
|
98
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
99
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
100
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
101
|
+
paths = @neo.get_paths(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=4, algorithm="shortestPath")
|
102
|
+
paths.length.should == 2
|
103
|
+
paths[0]["length"].should == 2
|
104
|
+
paths[0]["start"].should == new_node1["self"]
|
105
|
+
paths[0]["end"].should == new_node5["self"]
|
106
|
+
paths[1]["length"].should == 2
|
107
|
+
paths[1]["start"].should == new_node1["self"]
|
108
|
+
paths[1]["end"].should == new_node5["self"]
|
109
|
+
end
|
110
|
+
|
111
|
+
it "can get all paths between two nodes" do
|
112
|
+
new_node1 = @neo.create_node
|
113
|
+
new_node2 = @neo.create_node
|
114
|
+
new_node3 = @neo.create_node
|
115
|
+
new_node4 = @neo.create_node
|
116
|
+
new_node5 = @neo.create_node
|
117
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
118
|
+
@neo.create_relationship("friends", new_node2, new_node5)
|
119
|
+
@neo.create_relationship("friends", new_node1, new_node3)
|
120
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
121
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
122
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
123
|
+
paths = @neo.get_paths(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=4, algorithm="allPaths")
|
124
|
+
paths.length.should == 3
|
125
|
+
paths[0]["length"].should == 2
|
126
|
+
paths[0]["start"].should == new_node1["self"]
|
127
|
+
paths[0]["end"].should == new_node5["self"]
|
128
|
+
paths[1]["length"].should == 3
|
129
|
+
paths[1]["start"].should == new_node1["self"]
|
130
|
+
paths[1]["end"].should == new_node5["self"]
|
131
|
+
paths[2]["length"].should == 2
|
132
|
+
paths[2]["start"].should == new_node1["self"]
|
133
|
+
paths[2]["end"].should == new_node5["self"]
|
134
|
+
end
|
135
|
+
|
136
|
+
it "can get all simple paths between two nodes" do
|
137
|
+
new_node1 = @neo.create_node
|
138
|
+
new_node2 = @neo.create_node
|
139
|
+
new_node3 = @neo.create_node
|
140
|
+
new_node4 = @neo.create_node
|
141
|
+
new_node5 = @neo.create_node
|
142
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
143
|
+
@neo.create_relationship("friends", new_node2, new_node1)
|
144
|
+
@neo.create_relationship("friends", new_node2, new_node5)
|
145
|
+
@neo.create_relationship("friends", new_node1, new_node3)
|
146
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
147
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
148
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
149
|
+
paths = @neo.get_paths(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=4, algorithm="allSimplePaths")
|
150
|
+
paths.length.should == 3
|
151
|
+
paths[0]["length"].should == 2
|
152
|
+
paths[0]["start"].should == new_node1["self"]
|
153
|
+
paths[0]["end"].should == new_node5["self"]
|
154
|
+
paths[1]["length"].should == 3
|
155
|
+
paths[1]["start"].should == new_node1["self"]
|
156
|
+
paths[1]["end"].should == new_node5["self"]
|
157
|
+
paths[2]["length"].should == 2
|
158
|
+
paths[2]["start"].should == new_node1["self"]
|
159
|
+
paths[2]["end"].should == new_node5["self"]
|
160
|
+
end
|
161
|
+
|
162
|
+
it "can get paths between two nodes of max depth 2" do
|
163
|
+
new_node1 = @neo.create_node
|
164
|
+
new_node2 = @neo.create_node
|
165
|
+
new_node3 = @neo.create_node
|
166
|
+
new_node4 = @neo.create_node
|
167
|
+
new_node5 = @neo.create_node
|
168
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
169
|
+
@neo.create_relationship("friends", new_node2, new_node5)
|
170
|
+
@neo.create_relationship("friends", new_node1, new_node3)
|
171
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
172
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
173
|
+
@neo.create_relationship("friends", new_node3, new_node5)
|
174
|
+
paths = @neo.get_paths(new_node1, new_node5, {"type"=> "friends", "direction" => "out"}, depth=2, algorithm="allPaths")
|
175
|
+
paths.length.should == 2
|
176
|
+
paths[0]["length"].should == 2
|
177
|
+
paths[0]["start"].should == new_node1["self"]
|
178
|
+
paths[0]["end"].should == new_node5["self"]
|
179
|
+
paths[1]["length"].should == 2
|
180
|
+
paths[1]["start"].should == new_node1["self"]
|
181
|
+
paths[1]["end"].should == new_node5["self"] end
|
182
|
+
|
183
|
+
it "can get paths between two nodes of a specific relationship" do
|
184
|
+
new_node1 = @neo.create_node
|
185
|
+
new_node2 = @neo.create_node
|
186
|
+
new_node3 = @neo.create_node
|
187
|
+
new_node4 = @neo.create_node
|
188
|
+
new_node5 = @neo.create_node
|
189
|
+
@neo.create_relationship("classmates", new_node1, new_node2)
|
190
|
+
@neo.create_relationship("classmates", new_node2, new_node5)
|
191
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
192
|
+
@neo.create_relationship("friends", new_node2, new_node3)
|
193
|
+
@neo.create_relationship("friends", new_node3, new_node4)
|
194
|
+
@neo.create_relationship("friends", new_node4, new_node5)
|
195
|
+
@neo.create_relationship("classmates", new_node1, new_node3)
|
196
|
+
@neo.create_relationship("classmates", new_node3, new_node5)
|
197
|
+
paths = @neo.get_paths(new_node1, new_node5, {"type"=> "classmates", "direction" => "out"}, depth=4, algorithm="allPaths")
|
198
|
+
paths[0]["length"].should == 2
|
199
|
+
paths[0]["start"].should == new_node1["self"]
|
200
|
+
paths[0]["end"].should == new_node5["self"]
|
201
|
+
paths[1]["length"].should == 2
|
202
|
+
paths[1]["start"].should == new_node1["self"]
|
203
|
+
paths[1]["end"].should == new_node5["self"]
|
204
|
+
end
|
205
|
+
|
206
|
+
end
|
207
|
+
|
208
|
+
|
209
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
|
+
|
3
|
+
describe Neography::Rest do
|
4
|
+
before(:each) do
|
5
|
+
@neo = Neography::Rest.new
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "execute gremlin script" do
|
9
|
+
it "can get the root node id" do
|
10
|
+
root_node = @neo.execute_script("g.v(0)")
|
11
|
+
root_node.should have_key("self")
|
12
|
+
root_node["self"].split('/').last.should == "0"
|
13
|
+
end
|
14
|
+
|
15
|
+
it "can get the a node" do
|
16
|
+
new_node = @neo.create_node
|
17
|
+
id = new_node["self"].split('/').last
|
18
|
+
existing_node = @neo.execute_script("g.v(#{id})")
|
19
|
+
existing_node.should_not be_nil
|
20
|
+
existing_node.should have_key("self")
|
21
|
+
existing_node["self"].split('/').last.should == id
|
22
|
+
end
|
23
|
+
|
24
|
+
it "can get the a node with a variable" do
|
25
|
+
new_node = @neo.create_node
|
26
|
+
id = new_node["self"].split('/').last
|
27
|
+
existing_node = @neo.execute_script("g.v(id)", {:id => id.to_i})
|
28
|
+
existing_node.should_not be_nil
|
29
|
+
existing_node.should have_key("self")
|
30
|
+
existing_node["self"].split('/').last.should == id
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "execute cypher query" do
|
35
|
+
it "can get the root node id" do
|
36
|
+
root_node = @neo.execute_query("start n=node(0) return n")
|
37
|
+
root_node.should have_key("data")
|
38
|
+
root_node.should have_key("columns")
|
39
|
+
root_node["data"][0][0].should have_key("self")
|
40
|
+
root_node["data"][0][0]["self"].split('/').last.should == "0"
|
41
|
+
end
|
42
|
+
|
43
|
+
it "can get the a node" do
|
44
|
+
new_node = @neo.create_node
|
45
|
+
id = new_node["self"].split('/').last
|
46
|
+
existing_node = @neo.execute_query("start n=node(#{id}) return n")
|
47
|
+
existing_node.should_not be_nil
|
48
|
+
existing_node.should have_key("data")
|
49
|
+
existing_node.should have_key("columns")
|
50
|
+
existing_node["data"][0][0].should have_key("self")
|
51
|
+
existing_node["data"][0][0]["self"].split('/').last.should == id
|
52
|
+
end
|
53
|
+
|
54
|
+
it "can get the a node with a variable" do
|
55
|
+
new_node = @neo.create_node
|
56
|
+
id = new_node["self"].split('/').last
|
57
|
+
existing_node = @neo.execute_query("start n=node({id}) return n", {:id => id.to_i})
|
58
|
+
existing_node.should_not be_nil
|
59
|
+
existing_node.should have_key("data")
|
60
|
+
existing_node.should have_key("columns")
|
61
|
+
existing_node["data"][0][0].should have_key("self")
|
62
|
+
existing_node["data"][0][0]["self"].split('/').last.should == id
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|