neography 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/CONTRIBUTORS +5 -0
- data/Gemfile.lock +1 -1
- data/README.rdoc +46 -41
- data/lib/neography/rest.rb +41 -30
- data/lib/neography/version.rb +1 -1
- data/spec/integration/rest_index_spec.rb +6 -9
- data/spec/integration/rest_node_spec.rb +52 -69
- data/spec/integration/rest_path_spec.rb +65 -112
- data/spec/integration/rest_relationship_spec.rb +85 -151
- data/spec/integration/rest_traverse_spec.rb +89 -170
- metadata +4 -3
data/CONTRIBUTORS
ADDED
data/Gemfile.lock
CHANGED
data/README.rdoc
CHANGED
@@ -9,8 +9,13 @@ If you want to the full power of Neo4j, you will want to use JRuby and the excel
|
|
9
9
|
=== Installation
|
10
10
|
|
11
11
|
gem install 'neography'
|
12
|
+
|
13
|
+
After that, in your ruby script, do
|
14
|
+
|
15
|
+
require 'rubygems'
|
12
16
|
require 'neography'
|
13
17
|
|
18
|
+
in order to access the functionality.
|
14
19
|
=== Dependencies
|
15
20
|
|
16
21
|
for use:
|
@@ -41,46 +46,46 @@ To Use:
|
|
41
46
|
|
42
47
|
@neo = Neography::Rest.new
|
43
48
|
|
44
|
-
@neo.get_root
|
45
|
-
@neo.create_node
|
46
|
-
@neo.create_node("age" => 31, "name" => "Max")
|
47
|
-
@neo.get_node(
|
48
|
-
@neo.delete_node(
|
49
|
-
@neo.delete_node!(
|
50
|
-
|
51
|
-
@neo.reset_node_properties(
|
52
|
-
@neo.set_node_properties(
|
53
|
-
@neo.get_node_properties(
|
54
|
-
@neo.get_node_properties(
|
55
|
-
@neo.remove_node_properties(
|
56
|
-
@neo.remove_node_properties(
|
57
|
-
@neo.remove_node_properties(
|
58
|
-
|
59
|
-
@neo.create_relationship("friends", node1, node2)
|
60
|
-
@neo.get_node_relationships(
|
61
|
-
@neo.get_node_relationships(
|
62
|
-
@neo.get_node_relationships(
|
63
|
-
@neo.get_node_relationships(
|
64
|
-
@neo.delete_relationship(
|
65
|
-
|
66
|
-
@neo.reset_relationship_properties(
|
67
|
-
@neo.set_relationship_properties(
|
68
|
-
@neo.get_relationship_properties(
|
69
|
-
@neo.get_relationship_properties(
|
70
|
-
@neo.remove_relationship_properties(
|
71
|
-
@neo.remove_relationship_properties(
|
72
|
-
@neo.remove_relationship_properties(
|
73
|
-
|
74
|
-
@neo.list_indexes
|
75
|
-
@neo.add_to_index(key, value,
|
76
|
-
@neo.remove_from_index(key, value,
|
77
|
-
@neo.get_index(key, value)
|
78
|
-
|
79
|
-
@neo.get_path(
|
80
|
-
@neo.get_paths(
|
81
|
-
|
82
|
-
nodes = @neo.traverse(
|
83
|
-
"nodes", # return_type
|
49
|
+
@neo.get_root # Get the root node
|
50
|
+
node1 = @neo.create_node # Create an empty node
|
51
|
+
node2 = @neo.create_node("age" => 31, "name" => "Max") # Create a node with some properties
|
52
|
+
@neo.get_node(node2) # Get a node and its properties
|
53
|
+
@neo.delete_node(node2) # Delete an unrelated node
|
54
|
+
@neo.delete_node!(node2) # Delete a node and all its relationships
|
55
|
+
|
56
|
+
@neo.reset_node_properties(node1, {"age" => 31}) # Reset a node's properties
|
57
|
+
@neo.set_node_properties(node1, {"weight" => 200}) # Set a node's properties
|
58
|
+
@neo.get_node_properties(node1) # Get just the node properties
|
59
|
+
@neo.get_node_properties(node1, ["weight","age"]) # Get some of the node properties
|
60
|
+
@neo.remove_node_properties(node1) # Remove all properties of a node
|
61
|
+
@neo.remove_node_properties(node1, "weight") # Remove one property of a node
|
62
|
+
@neo.remove_node_properties(node1, ["weight","age"]) # Remove multiple properties of a node
|
63
|
+
|
64
|
+
rel1 = @neo.create_relationship("friends", node1, node2) # Create a relationship between node1 and node2
|
65
|
+
@neo.get_node_relationships(node1) # Get all relationships
|
66
|
+
@neo.get_node_relationships(node1, "in") # Get only incoming relationships
|
67
|
+
@neo.get_node_relationships(node1, "all", "enemies") # Get all relationships of type enemies
|
68
|
+
@neo.get_node_relationships(node1, "in", "enemies") # Get only incoming relationships of type enemies
|
69
|
+
@neo.delete_relationship(rel1) # Delete a relationship
|
70
|
+
|
71
|
+
@neo.reset_relationship_properties(rel1, {"age" => 31}) # Reset a relationship's properties
|
72
|
+
@neo.set_relationship_properties(rel1, {"weight" => 200}) # Set a relationship's properties
|
73
|
+
@neo.get_relationship_properties(rel1) # Get just the relationship properties
|
74
|
+
@neo.get_relationship_properties(rel1, ["since","met"]) # Get some of the relationship properties
|
75
|
+
@neo.remove_relationship_properties(rel1) # Remove all properties of a relationship
|
76
|
+
@neo.remove_relationship_properties(rel1, "since") # Remove one property of a relationship
|
77
|
+
@neo.remove_relationship_properties(rel1, ["since","met"]) # Remove multiple properties of a relationship
|
78
|
+
|
79
|
+
@neo.list_indexes # doesn't really seam to do what the api says it does
|
80
|
+
@neo.add_to_index(key, value, node1) # adds a node to an index with the given key/value pair
|
81
|
+
@neo.remove_from_index(key, value, node1) # removes a node to an index with the given key/value pair
|
82
|
+
@neo.get_index(key, value) # gets an index with the given key/value pair
|
83
|
+
|
84
|
+
@neo.get_path(node1, node2, relationships, depth=4, algorithm="shortestPath") # finds the shortest path between two nodes
|
85
|
+
@neo.get_paths(node1, node2, relationships, depth=3, algorithm="allPaths") # finds all paths between two nodes
|
86
|
+
|
87
|
+
nodes = @neo.traverse(node1, # the node where the traversal starts
|
88
|
+
"nodes", # return_type "nodes", "relationships" or "paths"
|
84
89
|
{"order" => "breadth first", # "breadth first" or "depth first" traversal order
|
85
90
|
"uniqueness" => "node global", # See Uniqueness in API documentation for options.
|
86
91
|
"relationships" => [{"type"=> "roommates", # A hash containg a description of the traversal
|
@@ -88,7 +93,7 @@ To Use:
|
|
88
93
|
{"type"=> "friends", #
|
89
94
|
"direction" => "out"}], #
|
90
95
|
"prune evaluator" => {"language" => "javascript", # A prune evaluator (when to stop traversing)
|
91
|
-
"body" => "position.endNode().getProperty('age') < 21;"
|
96
|
+
"body" => "position.endNode().getProperty('age') < 21;"},
|
92
97
|
"return filter" => {"language" => "builtin", # "all" or "all but start node"
|
93
98
|
"name" => "all"},
|
94
99
|
"depth" => 4})
|
data/lib/neography/rest.rb
CHANGED
@@ -36,21 +36,21 @@ module Neography
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def get_node(id)
|
39
|
-
get("/node/#{id}")
|
39
|
+
get("/node/#{get_id(id)}")
|
40
40
|
end
|
41
41
|
|
42
42
|
def reset_node_properties(id, properties)
|
43
43
|
options = { :body => properties.to_json, :headers => {'Content-Type' => 'application/json'} }
|
44
|
-
put("/node/#{id}/properties", options)
|
44
|
+
put("/node/#{get_id(id)}/properties", options)
|
45
45
|
end
|
46
46
|
|
47
47
|
def get_node_properties(id, properties = nil)
|
48
48
|
if properties.nil?
|
49
|
-
get("/node/#{id}/properties")
|
49
|
+
get("/node/#{get_id(id)}/properties")
|
50
50
|
else
|
51
51
|
node_properties = Hash.new
|
52
52
|
properties.to_a.each do |property|
|
53
|
-
value = get("/node/#{id}/properties/#{property}")
|
53
|
+
value = get("/node/#{get_id(id)}/properties/#{property}")
|
54
54
|
node_properties[property] = value unless value.nil?
|
55
55
|
end
|
56
56
|
return nil if node_properties.empty?
|
@@ -60,10 +60,10 @@ module Neography
|
|
60
60
|
|
61
61
|
def remove_node_properties(id, properties = nil)
|
62
62
|
if properties.nil?
|
63
|
-
delete("/node/#{id}/properties")
|
63
|
+
delete("/node/#{get_id(id)}/properties")
|
64
64
|
else
|
65
65
|
properties.to_a.each do |property|
|
66
|
-
delete("/node/#{id}/properties/#{property}")
|
66
|
+
delete("/node/#{get_id(id)}/properties/#{property}")
|
67
67
|
end
|
68
68
|
end
|
69
69
|
end
|
@@ -71,31 +71,31 @@ module Neography
|
|
71
71
|
def set_node_properties(id, properties)
|
72
72
|
properties.each do |key, value|
|
73
73
|
options = { :body => value.to_json, :headers => {'Content-Type' => 'application/json'} }
|
74
|
-
put("/node/#{id}/properties/#{key}", options)
|
74
|
+
put("/node/#{get_id(id)}/properties/#{key}", options)
|
75
75
|
end
|
76
76
|
end
|
77
77
|
|
78
78
|
def delete_node(id)
|
79
|
-
delete("/node/#{id}")
|
79
|
+
delete("/node/#{get_id(id)}")
|
80
80
|
end
|
81
81
|
|
82
82
|
def create_relationship(type, from, to, props = nil)
|
83
|
-
options = { :body => {:to => self.configuration + "/node/#{to}", :data => props, :type => type }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
84
|
-
post("/node/#{from}/relationships", options)
|
83
|
+
options = { :body => {:to => self.configuration + "/node/#{get_id(to)}", :data => props, :type => type }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
84
|
+
post("/node/#{get_id(from)}/relationships", options)
|
85
85
|
end
|
86
86
|
|
87
87
|
def reset_relationship_properties(id, properties)
|
88
88
|
options = { :body => properties.to_json, :headers => {'Content-Type' => 'application/json'} }
|
89
|
-
put("/relationship/#{id}/properties", options)
|
89
|
+
put("/relationship/#{get_id(id)}/properties", options)
|
90
90
|
end
|
91
91
|
|
92
92
|
def get_relationship_properties(id, properties = nil)
|
93
93
|
if properties.nil?
|
94
|
-
get("/relationship/#{id}/properties")
|
94
|
+
get("/relationship/#{get_id(id)}/properties")
|
95
95
|
else
|
96
96
|
relationship_properties = Hash.new
|
97
97
|
properties.to_a.each do |property|
|
98
|
-
value = get("/relationship/#{id}/properties/#{property}")
|
98
|
+
value = get("/relationship/#{get_id(id)}/properties/#{property}")
|
99
99
|
relationship_properties[property] = value unless value.nil?
|
100
100
|
end
|
101
101
|
return nil if relationship_properties.empty?
|
@@ -105,10 +105,10 @@ module Neography
|
|
105
105
|
|
106
106
|
def remove_relationship_properties(id, properties = nil)
|
107
107
|
if properties.nil?
|
108
|
-
delete("/relationship/#{id}/properties")
|
108
|
+
delete("/relationship/#{get_id(id)}/properties")
|
109
109
|
else
|
110
110
|
properties.to_a.each do |property|
|
111
|
-
delete("/relationship/#{id}/properties/#{property}")
|
111
|
+
delete("/relationship/#{get_id(id)}/properties/#{property}")
|
112
112
|
end
|
113
113
|
end
|
114
114
|
end
|
@@ -116,30 +116,30 @@ module Neography
|
|
116
116
|
def set_relationship_properties(id, properties)
|
117
117
|
properties.each do |key, value|
|
118
118
|
options = { :body => value.to_json, :headers => {'Content-Type' => 'application/json'} }
|
119
|
-
put("/relationship/#{id}/properties/#{key}", options)
|
119
|
+
put("/relationship/#{get_id(id)}/properties/#{key}", options)
|
120
120
|
end
|
121
121
|
end
|
122
122
|
|
123
123
|
def delete_relationship(id)
|
124
|
-
delete("/relationship/#{id}")
|
124
|
+
delete("/relationship/#{get_id(id)}")
|
125
125
|
end
|
126
126
|
|
127
127
|
def get_node_relationships(id, dir=nil, types=nil)
|
128
128
|
dir = get_dir(dir)
|
129
129
|
|
130
130
|
if types.nil?
|
131
|
-
node_relationships = get("/node/#{id}/relationships/#{dir}") || Array.new
|
131
|
+
node_relationships = get("/node/#{get_id(id)}/relationships/#{dir}") || Array.new
|
132
132
|
else
|
133
|
-
node_relationships = get("/node/#{id}/relationships/#{dir}/#{types.to_a.join('&')}") || Array.new
|
133
|
+
node_relationships = get("/node/#{get_id(id)}/relationships/#{dir}/#{types.to_a.join('&')}") || Array.new
|
134
134
|
end
|
135
135
|
return nil if node_relationships.empty?
|
136
136
|
node_relationships
|
137
137
|
end
|
138
138
|
|
139
139
|
def delete_node!(id)
|
140
|
-
relationships = get_node_relationships(id)
|
140
|
+
relationships = get_node_relationships(get_id(id))
|
141
141
|
relationships.each { |r| delete_relationship(r["self"].split('/').last) } unless relationships.nil?
|
142
|
-
delete("/node/#{id}")
|
142
|
+
delete("/node/#{get_id(id)}")
|
143
143
|
end
|
144
144
|
|
145
145
|
def list_indexes
|
@@ -147,12 +147,12 @@ module Neography
|
|
147
147
|
end
|
148
148
|
|
149
149
|
def add_to_index(key, value, id)
|
150
|
-
options = { :body => (self.configuration + "/node/#{id}").to_json, :headers => {'Content-Type' => 'application/json'} }
|
150
|
+
options = { :body => (self.configuration + "/node/#{get_id(id)}").to_json, :headers => {'Content-Type' => 'application/json'} }
|
151
151
|
post("/index/node/#{key}/#{value}", options)
|
152
152
|
end
|
153
153
|
|
154
154
|
def remove_from_index(key, value, id)
|
155
|
-
delete("/index/node/#{key}/#{value}/#{id}")
|
155
|
+
delete("/index/node/#{key}/#{value}/#{get_id(id)}")
|
156
156
|
end
|
157
157
|
|
158
158
|
def get_index(key, value)
|
@@ -168,17 +168,17 @@ module Neography
|
|
168
168
|
"prune evaluator" => description["prune evaluator"],
|
169
169
|
"return filter" => description["return filter"],
|
170
170
|
"max depth" => get_depth(description["depth"]), }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
171
|
-
traversal = post("/node/#{id}/traverse/#{get_type(return_type)}", options) || Array.new
|
171
|
+
traversal = post("/node/#{get_id(id)}/traverse/#{get_type(return_type)}", options) || Array.new
|
172
172
|
end
|
173
173
|
|
174
174
|
def get_path(from, to, relationships, depth=1, algorithm="shortestPath")
|
175
|
-
options = { :body => {"to" => self.configuration + "/node/#{to}", "relationships" => relationships, "max depth" => depth, "algorithm" => get_algorithm(algorithm) }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
176
|
-
path = post("/node/#{from}/path", options) || Hash.new
|
175
|
+
options = { :body => {"to" => self.configuration + "/node/#{get_id(to)}", "relationships" => relationships, "max depth" => depth, "algorithm" => get_algorithm(algorithm) }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
176
|
+
path = post("/node/#{get_id(from)}/path", options) || Hash.new
|
177
177
|
end
|
178
178
|
|
179
179
|
def get_paths(from, to, relationships, depth=1, algorithm="allPaths")
|
180
|
-
options = { :body => {"to" => self.configuration + "/node/#{to}", "relationships" => relationships, "max depth" => depth, "algorithm" => get_algorithm(algorithm) }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
181
|
-
paths = post("/node/#{from}/paths", options) || Array.new
|
180
|
+
options = { :body => {"to" => self.configuration + "/node/#{get_id(to)}", "relationships" => relationships, "max depth" => depth, "algorithm" => get_algorithm(algorithm) }.to_json, :headers => {'Content-Type' => 'application/json'} }
|
181
|
+
paths = post("/node/#{get_id(from)}/paths", options) || Array.new
|
182
182
|
end
|
183
183
|
|
184
184
|
private
|
@@ -190,10 +190,10 @@ module Neography
|
|
190
190
|
case code
|
191
191
|
when 200
|
192
192
|
@logger.debug "OK" if @log_enabled
|
193
|
-
response
|
193
|
+
response.parsed_response
|
194
194
|
when 201
|
195
195
|
@logger.debug "OK, created #{body}" if @log_enabled
|
196
|
-
response
|
196
|
+
response.parsed_response
|
197
197
|
when 204
|
198
198
|
@logger.debug "OK, no content returned" if @log_enabled
|
199
199
|
nil
|
@@ -225,6 +225,17 @@ module Neography
|
|
225
225
|
evaluate_response(HTTParty.delete(configuration + path, options))
|
226
226
|
end
|
227
227
|
|
228
|
+
def get_id(id)
|
229
|
+
case id
|
230
|
+
when Hash
|
231
|
+
id["self"].split('/').last
|
232
|
+
when String
|
233
|
+
id.split('/').last
|
234
|
+
else
|
235
|
+
id
|
236
|
+
end
|
237
|
+
end
|
238
|
+
|
228
239
|
def get_dir(dir)
|
229
240
|
case dir
|
230
241
|
when :incoming, "incoming", :in, "in"
|
data/lib/neography/version.rb
CHANGED
@@ -14,26 +14,24 @@ describe Neography::Rest do
|
|
14
14
|
describe "add to index" do
|
15
15
|
it "can add a node to an index" do
|
16
16
|
new_node = @neo.create_node
|
17
|
-
new_node[:id] = new_node["self"].split('/').last
|
18
17
|
key = generate_text(6)
|
19
18
|
value = generate_text
|
20
|
-
@neo.add_to_index(key, value, new_node
|
19
|
+
@neo.add_to_index(key, value, new_node)
|
21
20
|
new_index = @neo.get_index(key, value)
|
22
21
|
new_index.should_not be_nil
|
23
|
-
@neo.remove_from_index(key, value, new_node
|
22
|
+
@neo.remove_from_index(key, value, new_node)
|
24
23
|
end
|
25
24
|
end
|
26
25
|
|
27
26
|
describe "remove from index" do
|
28
27
|
it "can remove a node from an index" do
|
29
28
|
new_node = @neo.create_node
|
30
|
-
new_node[:id] = new_node["self"].split('/').last
|
31
29
|
key = generate_text(6)
|
32
30
|
value = generate_text
|
33
|
-
@neo.add_to_index(key, value, new_node
|
31
|
+
@neo.add_to_index(key, value, new_node)
|
34
32
|
new_index = @neo.get_index(key, value)
|
35
33
|
new_index.should_not be_nil
|
36
|
-
@neo.remove_from_index(key, value, new_node
|
34
|
+
@neo.remove_from_index(key, value, new_node)
|
37
35
|
new_index = @neo.get_index(key, value)
|
38
36
|
new_index.should be_nil
|
39
37
|
end
|
@@ -42,13 +40,12 @@ describe Neography::Rest do
|
|
42
40
|
describe "get index" do
|
43
41
|
it "can get an index" do
|
44
42
|
new_node = @neo.create_node
|
45
|
-
new_node[:id] = new_node["self"].split('/').last
|
46
43
|
key = generate_text(6)
|
47
44
|
value = generate_text
|
48
|
-
@neo.add_to_index(key, value, new_node
|
45
|
+
@neo.add_to_index(key, value, new_node)
|
49
46
|
new_index = @neo.get_index(key, value)
|
50
47
|
new_index.should_not be_nil
|
51
|
-
@neo.remove_from_index(key, value, new_node
|
48
|
+
@neo.remove_from_index(key, value, new_node)
|
52
49
|
end
|
53
50
|
end
|
54
51
|
|
@@ -34,7 +34,7 @@ describe Neography::Rest do
|
|
34
34
|
it "can get a node that exists" do
|
35
35
|
new_node = @neo.create_node
|
36
36
|
new_node[:id] = new_node["self"].split('/').last
|
37
|
-
existing_node = @neo.get_node(new_node
|
37
|
+
existing_node = @neo.get_node(new_node)
|
38
38
|
existing_node.should_not be_nil
|
39
39
|
existing_node.should have_key("self")
|
40
40
|
existing_node["self"].split('/').last.should == new_node[:id]
|
@@ -42,8 +42,8 @@ describe Neography::Rest do
|
|
42
42
|
|
43
43
|
it "returns nil if it tries to get a node that does not exist" do
|
44
44
|
new_node = @neo.create_node
|
45
|
-
|
46
|
-
existing_node = @neo.get_node(
|
45
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
46
|
+
existing_node = @neo.get_node(fake_node)
|
47
47
|
existing_node.should be_nil
|
48
48
|
end
|
49
49
|
end
|
@@ -51,18 +51,17 @@ describe Neography::Rest do
|
|
51
51
|
describe "set_node_properties" do
|
52
52
|
it "can set a node's properties" do
|
53
53
|
new_node = @neo.create_node
|
54
|
-
new_node
|
55
|
-
@neo.
|
56
|
-
existing_node = @neo.get_node(new_node[:id])
|
54
|
+
@neo.set_node_properties(new_node, {"weight" => 200, "eyes" => "brown"})
|
55
|
+
existing_node = @neo.get_node(new_node)
|
57
56
|
existing_node["data"]["weight"].should == 200
|
58
57
|
existing_node["data"]["eyes"].should == "brown"
|
59
58
|
end
|
60
59
|
|
61
60
|
it "it fails to set properties on a node that does not exist" do
|
62
61
|
new_node = @neo.create_node
|
63
|
-
|
64
|
-
@neo.set_node_properties(
|
65
|
-
node_properties = @neo.get_node_properties(
|
62
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
63
|
+
@neo.set_node_properties(fake_node, {"weight" => 150, "hair" => "blonde"})
|
64
|
+
node_properties = @neo.get_node_properties(fake_node)
|
66
65
|
node_properties.should be_nil
|
67
66
|
end
|
68
67
|
end
|
@@ -70,10 +69,9 @@ describe Neography::Rest do
|
|
70
69
|
describe "reset_node_properties" do
|
71
70
|
it "can reset a node's properties" do
|
72
71
|
new_node = @neo.create_node
|
73
|
-
new_node
|
74
|
-
@neo.
|
75
|
-
@neo.
|
76
|
-
existing_node = @neo.get_node(new_node[:id])
|
72
|
+
@neo.set_node_properties(new_node, {"weight" => 200, "eyes" => "brown", "hair" => "black"})
|
73
|
+
@neo.reset_node_properties(new_node, {"weight" => 190, "eyes" => "blue"})
|
74
|
+
existing_node = @neo.get_node(new_node)
|
77
75
|
existing_node["data"]["weight"].should == 190
|
78
76
|
existing_node["data"]["eyes"].should == "blue"
|
79
77
|
existing_node["data"]["hair"].should be_nil
|
@@ -81,9 +79,9 @@ describe Neography::Rest do
|
|
81
79
|
|
82
80
|
it "it fails to reset properties on a node that does not exist" do
|
83
81
|
new_node = @neo.create_node
|
84
|
-
|
85
|
-
@neo.reset_node_properties(
|
86
|
-
node_properties = @neo.get_node_properties(
|
82
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
83
|
+
@neo.reset_node_properties(fake_node, {"weight" => 170, "eyes" => "green"})
|
84
|
+
node_properties = @neo.get_node_properties(fake_node)
|
87
85
|
node_properties.should be_nil
|
88
86
|
end
|
89
87
|
end
|
@@ -91,16 +89,14 @@ describe Neography::Rest do
|
|
91
89
|
describe "get_node_properties" do
|
92
90
|
it "can get all of a node's properties" do
|
93
91
|
new_node = @neo.create_node("weight" => 200, "eyes" => "brown")
|
94
|
-
|
95
|
-
node_properties = @neo.get_node_properties(new_node[:id])
|
92
|
+
node_properties = @neo.get_node_properties(new_node)
|
96
93
|
node_properties["weight"].should == 200
|
97
94
|
node_properties["eyes"].should == "brown"
|
98
95
|
end
|
99
96
|
|
100
97
|
it "can get some of a node's properties" do
|
101
98
|
new_node = @neo.create_node("weight" => 200, "eyes" => "brown", "height" => "2m")
|
102
|
-
|
103
|
-
node_properties = @neo.get_node_properties(new_node[:id], ["weight", "height"])
|
99
|
+
node_properties = @neo.get_node_properties(new_node, ["weight", "height"])
|
104
100
|
node_properties["weight"].should == 200
|
105
101
|
node_properties["height"].should == "2m"
|
106
102
|
node_properties["eyes"].should be_nil
|
@@ -108,51 +104,46 @@ describe Neography::Rest do
|
|
108
104
|
|
109
105
|
it "returns nil if it gets the properties on a node that does not have any" do
|
110
106
|
new_node = @neo.create_node
|
111
|
-
|
112
|
-
@neo.get_node_properties(new_node[:id]).should be_nil
|
107
|
+
@neo.get_node_properties(new_node).should be_nil
|
113
108
|
end
|
114
109
|
|
115
110
|
it "returns nil if it tries to get some of the properties on a node that does not have any" do
|
116
111
|
new_node = @neo.create_node
|
117
|
-
new_node
|
118
|
-
@neo.get_node_properties(new_node[:id], ["weight", "height"]).should be_nil
|
112
|
+
@neo.get_node_properties(new_node, ["weight", "height"]).should be_nil
|
119
113
|
end
|
120
114
|
|
121
115
|
it "returns nil if it fails to get properties on a node that does not exist" do
|
122
116
|
new_node = @neo.create_node
|
123
|
-
|
124
|
-
@neo.get_node_properties(
|
117
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
118
|
+
@neo.get_node_properties(fake_node).should be_nil
|
125
119
|
end
|
126
120
|
end
|
127
121
|
|
128
122
|
describe "remove_node_properties" do
|
129
123
|
it "can remove a node's properties" do
|
130
124
|
new_node = @neo.create_node("weight" => 200, "eyes" => "brown")
|
131
|
-
|
132
|
-
@neo.
|
133
|
-
@neo.get_node_properties(new_node[:id]).should be_nil
|
125
|
+
@neo.remove_node_properties(new_node)
|
126
|
+
@neo.get_node_properties(new_node).should be_nil
|
134
127
|
end
|
135
128
|
|
136
129
|
it "returns nil if it fails to remove the properties of a node that does not exist" do
|
137
130
|
new_node = @neo.create_node
|
138
|
-
|
139
|
-
@neo.remove_node_properties(
|
131
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
132
|
+
@neo.remove_node_properties(fake_node).should be_nil
|
140
133
|
end
|
141
134
|
|
142
135
|
it "can remove a specific node property" do
|
143
136
|
new_node = @neo.create_node("weight" => 200, "eyes" => "brown")
|
144
|
-
new_node
|
145
|
-
@neo.
|
146
|
-
node_properties = @neo.get_node_properties(new_node[:id])
|
137
|
+
@neo.remove_node_properties(new_node, "weight")
|
138
|
+
node_properties = @neo.get_node_properties(new_node)
|
147
139
|
node_properties["weight"].should be_nil
|
148
140
|
node_properties["eyes"].should == "brown"
|
149
141
|
end
|
150
142
|
|
151
143
|
it "can remove more than one property" do
|
152
144
|
new_node = @neo.create_node("weight" => 200, "eyes" => "brown", "height" => "2m")
|
153
|
-
new_node
|
154
|
-
@neo.
|
155
|
-
node_properties = @neo.get_node_properties(new_node[:id])
|
145
|
+
@neo.remove_node_properties(new_node, ["weight", "eyes"])
|
146
|
+
node_properties = @neo.get_node_properties(new_node)
|
156
147
|
node_properties["weight"].should be_nil
|
157
148
|
node_properties["eyes"].should be_nil
|
158
149
|
end
|
@@ -161,39 +152,35 @@ describe Neography::Rest do
|
|
161
152
|
describe "delete_node" do
|
162
153
|
it "can delete an unrelated node" do
|
163
154
|
new_node = @neo.create_node
|
164
|
-
|
165
|
-
@neo.
|
166
|
-
existing_node = @neo.get_node(new_node[:id])
|
155
|
+
@neo.delete_node(new_node).should be_nil
|
156
|
+
existing_node = @neo.get_node(new_node)
|
167
157
|
existing_node.should be_nil
|
168
158
|
end
|
169
159
|
|
170
160
|
it "cannot delete a node that has relationships" do
|
171
161
|
new_node1 = @neo.create_node
|
172
|
-
new_node1[:id] = new_node1["self"].split('/').last
|
173
162
|
new_node2 = @neo.create_node
|
174
|
-
|
175
|
-
@neo.
|
176
|
-
@neo.
|
177
|
-
existing_node = @neo.get_node(new_node1[:id])
|
163
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
164
|
+
@neo.delete_node(new_node1).should be_nil
|
165
|
+
existing_node = @neo.get_node(new_node1)
|
178
166
|
existing_node.should_not be_nil
|
179
167
|
end
|
180
168
|
|
181
169
|
it "returns nil if it tries to delete a node that does not exist" do
|
182
170
|
new_node = @neo.create_node
|
183
|
-
|
184
|
-
@neo.delete_node(
|
185
|
-
existing_node = @neo.get_node(
|
171
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
172
|
+
@neo.delete_node(fake_node).should be_nil
|
173
|
+
existing_node = @neo.get_node(fake_node)
|
186
174
|
existing_node.should be_nil
|
187
175
|
end
|
188
176
|
|
189
177
|
it "returns nil if it tries to delete a node that has already been deleted" do
|
190
178
|
new_node = @neo.create_node
|
191
|
-
|
192
|
-
@neo.
|
193
|
-
existing_node = @neo.get_node(new_node[:id])
|
179
|
+
@neo.delete_node(new_node).should be_nil
|
180
|
+
existing_node = @neo.get_node(new_node)
|
194
181
|
existing_node.should be_nil
|
195
|
-
@neo.delete_node(new_node
|
196
|
-
existing_node = @neo.get_node(new_node
|
182
|
+
@neo.delete_node(new_node).should be_nil
|
183
|
+
existing_node = @neo.get_node(new_node)
|
197
184
|
existing_node.should be_nil
|
198
185
|
end
|
199
186
|
end
|
@@ -201,39 +188,35 @@ describe Neography::Rest do
|
|
201
188
|
describe "delete_node!" do
|
202
189
|
it "can delete an unrelated node" do
|
203
190
|
new_node = @neo.create_node
|
204
|
-
|
205
|
-
@neo.
|
206
|
-
existing_node = @neo.get_node(new_node[:id])
|
191
|
+
@neo.delete_node!(new_node).should be_nil
|
192
|
+
existing_node = @neo.get_node(new_node)
|
207
193
|
existing_node.should be_nil
|
208
194
|
end
|
209
195
|
|
210
196
|
it "can delete a node that has relationships" do
|
211
197
|
new_node1 = @neo.create_node
|
212
|
-
new_node1[:id] = new_node1["self"].split('/').last
|
213
198
|
new_node2 = @neo.create_node
|
214
|
-
|
215
|
-
@neo.
|
216
|
-
@neo.
|
217
|
-
existing_node = @neo.get_node(new_node1[:id])
|
199
|
+
@neo.create_relationship("friends", new_node1, new_node2)
|
200
|
+
@neo.delete_node!(new_node1).should be_nil
|
201
|
+
existing_node = @neo.get_node(new_node1)
|
218
202
|
existing_node.should be_nil
|
219
203
|
end
|
220
204
|
|
221
205
|
it "returns nil if it tries to delete a node that does not exist" do
|
222
206
|
new_node = @neo.create_node
|
223
|
-
|
224
|
-
@neo.delete_node!(
|
225
|
-
existing_node = @neo.get_node(
|
207
|
+
fake_node = new_node["self"].split('/').last.to_i + 1000
|
208
|
+
@neo.delete_node!(fake_node).should be_nil
|
209
|
+
existing_node = @neo.get_node(fake_node)
|
226
210
|
existing_node.should be_nil
|
227
211
|
end
|
228
212
|
|
229
213
|
it "returns nil if it tries to delete a node that has already been deleted" do
|
230
214
|
new_node = @neo.create_node
|
231
|
-
|
232
|
-
@neo.
|
233
|
-
existing_node = @neo.get_node(new_node[:id])
|
215
|
+
@neo.delete_node!(new_node).should be_nil
|
216
|
+
existing_node = @neo.get_node(new_node)
|
234
217
|
existing_node.should be_nil
|
235
|
-
@neo.delete_node!(new_node
|
236
|
-
existing_node = @neo.get_node(new_node
|
218
|
+
@neo.delete_node!(new_node).should be_nil
|
219
|
+
existing_node = @neo.get_node(new_node)
|
237
220
|
existing_node.should be_nil
|
238
221
|
end
|
239
222
|
end
|