neography 0.0.22 → 0.0.23
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 +9 -1
- data/lib/neography/rest.rb +8 -0
- data/lib/neography/version.rb +1 -1
- data/spec/integration/rest_batch_spec.rb +88 -4
- data/spec/integration/rest_node_spec.rb +5 -0
- metadata +73 -118
data/README.rdoc
CHANGED
@@ -182,12 +182,19 @@ To Use:
|
|
182
182
|
[:create_node, {"name" => "Marc"}] # Creates two nodes in a batch
|
183
183
|
@neo.batch [:set_node_property, node1, {"name" => "Tom"}],
|
184
184
|
[:set_node_property, node2, {"name" => "Jerry"}] # Sets the property of two nodes
|
185
|
+
@neo.batch [:create_unique_node, index_name, key, value,
|
186
|
+
{"age" => 33, "name" => "Max"}] # Creates a unique node
|
185
187
|
@neo.batch [:get_relationship, rel1],
|
186
188
|
[:get_relationship, rel2] # Gets two relationships in a batch
|
187
189
|
@neo.batch [:create_relationship, "friends",
|
188
190
|
node1, node2, {:since => "high school"}],
|
189
191
|
[:create_relationship, "friends",
|
190
192
|
node1, node3, {:since => "college"}] # Creates two relationships in a batch
|
193
|
+
@neo.batch [:create_unique_relationship, index_name,
|
194
|
+
key, value, "friends", node1, node2] # Creates a unique relationship
|
195
|
+
@neo.batch [:get_node_index, index_name, key, value] # Get node index
|
196
|
+
@neo.batch [:get_relationship_index, index_name, key, value] # Get relationship index
|
197
|
+
|
191
198
|
@neo.batch [:create_node, {"name" => "Max"}],
|
192
199
|
[:create_node, {"name" => "Marc"}], # Creates two nodes and index them
|
193
200
|
[:add_node_to_index, "test_node_index", key, value, "{0}"],
|
@@ -347,7 +354,8 @@ Contribute patches via pull requests.
|
|
347
354
|
|
348
355
|
=== Help
|
349
356
|
|
350
|
-
If you are just starting out, or need help send me an e-mail at
|
357
|
+
If you are just starting out, or need help send me an e-mail at maxdemarzi@gmail.com.
|
358
|
+
Check you my blog at http://maxdemarzi.com where I have more Neography examples.
|
351
359
|
|
352
360
|
=== Licenses
|
353
361
|
|
data/lib/neography/rest.rb
CHANGED
@@ -382,6 +382,8 @@ module Neography
|
|
382
382
|
{:method => "GET", :to => "/node/#{get_id(args[1])}"}
|
383
383
|
when :create_node
|
384
384
|
{:method => "POST", :to => "/node/", :body => args[1]}
|
385
|
+
when :create_unique_node
|
386
|
+
{:method => "POST", :to => "/index/node/#{args[1]}?unique", :body => {:key => args[2], :value => args[3], :properties => args[4]}}
|
385
387
|
when :set_node_property
|
386
388
|
{:method => "PUT", :to => "/node/#{get_id(args[1])}/properties/#{args[2].keys.first}", :body => args[2].values.first}
|
387
389
|
when :reset_node_properties
|
@@ -390,6 +392,8 @@ module Neography
|
|
390
392
|
{:method => "GET", :to => "/relationship/#{get_id(args[1])}"}
|
391
393
|
when :create_relationship
|
392
394
|
{:method => "POST", :to => (args[2].is_a?(String) && args[2].start_with?("{") ? "" : "/node/") + "#{get_id(args[2])}/relationships", :body => {:to => (args[3].is_a?(String) && args[3].start_with?("{") ? "" : "/node/") + "#{get_id(args[3])}", :type => args[1], :data => args[4] } }
|
395
|
+
when :create_unique_relationship
|
396
|
+
{:method => "POST", :to => "/index/relationship/#{args[1]}?unique", :body => {:key => args[2], :value => args[3], :type => args[4], :start => (args[5].is_a?(String) && args[5].start_with?("{") ? "" : "/node/") + "#{get_id(args[5])}", :end=> (args[6].is_a?(String) && args[6].start_with?("{") ? "" : "/node/") + "#{get_id(args[6])}"} }
|
393
397
|
when :set_relationship_property
|
394
398
|
{:method => "PUT", :to => "/relationship/#{get_id(args[1])}/properties/#{args[2].keys.first}", :body => args[2].values.first}
|
395
399
|
when :reset_relationship_properties
|
@@ -398,6 +402,10 @@ module Neography
|
|
398
402
|
{:method => "POST", :to => "/index/node/#{args[1]}", :body => {:uri => (args[4].is_a?(String) && args[4].start_with?("{") ? "" : "/node/") + "#{get_id(args[4])}", :key => args[2], :value => args[3] } }
|
399
403
|
when :add_relationship_to_index
|
400
404
|
{:method => "POST", :to => "/index/relationship/#{args[1]}", :body => {:uri => (args[4].is_a?(String) && args[4].start_with?("{") ? "" : "/relationship/") + "#{get_id(args[4])}", :key => args[2], :value => args[3] } }
|
405
|
+
when :get_node_index
|
406
|
+
{:method => "GET", :to => "/index/node/#{args[1]}/#{args[2]}/#{args[3]}"}
|
407
|
+
when :get_relationship_index
|
408
|
+
{:method => "GET", :to => "/index/relationship/#{args[1]}/#{args[2]}/#{args[3]}"}
|
401
409
|
end
|
402
410
|
end
|
403
411
|
|
data/lib/neography/version.rb
CHANGED
@@ -53,6 +53,26 @@ describe Neography::Rest do
|
|
53
53
|
batch_result.last["body"]["data"]["name"].should == "Marc"
|
54
54
|
end
|
55
55
|
|
56
|
+
it "can create a unique node" do
|
57
|
+
index_name = generate_text(6)
|
58
|
+
key = generate_text(6)
|
59
|
+
value = generate_text
|
60
|
+
@neo.create_node_index(index_name)
|
61
|
+
batch_result = @neo.batch [:create_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
|
62
|
+
batch_result.first["body"]["data"]["name"].should == "Max"
|
63
|
+
batch_result.first["body"]["data"]["age"].should == 31
|
64
|
+
new_node_id = batch_result.first["body"]["self"].split('/').last
|
65
|
+
batch_result = @neo.batch [:create_unique_node, index_name, key, value, {"age" => 31, "name" => "Max"}]
|
66
|
+
batch_result.first["body"]["self"].split('/').last.should == new_node_id
|
67
|
+
batch_result.first["body"]["data"]["name"].should == "Max"
|
68
|
+
batch_result.first["body"]["data"]["age"].should == 31
|
69
|
+
|
70
|
+
#Sanity Check
|
71
|
+
existing_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
|
72
|
+
existing_node["self"].split('/').last.should == new_node_id
|
73
|
+
existing_node["data"]["name"].should == "Max"
|
74
|
+
existing_node["data"]["age"].should == 31
|
75
|
+
end
|
56
76
|
|
57
77
|
it "can update a property of a node" do
|
58
78
|
new_node = @neo.create_node("name" => "Max")
|
@@ -124,6 +144,19 @@ describe Neography::Rest do
|
|
124
144
|
batch_result.first["body"]["end"].split('/').last.should == node2["self"].split('/').last
|
125
145
|
end
|
126
146
|
|
147
|
+
it "can create a unique relationship" do
|
148
|
+
index_name = generate_text(6)
|
149
|
+
key = generate_text(6)
|
150
|
+
value = generate_text
|
151
|
+
@neo.create_relationship_index(index_name)
|
152
|
+
node1 = @neo.create_node
|
153
|
+
node2 = @neo.create_node
|
154
|
+
batch_result = @neo.batch [:create_unique_relationship, index_name, key, value, "friends", node1, node2]
|
155
|
+
batch_result.first["body"]["type"].should == "friends"
|
156
|
+
batch_result.first["body"]["start"].split('/').last.should == node1["self"].split('/').last
|
157
|
+
batch_result.first["body"]["end"].split('/').last.should == node2["self"].split('/').last
|
158
|
+
end
|
159
|
+
|
127
160
|
it "can update a single relationship" do
|
128
161
|
node1 = @neo.create_node
|
129
162
|
node2 = @neo.create_node
|
@@ -139,21 +172,72 @@ describe Neography::Rest do
|
|
139
172
|
existing_relationship["self"].should == new_relationship["self"]
|
140
173
|
end
|
141
174
|
|
175
|
+
it "can reset the properties of a relationship" do
|
176
|
+
node1 = @neo.create_node
|
177
|
+
node2 = @neo.create_node
|
178
|
+
new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
|
179
|
+
batch_result = @neo.batch [:reset_relationship_properties, new_relationship, {"since" => "college", "dated" => "yes"}]
|
180
|
+
batch_result.first.should have_key("id")
|
181
|
+
batch_result.first.should have_key("from")
|
182
|
+
existing_relationship = @neo.get_relationship(batch_result.first["from"].split('/')[2])
|
183
|
+
existing_relationship["type"].should == "friends"
|
184
|
+
existing_relationship["data"]["since"].should == "college"
|
185
|
+
existing_relationship["data"]["dated"].should == "yes"
|
186
|
+
existing_relationship["start"].split('/').last.should == node1["self"].split('/').last
|
187
|
+
existing_relationship["end"].split('/').last.should == node2["self"].split('/').last
|
188
|
+
existing_relationship["self"].should == new_relationship["self"]
|
189
|
+
end
|
190
|
+
|
142
191
|
it "can add a node to an index" do
|
192
|
+
index_name = generate_text(6)
|
143
193
|
new_node = @neo.create_node
|
144
194
|
key = generate_text(6)
|
145
195
|
value = generate_text
|
146
|
-
new_index = @neo.get_node_index(
|
147
|
-
batch_result = @neo.batch [:add_node_to_index,
|
196
|
+
new_index = @neo.get_node_index(index_name, key, value)
|
197
|
+
batch_result = @neo.batch [:add_node_to_index, index_name, key, value, new_node]
|
148
198
|
batch_result.first.should have_key("id")
|
149
199
|
batch_result.first.should have_key("from")
|
150
|
-
existing_index = @neo.find_node_index(
|
200
|
+
existing_index = @neo.find_node_index(index_name, key, value)
|
151
201
|
existing_index.should_not be_nil
|
152
202
|
existing_index.first["self"].should == new_node["self"]
|
153
|
-
@neo.remove_node_from_index(
|
203
|
+
@neo.remove_node_from_index(index_name, key, value, new_node)
|
154
204
|
end
|
155
205
|
end
|
156
206
|
|
207
|
+
it "can get a node index" do
|
208
|
+
index_name = generate_text(6)
|
209
|
+
key = generate_text(6)
|
210
|
+
value = generate_text
|
211
|
+
@neo.create_node_index(index_name)
|
212
|
+
new_node = @neo.create_node
|
213
|
+
@neo.add_node_to_index(index_name, key, value, new_node)
|
214
|
+
batch_result = @neo.batch [:get_node_index, index_name, key, value]
|
215
|
+
batch_result.first.should have_key("id")
|
216
|
+
batch_result.first.should have_key("from")
|
217
|
+
batch_result.first["body"].first["self"].should == new_node["self"]
|
218
|
+
@neo.remove_node_from_index(index_name, key, value, new_node)
|
219
|
+
end
|
220
|
+
|
221
|
+
it "can get a relationship index" do
|
222
|
+
index_name = generate_text(6)
|
223
|
+
key = generate_text(6)
|
224
|
+
value = generate_text
|
225
|
+
@neo.create_relationship_index(index_name)
|
226
|
+
node1 = @neo.create_node
|
227
|
+
node2 = @neo.create_node
|
228
|
+
new_relationship = @neo.create_relationship("friends", node1, node2, {:since => "high school"})
|
229
|
+
@neo.add_relationship_to_index(index_name, key, value, new_relationship)
|
230
|
+
batch_result = @neo.batch [:get_relationship_index, index_name, key, value]
|
231
|
+
batch_result.first.should have_key("id")
|
232
|
+
batch_result.first.should have_key("from")
|
233
|
+
batch_result.first["body"].first["type"].should == "friends"
|
234
|
+
batch_result.first["body"].first["start"].split('/').last.should == node1["self"].split('/').last
|
235
|
+
batch_result.first["body"].first["end"].split('/').last.should == node2["self"].split('/').last
|
236
|
+
end
|
237
|
+
|
238
|
+
|
239
|
+
|
240
|
+
|
157
241
|
describe "referenced batch" do
|
158
242
|
it "can create a relationship from two newly created nodes" do
|
159
243
|
batch_result = @neo.batch [:create_node, {"name" => "Max"}], [:create_node, {"name" => "Marc"}], [:create_relationship, "friends", "{0}", "{1}", {:since => "high school"}]
|
@@ -45,6 +45,11 @@ describe Neography::Rest do
|
|
45
45
|
new_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
|
46
46
|
new_node["data"]["name"].should == "Max"
|
47
47
|
new_node["data"]["age"].should == 31
|
48
|
+
new_node_id = new_node["self"].split('/').last
|
49
|
+
existing_node = @neo.create_unique_node(index_name, key, value, {"age" => 31, "name" => "Max"})
|
50
|
+
existing_node["self"].split('/').last.should == new_node_id
|
51
|
+
existing_node["data"]["name"].should == "Max"
|
52
|
+
existing_node["data"]["age"].should == 31
|
48
53
|
end
|
49
54
|
|
50
55
|
end
|
metadata
CHANGED
@@ -1,135 +1,100 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: neography
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.23
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 0
|
9
|
-
- 22
|
10
|
-
version: 0.0.22
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Max De Marzi
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
- !ruby/object:Gem::Dependency
|
12
|
+
date: 2012-03-06 00:00:00.000000000Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
21
15
|
name: rspec
|
22
|
-
|
23
|
-
requirement: &id001 !ruby/object:Gem::Requirement
|
16
|
+
requirement: &85677290 !ruby/object:Gem::Requirement
|
24
17
|
none: false
|
25
|
-
requirements:
|
26
|
-
- -
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
|
29
|
-
segments:
|
30
|
-
- 0
|
31
|
-
version: "0"
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
32
22
|
type: :development
|
33
|
-
version_requirements: *id001
|
34
|
-
- !ruby/object:Gem::Dependency
|
35
|
-
name: net-http-spy
|
36
23
|
prerelease: false
|
37
|
-
|
24
|
+
version_requirements: *85677290
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: net-http-spy
|
27
|
+
requirement: &85677040 !ruby/object:Gem::Requirement
|
38
28
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
hash: 21
|
43
|
-
segments:
|
44
|
-
- 0
|
45
|
-
- 2
|
46
|
-
- 1
|
29
|
+
requirements:
|
30
|
+
- - =
|
31
|
+
- !ruby/object:Gem::Version
|
47
32
|
version: 0.2.1
|
48
33
|
type: :development
|
49
|
-
version_requirements: *id002
|
50
|
-
- !ruby/object:Gem::Dependency
|
51
|
-
name: rake
|
52
34
|
prerelease: false
|
53
|
-
|
35
|
+
version_requirements: *85677040
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rake
|
38
|
+
requirement: &85676790 !ruby/object:Gem::Requirement
|
54
39
|
none: false
|
55
|
-
requirements:
|
56
|
-
- -
|
57
|
-
- !ruby/object:Gem::Version
|
58
|
-
hash: 49
|
59
|
-
segments:
|
60
|
-
- 0
|
61
|
-
- 8
|
62
|
-
- 7
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
63
43
|
version: 0.8.7
|
64
44
|
type: :runtime
|
65
|
-
version_requirements: *id003
|
66
|
-
- !ruby/object:Gem::Dependency
|
67
|
-
name: httparty
|
68
45
|
prerelease: false
|
69
|
-
|
46
|
+
version_requirements: *85676790
|
47
|
+
- !ruby/object:Gem::Dependency
|
48
|
+
name: httparty
|
49
|
+
requirement: &85676560 !ruby/object:Gem::Requirement
|
70
50
|
none: false
|
71
|
-
requirements:
|
51
|
+
requirements:
|
72
52
|
- - ~>
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
hash: 19
|
75
|
-
segments:
|
76
|
-
- 0
|
77
|
-
- 7
|
78
|
-
- 8
|
53
|
+
- !ruby/object:Gem::Version
|
79
54
|
version: 0.7.8
|
80
55
|
type: :runtime
|
81
|
-
version_requirements: *id004
|
82
|
-
- !ruby/object:Gem::Dependency
|
83
|
-
name: json
|
84
56
|
prerelease: false
|
85
|
-
|
57
|
+
version_requirements: *85676560
|
58
|
+
- !ruby/object:Gem::Dependency
|
59
|
+
name: json
|
60
|
+
requirement: &85738040 !ruby/object:Gem::Requirement
|
86
61
|
none: false
|
87
|
-
requirements:
|
88
|
-
- -
|
89
|
-
- !ruby/object:Gem::Version
|
90
|
-
|
91
|
-
segments:
|
92
|
-
- 0
|
93
|
-
version: "0"
|
62
|
+
requirements:
|
63
|
+
- - ! '>='
|
64
|
+
- !ruby/object:Gem::Version
|
65
|
+
version: '0'
|
94
66
|
type: :runtime
|
95
|
-
version_requirements: *id005
|
96
|
-
- !ruby/object:Gem::Dependency
|
97
|
-
name: os
|
98
67
|
prerelease: false
|
99
|
-
|
68
|
+
version_requirements: *85738040
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: os
|
71
|
+
requirement: &85737810 !ruby/object:Gem::Requirement
|
100
72
|
none: false
|
101
|
-
requirements:
|
102
|
-
- -
|
103
|
-
- !ruby/object:Gem::Version
|
104
|
-
|
105
|
-
segments:
|
106
|
-
- 0
|
107
|
-
version: "0"
|
73
|
+
requirements:
|
74
|
+
- - ! '>='
|
75
|
+
- !ruby/object:Gem::Version
|
76
|
+
version: '0'
|
108
77
|
type: :runtime
|
109
|
-
version_requirements: *id006
|
110
|
-
- !ruby/object:Gem::Dependency
|
111
|
-
name: rubyzip
|
112
78
|
prerelease: false
|
113
|
-
|
79
|
+
version_requirements: *85737810
|
80
|
+
- !ruby/object:Gem::Dependency
|
81
|
+
name: rubyzip
|
82
|
+
requirement: &85737600 !ruby/object:Gem::Requirement
|
114
83
|
none: false
|
115
|
-
requirements:
|
116
|
-
- -
|
117
|
-
- !ruby/object:Gem::Version
|
118
|
-
|
119
|
-
segments:
|
120
|
-
- 0
|
121
|
-
version: "0"
|
84
|
+
requirements:
|
85
|
+
- - ! '>='
|
86
|
+
- !ruby/object:Gem::Version
|
87
|
+
version: '0'
|
122
88
|
type: :runtime
|
123
|
-
|
124
|
-
|
89
|
+
prerelease: false
|
90
|
+
version_requirements: *85737600
|
91
|
+
description: A Ruby wrapper to the Neo4j Rest API see http://components.neo4j.org/neo4j-rest/
|
92
|
+
for more details.
|
125
93
|
email: maxdemarzi@gmail.com
|
126
94
|
executables: []
|
127
|
-
|
128
95
|
extensions: []
|
129
|
-
|
130
96
|
extra_rdoc_files: []
|
131
|
-
|
132
|
-
files:
|
97
|
+
files:
|
133
98
|
- .gitignore
|
134
99
|
- .project
|
135
100
|
- .travis.yml
|
@@ -185,36 +150,26 @@ files:
|
|
185
150
|
- spec/spec_helper.rb
|
186
151
|
homepage: http://rubygems.org/gems/neography
|
187
152
|
licenses: []
|
188
|
-
|
189
153
|
post_install_message:
|
190
154
|
rdoc_options: []
|
191
|
-
|
192
|
-
require_paths:
|
155
|
+
require_paths:
|
193
156
|
- lib
|
194
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
157
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
195
158
|
none: false
|
196
|
-
requirements:
|
197
|
-
- -
|
198
|
-
- !ruby/object:Gem::Version
|
199
|
-
|
200
|
-
|
201
|
-
- 0
|
202
|
-
version: "0"
|
203
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
159
|
+
requirements:
|
160
|
+
- - ! '>='
|
161
|
+
- !ruby/object:Gem::Version
|
162
|
+
version: '0'
|
163
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
204
164
|
none: false
|
205
|
-
requirements:
|
206
|
-
- -
|
207
|
-
- !ruby/object:Gem::Version
|
208
|
-
|
209
|
-
segments:
|
210
|
-
- 0
|
211
|
-
version: "0"
|
165
|
+
requirements:
|
166
|
+
- - ! '>='
|
167
|
+
- !ruby/object:Gem::Version
|
168
|
+
version: '0'
|
212
169
|
requirements: []
|
213
|
-
|
214
170
|
rubyforge_project: neography
|
215
|
-
rubygems_version: 1.8.
|
171
|
+
rubygems_version: 1.8.10
|
216
172
|
signing_key:
|
217
173
|
specification_version: 3
|
218
174
|
summary: ruby wrapper to Neo4j Rest API
|
219
175
|
test_files: []
|
220
|
-
|