neo4j-core 4.0.7 → 5.0.0.rc.1
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/ext/kernel.rb +9 -0
- data/lib/neo4j/label.rb +2 -1
- data/lib/neo4j/node.rb +8 -11
- data/lib/neo4j/property_container.rb +2 -7
- data/lib/neo4j/property_validator.rb +1 -1
- data/lib/neo4j/session.rb +24 -11
- data/lib/neo4j/tasks/config_server.rb +4 -1
- data/lib/neo4j/tasks/neo4j_server.rake +86 -109
- data/lib/neo4j/transaction.rb +17 -16
- data/lib/neo4j-core/cypher_translator.rb +1 -1
- data/lib/neo4j-core/query.rb +103 -47
- data/lib/neo4j-core/query_clauses.rb +177 -109
- data/lib/neo4j-core/query_find_in_batches.rb +19 -11
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-core.rb +3 -0
- data/lib/neo4j-embedded/cypher_response.rb +20 -5
- data/lib/neo4j-embedded/embedded_node.rb +26 -28
- data/lib/neo4j-embedded/embedded_session.rb +7 -6
- data/lib/neo4j-embedded/embedded_transaction.rb +2 -2
- data/lib/neo4j-embedded/label.rb +65 -0
- data/lib/neo4j-embedded/property.rb +5 -5
- data/lib/neo4j-embedded/to_java.rb +7 -13
- data/lib/neo4j-embedded.rb +1 -0
- data/lib/neo4j-server/cypher_node.rb +57 -67
- data/lib/neo4j-server/cypher_node_uncommited.rb +1 -1
- data/lib/neo4j-server/cypher_relationship.rb +10 -6
- data/lib/neo4j-server/cypher_response.rb +87 -51
- data/lib/neo4j-server/cypher_session.rb +80 -93
- data/lib/neo4j-server/cypher_transaction.rb +42 -33
- data/lib/neo4j-server/label.rb +40 -0
- data/lib/neo4j-server/resource.rb +11 -12
- data/lib/neo4j-server.rb +2 -0
- data/neo4j-core.gemspec +4 -1
- metadata +50 -6
- data/lib/neo4j-core/graph_json.rb +0 -35
@@ -0,0 +1,40 @@
|
|
1
|
+
module Neo4j
|
2
|
+
class Label
|
3
|
+
class << self
|
4
|
+
def constraints(session = Neo4j::Session.current)
|
5
|
+
session.connection.get(CONSTRAINT_PATH).body
|
6
|
+
end
|
7
|
+
|
8
|
+
def constraint?(label_name, property, session = Neo4j::Session.current)
|
9
|
+
label_constraints = session.connection.get("#{CONSTRAINT_PATH}/#{label_name}").body
|
10
|
+
!label_constraints.select { |c| c[:label] == label_name.to_s && c[:property_keys].first == property.to_s }.empty?
|
11
|
+
end
|
12
|
+
|
13
|
+
def indexes(session = Neo4j::Session.current)
|
14
|
+
session.connection.get(INDEX_PATH).body
|
15
|
+
end
|
16
|
+
|
17
|
+
def index?(label_name, property, session = Neo4j::Session.current)
|
18
|
+
label_indexes = session.connection.get("#{INDEX_PATH}/#{label_name}").body
|
19
|
+
!label_indexes.select { |i| i[:label] == label_name.to_s && i[:property_keys].first == property.to_s }.empty?
|
20
|
+
end
|
21
|
+
|
22
|
+
def drop_all_indexes(session = Neo4j::Session.current)
|
23
|
+
indexes.each do |i|
|
24
|
+
begin
|
25
|
+
session._query_or_fail("DROP INDEX ON :`#{i[:label]}`(#{i[:property_keys].first})")
|
26
|
+
rescue Neo4j::Server::CypherResponse::ResponseError
|
27
|
+
# This will error on each constraint. Ignore and continue.
|
28
|
+
next
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
def drop_all_constraints(session = Neo4j::Session.current)
|
34
|
+
constraints.each do |c|
|
35
|
+
session._query_or_fail("DROP CONSTRAINT ON (n:`#{c[:label]}`) ASSERT n.`#{c[:property_keys].first}` IS UNIQUE")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -7,44 +7,43 @@ module Neo4j
|
|
7
7
|
attr_reader :resource_data, :resource_url
|
8
8
|
|
9
9
|
def init_resource_data(resource_data, resource_url)
|
10
|
-
fail "Exception #{resource_data[
|
10
|
+
fail "Exception #{resource_data[:exception]}" if resource_data[:exception]
|
11
11
|
fail "Expected @resource_data to be Hash got #{resource_data.inspect}" unless resource_data.respond_to?(:[])
|
12
12
|
|
13
|
-
@resource_url = resource_url
|
14
13
|
@resource_data = resource_data
|
14
|
+
@resource_url = resource_url
|
15
15
|
|
16
16
|
self
|
17
17
|
end
|
18
18
|
|
19
19
|
def wrap_resource(connection = Neo4j::Session.current)
|
20
|
-
url = resource_url(
|
20
|
+
url = resource_url(:transaction)
|
21
21
|
CypherTransaction.new(url, connection)
|
22
22
|
end
|
23
23
|
|
24
24
|
def resource_url(key = nil)
|
25
25
|
return @resource_url if key.nil?
|
26
|
-
|
27
|
-
@resource_data.fetch key.to_s
|
26
|
+
@resource_data.fetch key
|
28
27
|
rescue KeyError
|
29
28
|
raise "No resource key '#{key}', available #{@resource_data.keys.inspect}"
|
30
29
|
end
|
31
30
|
|
32
|
-
def
|
33
|
-
|
31
|
+
def expect_response_code!(response, expected_code, msg = 'Error for request')
|
32
|
+
handle_response_error!(response, "Expected response code #{expected_code} #{msg}") unless response.status == expected_code
|
33
|
+
response
|
34
34
|
end
|
35
35
|
|
36
|
-
def
|
37
|
-
|
38
|
-
response
|
36
|
+
def handle_response_error!(response, msg = 'Error for request')
|
37
|
+
fail ServerException, "#{msg} #{response.env && response.env[:url].to_s}, #{response.status}"
|
39
38
|
end
|
40
39
|
|
41
40
|
def response_exception(response)
|
42
41
|
return nil if response.body.nil? || response.body.empty?
|
43
|
-
JSON.parse(response.body)[
|
42
|
+
JSON.parse(response.body)[:exception]
|
44
43
|
end
|
45
44
|
|
46
45
|
def resource_headers
|
47
|
-
{'Content-Type' => 'application/json', 'Accept' => 'application/json', 'User-Agent' => ::Neo4j::Session.user_agent_string}
|
46
|
+
{'Content-Type' => 'application/json', 'Accept' => 'application/json; charset=UTF-8', 'User-Agent' => ::Neo4j::Session.user_agent_string}
|
48
47
|
end
|
49
48
|
|
50
49
|
def resource_url_id(url = resource_url)
|
data/lib/neo4j-server.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'faraday'
|
3
3
|
require 'faraday_middleware'
|
4
|
+
require 'faraday_middleware/multi_json'
|
4
5
|
require 'neo4j-server/resource'
|
5
6
|
require 'neo4j-server/cypher_node'
|
6
7
|
require 'neo4j-server/cypher_label'
|
8
|
+
require 'neo4j-server/label'
|
7
9
|
require 'neo4j-server/cypher_session'
|
8
10
|
require 'neo4j-server/cypher_node_uncommited'
|
9
11
|
require 'neo4j-server/cypher_relationship'
|
data/neo4j-core.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'neo4j-core/version'
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'neo4j-core'
|
8
8
|
s.version = Neo4j::Core::VERSION
|
9
|
-
s.required_ruby_version = '>=
|
9
|
+
s.required_ruby_version = '>= 2.0.0'
|
10
10
|
|
11
11
|
s.authors = 'Andreas Ronge, Chris Grigg, Brian Underwood'
|
12
12
|
s.email = 'andreas.ronge@gmail.com, chris@subvertallmedia.com, brian@brian-underwood.codes'
|
@@ -33,12 +33,15 @@ Neo4j-core provides classes and methods to work with the graph database Neo4j.
|
|
33
33
|
s.add_dependency('os') # for Rake task
|
34
34
|
s.add_dependency('zip') # for Rake task
|
35
35
|
s.add_dependency('activesupport') # For ActiveSupport::Notifications
|
36
|
+
s.add_dependency('multi_json')
|
37
|
+
s.add_dependency('faraday_middleware-multi_json')
|
36
38
|
|
37
39
|
s.add_development_dependency('pry')
|
38
40
|
s.add_development_dependency('yard')
|
39
41
|
s.add_development_dependency('simplecov')
|
40
42
|
s.add_development_dependency('guard')
|
41
43
|
s.add_development_dependency('guard-rubocop')
|
44
|
+
s.add_development_dependency('rubocop', '~> 0.29.1')
|
42
45
|
|
43
46
|
if RUBY_PLATFORM == 'java'
|
44
47
|
s.add_dependency('neo4j-community', '>= 2.1.1')
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4j-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 5.0.0.rc.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Ronge, Chris Grigg, Brian Underwood
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-05-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
@@ -136,6 +136,34 @@ dependencies:
|
|
136
136
|
- - ">="
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: multi_json
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - ">="
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :runtime
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - ">="
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '0'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: faraday_middleware-multi_json
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :runtime
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
139
167
|
- !ruby/object:Gem::Dependency
|
140
168
|
name: pry
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -206,6 +234,20 @@ dependencies:
|
|
206
234
|
- - ">="
|
207
235
|
- !ruby/object:Gem::Version
|
208
236
|
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: rubocop
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: 0.29.1
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - "~>"
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: 0.29.1
|
209
251
|
description: |
|
210
252
|
Neo4j-core provides classes and methods to work with the graph database Neo4j.
|
211
253
|
email: andreas.ronge@gmail.com, chris@subvertallmedia.com, brian@brian-underwood.codes
|
@@ -216,10 +258,10 @@ extra_rdoc_files:
|
|
216
258
|
files:
|
217
259
|
- Gemfile
|
218
260
|
- README.md
|
261
|
+
- lib/ext/kernel.rb
|
219
262
|
- lib/neo4j-core.rb
|
220
263
|
- lib/neo4j-core/active_entity.rb
|
221
264
|
- lib/neo4j-core/cypher_translator.rb
|
222
|
-
- lib/neo4j-core/graph_json.rb
|
223
265
|
- lib/neo4j-core/hash_with_indifferent_access.rb
|
224
266
|
- lib/neo4j-core/helpers.rb
|
225
267
|
- lib/neo4j-core/label.rb
|
@@ -237,6 +279,7 @@ files:
|
|
237
279
|
- lib/neo4j-embedded/embedded_relationship.rb
|
238
280
|
- lib/neo4j-embedded/embedded_session.rb
|
239
281
|
- lib/neo4j-embedded/embedded_transaction.rb
|
282
|
+
- lib/neo4j-embedded/label.rb
|
240
283
|
- lib/neo4j-embedded/property.rb
|
241
284
|
- lib/neo4j-embedded/to_java.rb
|
242
285
|
- lib/neo4j-server.rb
|
@@ -247,6 +290,7 @@ files:
|
|
247
290
|
- lib/neo4j-server/cypher_response.rb
|
248
291
|
- lib/neo4j-server/cypher_session.rb
|
249
292
|
- lib/neo4j-server/cypher_transaction.rb
|
293
|
+
- lib/neo4j-server/label.rb
|
250
294
|
- lib/neo4j-server/resource.rb
|
251
295
|
- lib/neo4j/entity_equality.rb
|
252
296
|
- lib/neo4j/label.rb
|
@@ -278,12 +322,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
278
322
|
requirements:
|
279
323
|
- - ">="
|
280
324
|
- !ruby/object:Gem::Version
|
281
|
-
version:
|
325
|
+
version: 2.0.0
|
282
326
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
283
327
|
requirements:
|
284
|
-
- - "
|
328
|
+
- - ">"
|
285
329
|
- !ruby/object:Gem::Version
|
286
|
-
version:
|
330
|
+
version: 1.3.1
|
287
331
|
requirements: []
|
288
332
|
rubyforge_project:
|
289
333
|
rubygems_version: 2.4.5
|
@@ -1,35 +0,0 @@
|
|
1
|
-
module Neo4j
|
2
|
-
module Core
|
3
|
-
module GraphJSON
|
4
|
-
def self.to_graph_json(objects)
|
5
|
-
nodes = {}
|
6
|
-
edges = {}
|
7
|
-
|
8
|
-
objects.each do |object|
|
9
|
-
case object
|
10
|
-
when Neo4j::ActiveNode, Neo4j::Server::CypherNode
|
11
|
-
nodes[object.neo_id] = {
|
12
|
-
id: object.neo_id,
|
13
|
-
labels: (object.is_a?(Neo4j::ActiveNode) ? [object.class.name] : object.labels),
|
14
|
-
properties: object.attributes
|
15
|
-
}
|
16
|
-
when Neo4j::ActiveRel, Neo4j::Server::CypherRelationship
|
17
|
-
edges[[object.start_node.neo_id, object.end_node.neo_id]] = {
|
18
|
-
source: object.start_node.neo_id,
|
19
|
-
target: object.end_node.neo_id,
|
20
|
-
type: object.rel_type,
|
21
|
-
properties: object.props
|
22
|
-
}
|
23
|
-
else
|
24
|
-
fail "Invalid value found: #{object.inspect}"
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
{
|
29
|
-
nodes: nodes.values,
|
30
|
-
edges: edges.values
|
31
|
-
}.to_json
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|