neography 0.0.11 → 0.0.12
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/Gemfile.lock +3 -1
- data/README.rdoc +10 -4
- data/Rakefile +9 -0
- data/lib/neography/rest.rb +29 -8
- data/lib/neography/version.rb +1 -1
- data/neography.gemspec +1 -0
- data/spec/integration/authorization_spec.rb +5 -5
- data/spec/integration/rest_bulk_spec.rb +3 -3
- data/spec/integration/rest_experimental_spec.rb +1 -2
- data/spec/integration/rest_index_spec.rb +88 -1
- data/spec/spec_helper.rb +5 -1
- metadata +24 -8
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
neography (0.0.
|
4
|
+
neography (0.0.11)
|
5
5
|
httparty (~> 0.7.3)
|
6
6
|
json
|
7
7
|
|
@@ -16,6 +16,7 @@ GEM
|
|
16
16
|
json (1.4.6)
|
17
17
|
json (1.4.6-java)
|
18
18
|
net-http-spy (0.2.1)
|
19
|
+
rake (0.8.7)
|
19
20
|
rspec (2.0.1)
|
20
21
|
rspec-core (~> 2.0.1)
|
21
22
|
rspec-expectations (~> 2.0.1)
|
@@ -37,4 +38,5 @@ DEPENDENCIES
|
|
37
38
|
json
|
38
39
|
neography!
|
39
40
|
net-http-spy (~> 0.2.1)
|
41
|
+
rake (~> 0.8.7)
|
40
42
|
rspec (~> 2.0.0.beta.22)
|
data/README.rdoc
CHANGED
@@ -19,7 +19,7 @@ in order to access the functionality.
|
|
19
19
|
|
20
20
|
=== Try it now!
|
21
21
|
|
22
|
-
I am hosting an instance of Neo4j (1.
|
22
|
+
I am hosting an instance of Neo4j (1.3M04) at neography.org for you to try out.
|
23
23
|
|
24
24
|
You can see the administration at: {Neo4j Web Admin}[http://neography.org]
|
25
25
|
|
@@ -99,12 +99,18 @@ To Use:
|
|
99
99
|
@neo.create_node_index(name, type, provider) # creates an index, defaults are "exact" and "lucene"
|
100
100
|
@neo.add_node_to_index(index, key, value, node1) # adds a node to the index with the given key/value pair
|
101
101
|
@neo.remove_node_from_index(index, key, value, node1) # removes a node from the index with the given key/value pair
|
102
|
-
@neo.
|
102
|
+
@neo.remove_node_from_index(index, key, node1) # removes a node from the index with the given key
|
103
|
+
@neo.remove_node_from_index(index, node1) # removes a node from the index
|
104
|
+
@neo.get_node_index(index, key, value) # exact query of the node index with the given key/value pair
|
105
|
+
@neo.find_node_index(index, key, value) # advanced query of the node index with the given key/value pair
|
103
106
|
@neo.list_relationship_indexes # gives names and query templates for relationship indices
|
104
|
-
@neo.
|
107
|
+
@neo.create_relationship_index(name, "fulltext", provider) # creates a relationship index with "fulltext" option
|
105
108
|
@neo.add_relationship_to_index(index, key, value, rel1) # adds a relationship to the index with the given key/value pair
|
106
109
|
@neo.remove_relationship_from_index(index, key, value, rel1) # removes a relationship from the index with the given key/value pair
|
107
|
-
@neo.
|
110
|
+
@neo.remove_relationship_from_index(index, key, rel1) # removes a relationship from the index with the given key
|
111
|
+
@neo.remove_relationship_from_index(index, rel1) # removes a relationship from the index
|
112
|
+
@neo.get_relationship_index(index, key, value) # exact query of the relationship index with the given key/value pair
|
113
|
+
@neo.find_relationship_index(index, key, value) # advanced query of the relationship index with the given key/value pair
|
108
114
|
|
109
115
|
|
110
116
|
@neo.get_path(node1, node2, relationships, depth=4, algorithm="shortestPath") # finds the shortest path between two nodes
|
data/Rakefile
CHANGED
data/lib/neography/rest.rb
CHANGED
@@ -248,8 +248,12 @@ module Neography
|
|
248
248
|
post("/index/node/#{index}/#{key}/#{value}", options)
|
249
249
|
end
|
250
250
|
|
251
|
-
def remove_node_from_index(
|
252
|
-
|
251
|
+
def remove_node_from_index(*args)
|
252
|
+
case args.size
|
253
|
+
when 4 then delete("/index/node/#{args[0]}/#{args[1]}/#{args[2]}/#{get_id(args[3])}")
|
254
|
+
when 3 then delete("/index/node/#{args[0]}/#{args[1]}/#{get_id(args[2])}")
|
255
|
+
when 2 then delete("/index/node/#{args[0]}/#{get_id(args[1])}")
|
256
|
+
end
|
253
257
|
end
|
254
258
|
|
255
259
|
def get_node_index(index, key, value)
|
@@ -258,6 +262,12 @@ module Neography
|
|
258
262
|
index
|
259
263
|
end
|
260
264
|
|
265
|
+
def find_node_index(index, key, value)
|
266
|
+
index = get("/index/node/#{index}/#{key}?query=#{value}") || Array.new
|
267
|
+
return nil if index.empty?
|
268
|
+
index
|
269
|
+
end
|
270
|
+
|
261
271
|
alias_method :list_indexes, :list_node_indexes
|
262
272
|
alias_method :add_to_index, :add_node_to_index
|
263
273
|
alias_method :remove_from_index, :remove_node_from_index
|
@@ -277,8 +287,12 @@ module Neography
|
|
277
287
|
post("/index/relationship/#{index}/#{key}/#{value}", options)
|
278
288
|
end
|
279
289
|
|
280
|
-
def remove_relationship_from_index(
|
281
|
-
|
290
|
+
def remove_relationship_from_index(*args)
|
291
|
+
case args.size
|
292
|
+
when 4 then delete("/index/relationship/#{args[0]}/#{args[1]}/#{args[2]}/#{get_id(args[3])}")
|
293
|
+
when 3 then delete("/index/relationship/#{args[0]}/#{args[1]}/#{get_id(args[2])}")
|
294
|
+
when 2 then delete("/index/relationship/#{args[0]}/#{get_id(args[1])}")
|
295
|
+
end
|
282
296
|
end
|
283
297
|
|
284
298
|
def get_relationship_index(index, key, value)
|
@@ -286,6 +300,13 @@ module Neography
|
|
286
300
|
return nil if index.empty?
|
287
301
|
index
|
288
302
|
end
|
303
|
+
|
304
|
+
def find_relationship_index(index, key, value)
|
305
|
+
index = get("/index/relationship/#{index}/#{key}?query=#{value}") || Array.new
|
306
|
+
return nil if index.empty?
|
307
|
+
index
|
308
|
+
end
|
309
|
+
|
289
310
|
def traverse(id, return_type, description)
|
290
311
|
options = { :body => {"order" => get_order(description["order"]),
|
291
312
|
"uniqueness" => get_uniqueness(description["uniqueness"]),
|
@@ -335,19 +356,19 @@ module Neography
|
|
335
356
|
end
|
336
357
|
|
337
358
|
def get(path,options={})
|
338
|
-
evaluate_response(HTTParty.get(configuration + path, options.merge!(@authentication)))
|
359
|
+
evaluate_response(HTTParty.get(configuration + URI.encode(path), options.merge!(@authentication)))
|
339
360
|
end
|
340
361
|
|
341
362
|
def post(path,options={})
|
342
|
-
evaluate_response(HTTParty.post(configuration + path, options.merge!(@authentication)))
|
363
|
+
evaluate_response(HTTParty.post(configuration + URI.encode(path), options.merge!(@authentication)))
|
343
364
|
end
|
344
365
|
|
345
366
|
def put(path,options={})
|
346
|
-
evaluate_response(HTTParty.put(configuration + path, options.merge!(@authentication)))
|
367
|
+
evaluate_response(HTTParty.put(configuration + URI.encode(path), options.merge!(@authentication)))
|
347
368
|
end
|
348
369
|
|
349
370
|
def delete(path,options={})
|
350
|
-
evaluate_response(HTTParty.delete(configuration + path, options.merge!(@authentication)))
|
371
|
+
evaluate_response(HTTParty.delete(configuration + URI.encode(path), options.merge!(@authentication)))
|
351
372
|
end
|
352
373
|
|
353
374
|
def get_id(id)
|
data/lib/neography/version.rb
CHANGED
data/neography.gemspec
CHANGED
@@ -22,6 +22,7 @@ Gem::Specification.new do |s|
|
|
22
22
|
s.add_development_dependency "rspec", "~> 2.0.0.beta.22"
|
23
23
|
s.add_development_dependency "net-http-spy", "~> 0.2.1"
|
24
24
|
s.add_development_dependency "fakeweb", "~> 1.3.0"
|
25
|
+
s.add_development_dependency "rake", "~> 0.8.7"
|
25
26
|
s.add_dependency "httparty", "~> 0.7.3"
|
26
27
|
s.add_dependency "json"
|
27
28
|
end
|
@@ -1,9 +1,9 @@
|
|
1
1
|
require File.join(File.dirname(__FILE__), '..', 'spec_helper')
|
2
2
|
|
3
|
-
describe Neography::Rest do
|
4
|
-
describe "basic authentication"
|
3
|
+
describe Neography::Rest, :slow => true do
|
4
|
+
describe "basic authentication" do
|
5
5
|
describe "get_root" do
|
6
|
-
it "can get the root node"
|
6
|
+
it "can get the root node"do
|
7
7
|
@neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'basic', :username => "abbe3c012", :password => "34d7b22eb"})
|
8
8
|
root_node = @neo.get_root
|
9
9
|
root_node.should have_key("reference_node")
|
@@ -18,7 +18,7 @@ describe Neography::Rest do
|
|
18
18
|
end
|
19
19
|
end
|
20
20
|
|
21
|
-
describe "quick
|
21
|
+
describe "quick initializer" do
|
22
22
|
it "can get the root node" do
|
23
23
|
@neo = Neography::Rest.new("http://abbe3c012:34d7b22eb@4c36b641.neo4j.atns.de:7474/9dc1fda5be8b5cde29621e21cae5adece3de0f37")
|
24
24
|
root_node = @neo.get_root
|
@@ -27,7 +27,7 @@ describe Neography::Rest do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
describe "digest authentication"
|
30
|
+
describe "digest authentication" do
|
31
31
|
describe "get_root" do
|
32
32
|
it "can get the root node" do
|
33
33
|
@neo = Neography::Rest.new({:server => '4c36b641.neo4j.atns.de', :port => 7474, :directory => '/9dc1fda5be8b5cde29621e21cae5adece3de0f37', :authentication => 'digest', :username => "abbe3c012", :password => "34d7b22eb"})
|
@@ -12,7 +12,7 @@ describe Neography::Rest do
|
|
12
12
|
new_nodes.size.should == 2
|
13
13
|
end
|
14
14
|
|
15
|
-
it "is faster than non-threaded?" do
|
15
|
+
it "is faster than non-threaded?" , :slow => true do
|
16
16
|
Benchmark.bm do |x|
|
17
17
|
x.report("create 500 nodes ") { @not_threaded = @neo.create_nodes(500) }
|
18
18
|
x.report("create 500 nodes threaded") { @threaded = @neo.create_nodes_threaded(500) }
|
@@ -61,7 +61,7 @@ describe Neography::Rest do
|
|
61
61
|
new_nodes[1]["data"]["weight"].should == 215
|
62
62
|
end
|
63
63
|
|
64
|
-
it "is not super slow?" do
|
64
|
+
it "is not super slow?" , :slow => true do
|
65
65
|
Benchmark.bm do |x|
|
66
66
|
x.report( "create 1 node" ) { @neo.create_nodes( 1) }
|
67
67
|
x.report( "create 10 nodes") { @neo.create_nodes( 10) }
|
@@ -89,7 +89,7 @@ describe Neography::Rest do
|
|
89
89
|
existing_nodes[1]["self"] == new_node2["self"]
|
90
90
|
end
|
91
91
|
|
92
|
-
it "is not super slow?" do
|
92
|
+
it "is not super slow?" , :slow => true do
|
93
93
|
one_node = @neo.create_nodes( 1)
|
94
94
|
ten_nodes = @neo.create_nodes( 10)
|
95
95
|
one_hundred_nodes = @neo.create_nodes(100)
|
@@ -6,11 +6,10 @@ describe Neography::Rest do
|
|
6
6
|
end
|
7
7
|
|
8
8
|
|
9
|
-
describe "get_nodes" do
|
9
|
+
describe "get_nodes", :slow => true do
|
10
10
|
it "can get nodes that exists" do
|
11
11
|
existing_nodes = @neo.get_nodes
|
12
12
|
existing_nodes.should_not be_nil
|
13
|
-
puts existing_nodes.inspect
|
14
13
|
end
|
15
14
|
|
16
15
|
it "can get all nodes that exists the ugly way" do
|
@@ -102,7 +102,31 @@ describe Neography::Rest do
|
|
102
102
|
new_index.should be_nil
|
103
103
|
end
|
104
104
|
|
105
|
-
it "can remove a
|
105
|
+
it "can remove a node from an index without supplying value" do
|
106
|
+
new_node = @neo.create_node
|
107
|
+
key = generate_text(6)
|
108
|
+
value = generate_text
|
109
|
+
@neo.add_node_to_index("test_index", key, value, new_node)
|
110
|
+
new_index = @neo.get_node_index("test_index", key, value)
|
111
|
+
new_index.should_not be_nil
|
112
|
+
@neo.remove_node_from_index("test_index", key, new_node)
|
113
|
+
new_index = @neo.get_node_index("test_index", key, value)
|
114
|
+
new_index.should be_nil
|
115
|
+
end
|
116
|
+
|
117
|
+
it "can remove a node from an index without supplying key nor value" do
|
118
|
+
new_node = @neo.create_node
|
119
|
+
key = generate_text(6)
|
120
|
+
value = generate_text
|
121
|
+
@neo.add_node_to_index("test_index", key, value, new_node)
|
122
|
+
new_index = @neo.get_node_index("test_index", key, value)
|
123
|
+
new_index.should_not be_nil
|
124
|
+
@neo.remove_node_from_index("test_index", new_node)
|
125
|
+
new_index = @neo.get_node_index("test_index", key, value)
|
126
|
+
new_index.should be_nil
|
127
|
+
end
|
128
|
+
|
129
|
+
it "can remove a relationship from an index" do
|
106
130
|
new_node1 = @neo.create_node
|
107
131
|
new_node2 = @neo.create_node
|
108
132
|
new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
|
@@ -115,6 +139,34 @@ describe Neography::Rest do
|
|
115
139
|
new_index = @neo.get_relationship_index("test_index", key, value)
|
116
140
|
new_index.should be_nil
|
117
141
|
end
|
142
|
+
|
143
|
+
it "can remove a relationship from an index without supplying value" do
|
144
|
+
new_node1 = @neo.create_node
|
145
|
+
new_node2 = @neo.create_node
|
146
|
+
new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
|
147
|
+
key = generate_text(6)
|
148
|
+
value = generate_text
|
149
|
+
@neo.add_relationship_to_index("test_index", key, value, new_relationship)
|
150
|
+
new_index = @neo.get_relationship_index("test_index", key, value)
|
151
|
+
new_index.should_not be_nil
|
152
|
+
@neo.remove_relationship_from_index("test_index", key, new_relationship)
|
153
|
+
new_index = @neo.get_relationship_index("test_index", key, value)
|
154
|
+
new_index.should be_nil
|
155
|
+
end
|
156
|
+
|
157
|
+
it "can remove a relationship from an index without supplying key nor value" do
|
158
|
+
new_node1 = @neo.create_node
|
159
|
+
new_node2 = @neo.create_node
|
160
|
+
new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
|
161
|
+
key = generate_text(6)
|
162
|
+
value = generate_text
|
163
|
+
@neo.add_relationship_to_index("test_index", key, value, new_relationship)
|
164
|
+
new_index = @neo.get_relationship_index("test_index", key, value)
|
165
|
+
new_index.should_not be_nil
|
166
|
+
@neo.remove_relationship_from_index("test_index", new_relationship)
|
167
|
+
new_index = @neo.get_relationship_index("test_index", key, value)
|
168
|
+
new_index.should be_nil
|
169
|
+
end
|
118
170
|
end
|
119
171
|
|
120
172
|
describe "get index" do
|
@@ -152,6 +204,16 @@ describe Neography::Rest do
|
|
152
204
|
@neo.remove_node_from_index("test_index", key, value, new_node)
|
153
205
|
end
|
154
206
|
|
207
|
+
it "can find a node index" do
|
208
|
+
new_node = @neo.create_node
|
209
|
+
key = generate_text(6)
|
210
|
+
value = generate_text
|
211
|
+
@neo.add_node_to_index("test_index", key, value, new_node)
|
212
|
+
new_index = @neo.find_node_index("test_index", key, value)
|
213
|
+
new_index.first["self"].should == new_node["self"]
|
214
|
+
@neo.remove_node_from_index("test_index", key, value, new_node)
|
215
|
+
end
|
216
|
+
|
155
217
|
it "can get a relationship index" do
|
156
218
|
new_node1 = @neo.create_node
|
157
219
|
new_node2 = @neo.create_node
|
@@ -163,6 +225,31 @@ describe Neography::Rest do
|
|
163
225
|
new_index.first["self"].should == new_relationship["self"]
|
164
226
|
@neo.remove_relationship_from_index("test_index", key, value, new_relationship)
|
165
227
|
end
|
228
|
+
|
229
|
+
it "can get a relationship index with empty spaces" do
|
230
|
+
new_node1 = @neo.create_node
|
231
|
+
new_node2 = @neo.create_node
|
232
|
+
new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
|
233
|
+
key = generate_text(6)
|
234
|
+
value = generate_text + " " + generate_text
|
235
|
+
@neo.add_relationship_to_index("test_index", key, value, new_relationship)
|
236
|
+
new_index = @neo.get_relationship_index("test_index", key, value)
|
237
|
+
new_index.first["self"].should == new_relationship["self"]
|
238
|
+
@neo.remove_relationship_from_index("test_index", key, value, new_relationship)
|
239
|
+
end
|
240
|
+
|
241
|
+
it "can find a relationship index" do
|
242
|
+
new_node1 = @neo.create_node
|
243
|
+
new_node2 = @neo.create_node
|
244
|
+
new_relationship = @neo.create_relationship("friends", new_node1, new_node2)
|
245
|
+
key = generate_text(6)
|
246
|
+
value = generate_text
|
247
|
+
@neo.add_relationship_to_index("test_index", key, value, new_relationship)
|
248
|
+
new_index = @neo.find_relationship_index("test_index", key, value)
|
249
|
+
new_index.first["self"].should == new_relationship["self"]
|
250
|
+
@neo.remove_relationship_from_index("test_index", key, value, new_relationship)
|
251
|
+
end
|
252
|
+
|
166
253
|
end
|
167
254
|
|
168
255
|
|
data/spec/spec_helper.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
require 'neography'
|
2
|
-
require '
|
2
|
+
require 'fake_web'
|
3
3
|
require 'benchmark'
|
4
4
|
|
5
5
|
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each {|f| require f}
|
@@ -22,4 +22,8 @@ def generate_text(length=8)
|
|
22
22
|
key = ''
|
23
23
|
length.times { |i| key << chars[rand(chars.length)] }
|
24
24
|
key
|
25
|
+
end
|
26
|
+
|
27
|
+
RSpec.configure do |c|
|
28
|
+
c.filter_run_excluding :slow => true
|
25
29
|
end
|
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: 7
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 12
|
10
|
+
version: 0.0.12
|
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: 2011-
|
18
|
+
date: 2011-03-11 00:00:00 -08:00
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|
@@ -69,9 +69,25 @@ dependencies:
|
|
69
69
|
type: :development
|
70
70
|
version_requirements: *id003
|
71
71
|
- !ruby/object:Gem::Dependency
|
72
|
-
name:
|
72
|
+
name: rake
|
73
73
|
prerelease: false
|
74
74
|
requirement: &id004 !ruby/object:Gem::Requirement
|
75
|
+
none: false
|
76
|
+
requirements:
|
77
|
+
- - ~>
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
hash: 49
|
80
|
+
segments:
|
81
|
+
- 0
|
82
|
+
- 8
|
83
|
+
- 7
|
84
|
+
version: 0.8.7
|
85
|
+
type: :development
|
86
|
+
version_requirements: *id004
|
87
|
+
- !ruby/object:Gem::Dependency
|
88
|
+
name: httparty
|
89
|
+
prerelease: false
|
90
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
75
91
|
none: false
|
76
92
|
requirements:
|
77
93
|
- - ~>
|
@@ -83,11 +99,11 @@ dependencies:
|
|
83
99
|
- 3
|
84
100
|
version: 0.7.3
|
85
101
|
type: :runtime
|
86
|
-
version_requirements: *
|
102
|
+
version_requirements: *id005
|
87
103
|
- !ruby/object:Gem::Dependency
|
88
104
|
name: json
|
89
105
|
prerelease: false
|
90
|
-
requirement: &
|
106
|
+
requirement: &id006 !ruby/object:Gem::Requirement
|
91
107
|
none: false
|
92
108
|
requirements:
|
93
109
|
- - ">="
|
@@ -97,7 +113,7 @@ dependencies:
|
|
97
113
|
- 0
|
98
114
|
version: "0"
|
99
115
|
type: :runtime
|
100
|
-
version_requirements: *
|
116
|
+
version_requirements: *id006
|
101
117
|
description: A Ruby wrapper to the Neo4j Rest API see http://components.neo4j.org/neo4j-rest/ for more details.
|
102
118
|
email: maxdemarzi@gmail.com
|
103
119
|
executables: []
|