neography 1.3.4 → 1.3.5
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.
- checksums.yaml +4 -4
- data/lib/neography/config.rb +4 -2
- data/lib/neography/connection.rb +19 -13
- data/lib/neography/errors.rb +4 -2
- data/lib/neography/version.rb +1 -1
- data/neography.gemspec +8 -3
- data/spec/integration/index_spec.rb +3 -2
- data/spec/integration/rest_batch_spec.rb +15 -1
- data/spec/integration/rest_header_spec.rb +1 -1
- data/spec/integration/rest_index_spec.rb +5 -5
- data/spec/unit/config_spec.rb +3 -1
- data/spec/unit/connection_spec.rb +4 -4
- metadata +19 -33
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8cb990bec3b2c9e7a9134d22360940ddd1e7f839
|
4
|
+
data.tar.gz: 39b4c012fbc1cb3281681c101987a3a0ec8a6f7f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 837ea1e306b28344ac8474ae5624476191bd4506f53aa9c6ea2375b91d2e13119a4ae2986af0d2edc472abc765e85b5e316cfc37604292ad51f75c62ac699846
|
7
|
+
data.tar.gz: baa0fda9441fc33e46b0123b4ba3f34350dcfbf138755fef003c03fca980932f7a04fb89b88d27337b5c158062b52b0188336013a189320f13ab0d9a353cd880
|
data/lib/neography/config.rb
CHANGED
@@ -6,7 +6,7 @@ module Neography
|
|
6
6
|
:log_file, :log_enabled, :slow_log_threshold,
|
7
7
|
:max_threads,
|
8
8
|
:authentication, :username, :password,
|
9
|
-
:parser
|
9
|
+
:parser, :max_execution_time
|
10
10
|
|
11
11
|
def initialize
|
12
12
|
set_defaults
|
@@ -27,7 +27,8 @@ module Neography
|
|
27
27
|
:authentication => @authentication,
|
28
28
|
:username => @username,
|
29
29
|
:password => @password,
|
30
|
-
:parser => @parser
|
30
|
+
:parser => @parser,
|
31
|
+
:max_execution_time => @max_execution_time
|
31
32
|
}
|
32
33
|
end
|
33
34
|
|
@@ -48,6 +49,7 @@ module Neography
|
|
48
49
|
@username = nil
|
49
50
|
@password = nil
|
50
51
|
@parser = MultiJsonParser
|
52
|
+
@max_execution_time = 6000
|
51
53
|
end
|
52
54
|
|
53
55
|
end
|
data/lib/neography/connection.rb
CHANGED
@@ -29,22 +29,24 @@ module Neography
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def configuration
|
32
|
-
@configuration ||= "#{@protocol}#{@server}:#{@port}#{@directory}
|
32
|
+
@configuration ||= "#{@protocol}#{@server}:#{@port}#{@directory}"
|
33
33
|
end
|
34
34
|
|
35
35
|
def merge_options(options)
|
36
36
|
merged_options = options.merge!(@authentication)
|
37
37
|
merged_options[:headers].merge!(@user_agent) if merged_options[:headers]
|
38
38
|
merged_options[:headers].merge!('X-Stream' => true) if merged_options[:headers]
|
39
|
+
merged_options[:headers].merge!(@max_execution_time) if merged_options[:headers]
|
39
40
|
merged_options
|
40
41
|
end
|
41
42
|
|
42
43
|
ACTIONS.each do |action|
|
43
|
-
define_method(action) do |path, options = {}|
|
44
|
-
|
44
|
+
define_method(action) do |path, options = {}|
|
45
|
+
base = path.start_with?("/unmanaged") ? "" : "/db/data"
|
46
|
+
query_path = configuration + base + path
|
45
47
|
query_body = merge_options(options)[:body]
|
46
48
|
log path, query_body do
|
47
|
-
evaluate_response(@client.send(action.to_sym, query_path, query_body, merge_options(options)[:headers]))
|
49
|
+
evaluate_response(@client.send(action.to_sym, query_path, query_body, merge_options(options)[:headers]), path, query_body)
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
@@ -88,6 +90,7 @@ module Neography
|
|
88
90
|
@max_threads = config[:max_threads]
|
89
91
|
@parser = config[:parser]
|
90
92
|
|
93
|
+
@max_execution_time = { 'max-execution-time' => config[:max_execution_time] }
|
91
94
|
@user_agent = { "User-Agent" => USER_AGENT }
|
92
95
|
|
93
96
|
@authentication = {}
|
@@ -110,7 +113,7 @@ module Neography
|
|
110
113
|
return_result(code, result)
|
111
114
|
end
|
112
115
|
|
113
|
-
def evaluate_response(response)
|
116
|
+
def evaluate_response(response, path, query_body)
|
114
117
|
if response.http_header.request_uri.request_uri == "/db/data/batch"
|
115
118
|
code, body, parsed = handle_batch(response)
|
116
119
|
else
|
@@ -118,7 +121,7 @@ module Neography
|
|
118
121
|
body = response.body.force_encoding("UTF-8")
|
119
122
|
parsed = false
|
120
123
|
end
|
121
|
-
return_result(response, code, body, parsed)
|
124
|
+
return_result(response, code, body, parsed, path, query_body)
|
122
125
|
end
|
123
126
|
|
124
127
|
def handle_batch(response)
|
@@ -133,7 +136,7 @@ module Neography
|
|
133
136
|
return code, body, true
|
134
137
|
end
|
135
138
|
|
136
|
-
def return_result(response, code, body, parsed)
|
139
|
+
def return_result(response, code, body, parsed, path, query_body)
|
137
140
|
case code
|
138
141
|
when 200
|
139
142
|
@logger.debug "OK, created #{body}" if @log_enabled
|
@@ -147,20 +150,23 @@ module Neography
|
|
147
150
|
@logger.debug "OK, no content returned" if @log_enabled
|
148
151
|
nil
|
149
152
|
when 400..500
|
150
|
-
handle_4xx_500_response(response, code, body)
|
153
|
+
handle_4xx_500_response(response, code, body, path, query_body)
|
151
154
|
nil
|
152
155
|
end
|
153
156
|
end
|
154
157
|
|
155
|
-
def handle_4xx_500_response(response, code, body)
|
158
|
+
def handle_4xx_500_response(response, code, body, path, query_body)
|
159
|
+
index = 0
|
160
|
+
request = {:path => path, :body => query_body}
|
156
161
|
if body.nil? or body == ""
|
157
162
|
parsed_body = {"message" => "No error message returned from server.",
|
158
163
|
"stacktrace" => "No stacktrace returned from server." }
|
159
164
|
elsif body.is_a? Hash
|
160
165
|
parsed_body = body
|
161
166
|
elsif body.is_a? Array
|
162
|
-
body.
|
167
|
+
body.each_with_index do |result, idx|
|
163
168
|
if result["status"] >= 400
|
169
|
+
index = idx
|
164
170
|
parsed_body = result["body"] || result
|
165
171
|
break
|
166
172
|
end
|
@@ -173,10 +179,10 @@ module Neography
|
|
173
179
|
stacktrace = parsed_body["stacktrace"]
|
174
180
|
|
175
181
|
@logger.error "#{response.dump} error: #{body}" if @log_enabled
|
176
|
-
raise_errors(code, parsed_body["exception"], message, stacktrace)
|
182
|
+
raise_errors(code, parsed_body["exception"], message, stacktrace, request, index)
|
177
183
|
end
|
178
184
|
|
179
|
-
def raise_errors(code, exception, message, stacktrace)
|
185
|
+
def raise_errors(code, exception, message, stacktrace, request, index)
|
180
186
|
error = nil
|
181
187
|
case code
|
182
188
|
when 401
|
@@ -199,7 +205,7 @@ module Neography
|
|
199
205
|
NeographyError
|
200
206
|
end
|
201
207
|
|
202
|
-
raise error.new(message, code, stacktrace)
|
208
|
+
raise error.new(message, code, stacktrace, request, index)
|
203
209
|
end
|
204
210
|
|
205
211
|
def parse_string_options(options)
|
data/lib/neography/errors.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
module Neography
|
2
2
|
|
3
3
|
class NeographyError < StandardError
|
4
|
-
attr_reader :message, :code, :stacktrace
|
4
|
+
attr_reader :message, :code, :stacktrace, :request, :index
|
5
5
|
|
6
|
-
def initialize(message = nil, code = nil, stacktrace = nil)
|
6
|
+
def initialize(message = nil, code = nil, stacktrace = nil, request = nil, index = 0)
|
7
7
|
@message = message
|
8
8
|
@code = code
|
9
9
|
@stacktrace = stacktrace
|
10
|
+
@request = request
|
11
|
+
@index = index
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
data/lib/neography/version.rb
CHANGED
data/neography.gemspec
CHANGED
@@ -22,12 +22,17 @@ Gem::Specification.new do |s|
|
|
22
22
|
|
23
23
|
s.add_development_dependency "rspec", ">= 2.11"
|
24
24
|
s.add_development_dependency "net-http-spy", "0.2.1"
|
25
|
-
s.add_development_dependency "rake", ">= 0.8.7"
|
26
25
|
s.add_development_dependency "coveralls"
|
27
26
|
s.add_dependency "httpclient", ">= 2.3.3"
|
28
|
-
s.add_dependency "rake", ">= 0.8.7"
|
29
27
|
s.add_dependency "json", ">= 1.7.7"
|
30
28
|
s.add_dependency "os", ">= 0.9.6"
|
31
|
-
s.add_dependency "rubyzip", "
|
29
|
+
s.add_dependency "rubyzip", ">= 1.0.0"
|
32
30
|
s.add_dependency "multi_json", ">= 1.3.2"
|
31
|
+
|
32
|
+
if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
|
33
|
+
s.add_runtime_dependency 'rake', '>= 0.8.7'
|
34
|
+
else
|
35
|
+
s.add_development_dependency "rake", ">= 0.8.7"
|
36
|
+
s.add_dependency "rake", ">= 0.8.7"
|
37
|
+
end
|
33
38
|
end
|
@@ -34,10 +34,11 @@ describe Neography::Index do
|
|
34
34
|
end
|
35
35
|
|
36
36
|
it "can find a node in an index with brackets" do
|
37
|
+
key = generate_text(6)
|
37
38
|
value = "Sen. Roy Blunt [R-MO]"
|
38
39
|
new_node = Neography::Node.create("name" => value)
|
39
|
-
new_node.add_to_index(
|
40
|
-
existing_node = Neography::Node.find(
|
40
|
+
new_node.add_to_index(key, "name", value)
|
41
|
+
existing_node = Neography::Node.find(key, "name", value)
|
41
42
|
existing_node.name.should == value
|
42
43
|
end
|
43
44
|
|
@@ -2,7 +2,7 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Neography::Rest do
|
4
4
|
before(:each) do
|
5
|
-
@neo = Neography::Rest.new
|
5
|
+
@neo = Neography::Rest.new
|
6
6
|
end
|
7
7
|
|
8
8
|
describe "simple batch" do
|
@@ -482,6 +482,20 @@ describe Neography::Rest do
|
|
482
482
|
[:create_node, {:street1=>"94437 Kemmer Crossing", :street2=>"Apt. 333", :city=>"Abshireton", :state=>"AA", :zip=>"65820", :_type=>"Address", :created_at=>1335269478}],
|
483
483
|
[:create_relationship, "has", "{0}", "{2}", {}]
|
484
484
|
}.to raise_error(Neography::NeographyError)
|
485
|
+
|
486
|
+
begin
|
487
|
+
batch_result = @neo.batch [:create_unique_node, "person", "ssn", "000-00-0001", {:first_name=>"Jane", :last_name=>"Doe", :ssn=>"000-00-0001", :_type=>"Person", :created_at=>1335269478}],
|
488
|
+
[:add_node_to_index, "person_ssn", "ssn", "000-00-0001", "{0}"],
|
489
|
+
[:create_node, {:street1=>"94437 Kemmer Crossing", :street2=>"Apt. 333", :city=>"Abshireton", :state=>"AA", :zip=>"65820", :_type=>"Address", :created_at=>1335269478}],
|
490
|
+
[:create_relationship, "has", "{0}", "{2}", {}]
|
491
|
+
rescue Neography::NeographyError => e
|
492
|
+
e.message.should == "Not Found"
|
493
|
+
e.code.should == 404
|
494
|
+
e.stacktrace.should be_nil
|
495
|
+
e.request[:path].should == "/batch"
|
496
|
+
e.request[:body].should_not be_nil
|
497
|
+
e.index.should == 3
|
498
|
+
end
|
485
499
|
end
|
486
500
|
|
487
501
|
end
|
@@ -8,7 +8,7 @@ describe Neography::Connection do
|
|
8
8
|
|
9
9
|
it "should add a content type if there's existing headers" do
|
10
10
|
subject.merge_options({:headers => {'Content-Type' => 'foo/bar'}})[:headers].should ==
|
11
|
-
{'Content-Type' => "foo/bar", "User-Agent" => "Neography/#{Neography::VERSION}" , "X-Stream"=>true}
|
11
|
+
{'Content-Type' => "foo/bar", "User-Agent" => "Neography/#{Neography::VERSION}" , "X-Stream"=>true, "max-execution-time"=>6000}
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
@@ -30,7 +30,7 @@ describe Neography::Rest do
|
|
30
30
|
name = generate_text(6)
|
31
31
|
new_index = @neo.create_node_index(name)
|
32
32
|
new_index.should_not be_nil
|
33
|
-
new_index["template"].should == "#{@neo.configuration}/index/node/#{name}/{key}/{value}"
|
33
|
+
new_index["template"].should == "#{@neo.configuration}/db/data/index/node/#{name}/{key}/{value}"
|
34
34
|
new_index["provider"].should == "lucene"
|
35
35
|
new_index["type"].should == "exact"
|
36
36
|
end
|
@@ -39,7 +39,7 @@ describe Neography::Rest do
|
|
39
39
|
name = generate_text(6)
|
40
40
|
new_index = @neo.create_node_index(name, "fulltext","lucene")
|
41
41
|
new_index.should_not be_nil
|
42
|
-
new_index["template"].should == "#{@neo.configuration}/index/node/#{name}/{key}/{value}"
|
42
|
+
new_index["template"].should == "#{@neo.configuration}/db/data/index/node/#{name}/{key}/{value}"
|
43
43
|
new_index["provider"].should == "lucene"
|
44
44
|
new_index["type"].should == "fulltext"
|
45
45
|
end
|
@@ -48,7 +48,7 @@ describe Neography::Rest do
|
|
48
48
|
name = generate_text(6)
|
49
49
|
new_index = @neo.create_node_index(name, "fulltext","lucene", extra: 'extra-value')
|
50
50
|
new_index.should_not be_nil
|
51
|
-
new_index["template"].should == "#{@neo.configuration}/index/node/#{name}/{key}/{value}"
|
51
|
+
new_index["template"].should == "#{@neo.configuration}/db/data/index/node/#{name}/{key}/{value}"
|
52
52
|
new_index["provider"].should == "lucene"
|
53
53
|
new_index["extra"].should == "extra-value"
|
54
54
|
new_index["type"].should == "fulltext"
|
@@ -58,7 +58,7 @@ describe Neography::Rest do
|
|
58
58
|
name = generate_text(6)
|
59
59
|
new_index = @neo.create_relationship_index(name)
|
60
60
|
new_index.should_not be_nil
|
61
|
-
new_index["template"].should == "#{@neo.configuration}/index/relationship/#{name}/{key}/{value}"
|
61
|
+
new_index["template"].should == "#{@neo.configuration}/db/data/index/relationship/#{name}/{key}/{value}"
|
62
62
|
new_index["provider"].should == "lucene"
|
63
63
|
new_index["type"].should == "exact"
|
64
64
|
end
|
@@ -67,7 +67,7 @@ describe Neography::Rest do
|
|
67
67
|
name = generate_text(6)
|
68
68
|
new_index = @neo.create_relationship_index(name, "fulltext","lucene")
|
69
69
|
new_index.should_not be_nil
|
70
|
-
new_index["template"].should == "#{@neo.configuration}/index/relationship/#{name}/{key}/{value}"
|
70
|
+
new_index["template"].should == "#{@neo.configuration}/db/data/index/relationship/#{name}/{key}/{value}"
|
71
71
|
new_index["provider"].should == "lucene"
|
72
72
|
new_index["type"].should == "fulltext"
|
73
73
|
end
|
data/spec/unit/config_spec.rb
CHANGED
@@ -21,6 +21,7 @@ module Neography
|
|
21
21
|
its(:username) { should == nil }
|
22
22
|
its(:password) { should == nil }
|
23
23
|
its(:parser) { should == MultiJsonParser}
|
24
|
+
its(:max_execution_time) { should == 6000 }
|
24
25
|
|
25
26
|
it "has a hash representation" do
|
26
27
|
expected_hash = {
|
@@ -37,7 +38,8 @@ module Neography
|
|
37
38
|
:authentication => nil,
|
38
39
|
:username => nil,
|
39
40
|
:password => nil,
|
40
|
-
:parser => MultiJsonParser
|
41
|
+
:parser => MultiJsonParser,
|
42
|
+
:max_execution_time => 6000
|
41
43
|
}
|
42
44
|
config.to_hash.should == expected_hash
|
43
45
|
end
|
@@ -8,7 +8,7 @@ module Neography
|
|
8
8
|
context "defaults" do
|
9
9
|
|
10
10
|
it "intializes with defaults" do
|
11
|
-
connection.configuration.should == "http://localhost:7474
|
11
|
+
connection.configuration.should == "http://localhost:7474"
|
12
12
|
end
|
13
13
|
|
14
14
|
end
|
@@ -38,7 +38,7 @@ module Neography
|
|
38
38
|
end
|
39
39
|
|
40
40
|
it "accepts all options in a hash" do
|
41
|
-
connection.configuration.should == "https://foobar:4242/dir
|
41
|
+
connection.configuration.should == "https://foobar:4242/dir"
|
42
42
|
|
43
43
|
connection.protocol.should == "https://"
|
44
44
|
connection.server.should == "foobar"
|
@@ -65,7 +65,7 @@ module Neography
|
|
65
65
|
let(:options) { "https://user:pass@somehost:8585/path" }
|
66
66
|
|
67
67
|
it "accepts a string as configuration" do
|
68
|
-
connection.configuration.should == "https://somehost:8585/path
|
68
|
+
connection.configuration.should == "https://somehost:8585/path"
|
69
69
|
connection.authentication.should == {
|
70
70
|
:basic_auth => {
|
71
71
|
:username => "user",
|
@@ -125,7 +125,7 @@ module Neography
|
|
125
125
|
it "adds the User-Agent to the headers" do
|
126
126
|
connection.client.should_receive(:get).with(
|
127
127
|
"http://localhost:7474/db/data/foo/bar",
|
128
|
-
nil, { "User-Agent" => "Neography/#{Neography::VERSION}", "X-Stream"=>true}
|
128
|
+
nil, { "User-Agent" => "Neography/#{Neography::VERSION}", "X-Stream"=>true, "max-execution-time"=>6000}
|
129
129
|
) { double.as_null_object }
|
130
130
|
|
131
131
|
connection.get("/foo/bar", :headers => {})
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neography
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max De Marzi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2014-01-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -38,20 +38,6 @@ dependencies:
|
|
38
38
|
- - '='
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: 0.2.1
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: rake
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - '>='
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 0.8.7
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - '>='
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 0.8.7
|
55
41
|
- !ruby/object:Gem::Dependency
|
56
42
|
name: coveralls
|
57
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -80,20 +66,6 @@ dependencies:
|
|
80
66
|
- - '>='
|
81
67
|
- !ruby/object:Gem::Version
|
82
68
|
version: 2.3.3
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rake
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - '>='
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: 0.8.7
|
90
|
-
type: :runtime
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - '>='
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: 0.8.7
|
97
69
|
- !ruby/object:Gem::Dependency
|
98
70
|
name: json
|
99
71
|
requirement: !ruby/object:Gem::Requirement
|
@@ -126,14 +98,14 @@ dependencies:
|
|
126
98
|
name: rubyzip
|
127
99
|
requirement: !ruby/object:Gem::Requirement
|
128
100
|
requirements:
|
129
|
-
- -
|
101
|
+
- - '>='
|
130
102
|
- !ruby/object:Gem::Version
|
131
103
|
version: 1.0.0
|
132
104
|
type: :runtime
|
133
105
|
prerelease: false
|
134
106
|
version_requirements: !ruby/object:Gem::Requirement
|
135
107
|
requirements:
|
136
|
-
- -
|
108
|
+
- - '>='
|
137
109
|
- !ruby/object:Gem::Version
|
138
110
|
version: 1.0.0
|
139
111
|
- !ruby/object:Gem::Dependency
|
@@ -150,6 +122,20 @@ dependencies:
|
|
150
122
|
- - '>='
|
151
123
|
- !ruby/object:Gem::Version
|
152
124
|
version: 1.3.2
|
125
|
+
- !ruby/object:Gem::Dependency
|
126
|
+
name: rake
|
127
|
+
requirement: !ruby/object:Gem::Requirement
|
128
|
+
requirements:
|
129
|
+
- - '>='
|
130
|
+
- !ruby/object:Gem::Version
|
131
|
+
version: 0.8.7
|
132
|
+
type: :runtime
|
133
|
+
prerelease: false
|
134
|
+
version_requirements: !ruby/object:Gem::Requirement
|
135
|
+
requirements:
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: 0.8.7
|
153
139
|
description: A Ruby wrapper to the Neo4j Rest API see http://docs.neo4j.org/chunked/stable/rest-api.html
|
154
140
|
for more details.
|
155
141
|
email: maxdemarzi@gmail.com
|
@@ -296,7 +282,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
296
282
|
version: '0'
|
297
283
|
requirements: []
|
298
284
|
rubyforge_project: neography
|
299
|
-
rubygems_version: 2.0.
|
285
|
+
rubygems_version: 2.0.3
|
300
286
|
signing_key:
|
301
287
|
specification_version: 4
|
302
288
|
summary: ruby wrapper to Neo4j Rest API
|