neography 0.0.21 → 0.0.22
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/README.rdoc +19 -11
- data/examples/greatest.rb +43 -0
- data/lib/neography/rest.rb +14 -1
- data/lib/neography/version.rb +1 -1
- data/lib/neography.rb +1 -1
- data/spec/integration/rest_node_spec.rb +11 -0
- data/spec/integration/rest_relationship_spec.rb +22 -0
- metadata +5 -4
data/README.rdoc
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
== Welcome to Neography
|
2
2
|
|
3
3
|
Neography is a thin Ruby wrapper to the Neo4j Rest API, for more information:
|
4
|
-
* {Getting Started with Neo4j Server}[http://
|
5
|
-
* {Neo4j Rest API Reference}[http://
|
4
|
+
* {Getting Started with Neo4j Server}[http://neo4j.org/community/]
|
5
|
+
* {Neo4j Rest API Reference}[http://docs.neo4j.org/chunked/milestone/rest-api.html]
|
6
6
|
|
7
7
|
If you want to the full power of Neo4j, you will want to use JRuby and the excellent Neo4j.rb gem at https://github.com/andreasronge/neo4j by Andreas Ronge
|
8
8
|
|
9
|
-
|
9
|
+
Complement to Neography are the:
|
10
|
+
Neology Gem at https://github.com/lordkada/neology by Carlo Alberto Degli Atti
|
11
|
+
Neoid Gem at https://github.com/elado/neoid by Elad Ossadon
|
10
12
|
|
11
13
|
An alternative is the Architect4r Gem at https://github.com/namxam/architect4r by Maximilian Schulz
|
12
14
|
|
@@ -96,8 +98,11 @@ To Use:
|
|
96
98
|
@neo = Neography::Rest.new # Inialize using all default parameters
|
97
99
|
|
98
100
|
@neo.get_root # Get the root node
|
99
|
-
|
100
|
-
|
101
|
+
@neo.create_node # Create an empty node
|
102
|
+
@neo.create_node("age" => 31, "name" => "Max") # Create a node with some properties
|
103
|
+
@neo.create_unique_node(index_name, key, unique_value, # Create a unique node
|
104
|
+
{"age" => 31, "name" => "Max"}) # this needs an existing index
|
105
|
+
|
101
106
|
@neo.get_node(node2) # Get a node and its properties
|
102
107
|
@neo.delete_node(node2) # Delete an unrelated node
|
103
108
|
@neo.delete_node!(node2) # Delete a node and all its relationships
|
@@ -110,8 +115,11 @@ To Use:
|
|
110
115
|
@neo.remove_node_properties(node1, "weight") # Remove one property of a node
|
111
116
|
@neo.remove_node_properties(node1, ["weight","age"]) # Remove multiple properties of a node
|
112
117
|
|
113
|
-
|
114
|
-
|
118
|
+
@neo.create_relationship("friends", node1, node2) # Create a relationship between node1 and node2
|
119
|
+
@neo.create_unique_relationship(index_name, key, value, # Create a unique relationship between nodes
|
120
|
+
"friends", new_node1, new_node2) # this needs an existing index
|
121
|
+
|
122
|
+
@neo.get_relationship(rel1) # Get a relationship
|
115
123
|
@neo.get_node_relationships(node1) # Get all relationships
|
116
124
|
@neo.get_node_relationships(node1, "in") # Get only incoming relationships
|
117
125
|
@neo.get_node_relationships(node1, "all", "enemies") # Get all relationships of type enemies
|
@@ -169,10 +177,6 @@ To Use:
|
|
169
177
|
# "depth" is a short-hand way of specifying a prune evaluator which prunes after a certain depth.
|
170
178
|
# If not specified a depth of 1 is used and if a "prune evaluator" is specified instead of a depth, no depth limit is set.
|
171
179
|
|
172
|
-
Please see the specs for more examples.
|
173
|
-
|
174
|
-
Batch (in progress):
|
175
|
-
|
176
180
|
@neo.batch [:get_node, node1], [:get_node, node2] # Gets two nodes in a batch
|
177
181
|
@neo.batch [:create_node, {"name" => "Max"}],
|
178
182
|
[:create_node, {"name" => "Marc"}] # Creates two nodes in a batch
|
@@ -198,6 +202,10 @@ Batch (in progress):
|
|
198
202
|
|
199
203
|
See http://docs.neo4j.org/chunked/milestone/rest-api-batch-ops.html for Neo4j Batch operations documentation.
|
200
204
|
|
205
|
+
|
206
|
+
Please see the specs for more examples.
|
207
|
+
|
208
|
+
|
201
209
|
Experimental:
|
202
210
|
|
203
211
|
nodes = @neo.create_nodes(5) # Create 5 empty nodes
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'neography'
|
3
|
+
|
4
|
+
def create_great(name)
|
5
|
+
Neography::Node.create("name" => name)
|
6
|
+
end
|
7
|
+
|
8
|
+
game = create_great('The 1958 NFL Championship Game')
|
9
|
+
brando = create_great('Marlon Brando')
|
10
|
+
alex = create_great('Alexander the Great')
|
11
|
+
circus = create_great('The Ringling Bros. and Barnum and Bailey')
|
12
|
+
beatles = create_great('The Beatles')
|
13
|
+
ali = create_great('Muhammad Ali')
|
14
|
+
bread = create_great('Sliced Bread')
|
15
|
+
gatsby = create_great('The Great Gatsby')
|
16
|
+
|
17
|
+
greats = [game,brando,alex,circus,beatles,ali,bread,gatsby]
|
18
|
+
|
19
|
+
def as_great(great, other_greats)
|
20
|
+
other_greats.each do |og|
|
21
|
+
great.outgoing(:as_great) << og
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
greats.each do |g|
|
26
|
+
ogs = greats.select{|v| v != g }.sample(1 + rand(5))
|
27
|
+
as_great(g, ogs)
|
28
|
+
end
|
29
|
+
|
30
|
+
def the_greatest
|
31
|
+
neo = Neography::Rest.new
|
32
|
+
neo.execute_script("m = [:];
|
33
|
+
c = 0;
|
34
|
+
g.
|
35
|
+
V.
|
36
|
+
out.
|
37
|
+
groupCount(m).
|
38
|
+
loop(2){c++ < 1000}.iterate();
|
39
|
+
|
40
|
+
m.sort{a,b -> b.value <=> a.value}.keySet().name[0];")
|
41
|
+
end
|
42
|
+
|
43
|
+
puts "The greatest is #{the_greatest}"
|
data/lib/neography/rest.rb
CHANGED
@@ -172,6 +172,14 @@ module Neography
|
|
172
172
|
post("/node/#{get_id(from)}/relationships", options)
|
173
173
|
end
|
174
174
|
|
175
|
+
def create_unique_relationship(index, key, value, type, from, to)
|
176
|
+
body = {:key=>key,:value=>value, :type => type }
|
177
|
+
body[:start] = self.configuration + "/node/#{get_id(from)}"
|
178
|
+
body[:end] = self.configuration + "/node/#{get_id(to)}"
|
179
|
+
options = { :body => body.to_json, :headers => {'Content-Type' => 'application/json'} }
|
180
|
+
post("/index/relationship/#{index}?unique", options)
|
181
|
+
end
|
182
|
+
|
175
183
|
def get_relationship(id)
|
176
184
|
get("/relationship/#{get_id(id)}")
|
177
185
|
end
|
@@ -256,6 +264,11 @@ module Neography
|
|
256
264
|
post("/index/node/#{index}", options)
|
257
265
|
end
|
258
266
|
|
267
|
+
def create_unique_node(index, key, value, props={})
|
268
|
+
options = { :body => ({:properties=>props, :key => key, :value => value }).to_json, :headers => {'Content-Type' => 'application/json'} }
|
269
|
+
post("/index/node/#{index}?unique", options)
|
270
|
+
end
|
271
|
+
|
259
272
|
def remove_node_from_index(*args)
|
260
273
|
case args.size
|
261
274
|
when 4 then delete("/index/node/#{args[0]}/#{args[1]}/#{args[2]}/#{get_id(args[3])}")
|
@@ -343,7 +356,7 @@ module Neography
|
|
343
356
|
|
344
357
|
def execute_query(query, params = {})
|
345
358
|
options = { :body => {:query => query, :params => params}.to_json, :headers => {'Content-Type' => 'application/json'} }
|
346
|
-
result = post("/
|
359
|
+
result = post("/cypher", options)
|
347
360
|
end
|
348
361
|
|
349
362
|
def execute_script(script, params = {})
|
data/lib/neography/version.rb
CHANGED
data/lib/neography.rb
CHANGED
@@ -36,6 +36,17 @@ describe Neography::Rest do
|
|
36
36
|
new_node["data"]["name"].should == "Max"
|
37
37
|
new_node["data"]["age"].should == 31
|
38
38
|
end
|
39
|
+
|
40
|
+
it "can create a unique node with more than one property" do
|
41
|
+
index_name = generate_text(6)
|
42
|
+
key = generate_text(6)
|
43
|
+
value = generate_text
|
44
|
+
@neo.create_node_index(index_name)
|
45
|
+
new_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
|
46
|
+
new_node["data"]["name"].should == "Max"
|
47
|
+
new_node["data"]["age"].should == 31
|
48
|
+
end
|
49
|
+
|
39
50
|
end
|
40
51
|
|
41
52
|
describe "get_node" do
|
@@ -30,6 +30,28 @@ describe Neography::Rest do
|
|
30
30
|
new_relationship["data"]["since"].should == '10-1-2010'
|
31
31
|
new_relationship["data"]["met"].should == "college"
|
32
32
|
end
|
33
|
+
|
34
|
+
it "can create a unique node with more than one property" do
|
35
|
+
index_name = generate_text(6)
|
36
|
+
key = generate_text(6)
|
37
|
+
value = generate_text
|
38
|
+
@neo.create_node_index(index_name)
|
39
|
+
new_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
|
40
|
+
new_node["data"]["name"].should == "Max"
|
41
|
+
new_node["data"]["age"].should == 31
|
42
|
+
end
|
43
|
+
|
44
|
+
it "can create a unique relationship" do
|
45
|
+
index_name = generate_text(6)
|
46
|
+
key = generate_text(6)
|
47
|
+
value = generate_text
|
48
|
+
new_node1 = @neo.create_node
|
49
|
+
new_node2 = @neo.create_node
|
50
|
+
new_relationship = @neo.create_unique_relationship(index_name, key, value, "friends", new_node1, new_node2)
|
51
|
+
new_relationship["data"][key].should == value
|
52
|
+
end
|
53
|
+
|
54
|
+
|
33
55
|
end
|
34
56
|
|
35
57
|
describe "get_relationship" do
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neography
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 22
|
10
|
+
version: 0.0.22
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Max De Marzi
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-
|
18
|
+
date: 2012-02-09 00:00:00 Z
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
21
21
|
name: rspec
|
@@ -141,6 +141,7 @@ files:
|
|
141
141
|
- Rakefile
|
142
142
|
- examples/facebook.rb
|
143
143
|
- examples/facebook_v2.rb
|
144
|
+
- examples/greatest.rb
|
144
145
|
- examples/linkedin.rb
|
145
146
|
- examples/linkedin_v2.rb
|
146
147
|
- examples/traversal_example1.rb
|