neo4j-core 3.0.0.alpha.9 → 3.0.0.alpha.10
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/neo4j-core/cypher_translator.rb +32 -8
- data/lib/neo4j-core/version.rb +1 -1
- data/lib/neo4j-embedded/property.rb +5 -1
- data/lib/neo4j-server/cypher_node.rb +13 -1
- data/lib/neo4j-server/cypher_session.rb +3 -1
- data/lib/neo4j-server/cypher_transaction.rb +1 -1
- data/lib/neo4j/session.rb +5 -5
- metadata +32 -33
- data/lib/test.rb +0 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8a84afded3b491b86251ab1b129c8722e921fd0b
|
4
|
+
data.tar.gz: c2db2be7dfdf1cf1dc33f5a13d43c3083b24e46d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fd6fccc4a3ba5c2980b0ed478d65d5a2389f1da43f24540fd5e823fdf91b5b7a5cd1148a6f0049b5f4c3db698617235a40ce52aea7da2d81c9e263b0b9231a76
|
7
|
+
data.tar.gz: 22ad54611e1d5d896f94e5d47265c08e9dd27dd26132f7e9b9262eb4097a01e2030f2ebb806636c1d6c20999d2751291225c548f54e6ad999ac989982a82532d
|
@@ -1,14 +1,38 @@
|
|
1
1
|
module Neo4j::Core
|
2
2
|
module CypherTranslator
|
3
3
|
# Cypher Helper
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
4
|
+
def escape_value(value)
|
5
|
+
result = case value
|
6
|
+
when String
|
7
|
+
sanitized = sanitize_escape_sequences(value)
|
8
|
+
"'#{escape_quotes(sanitized)}'"
|
9
|
+
else
|
10
|
+
value
|
11
|
+
end
|
12
|
+
result
|
13
|
+
end
|
14
|
+
|
15
|
+
# Only following escape sequence characters are allowed in Cypher:
|
16
|
+
#
|
17
|
+
# \t Tab
|
18
|
+
# \b Backspace
|
19
|
+
# \n Newline
|
20
|
+
# \r Carriage return
|
21
|
+
# \f Form feed
|
22
|
+
# \' Single quote
|
23
|
+
# \" Double quote
|
24
|
+
# \\ Backslash
|
25
|
+
#
|
26
|
+
# From:
|
27
|
+
# http://docs.neo4j.org/chunked/stable/cypher-expressions.html#_note_on_string_literals
|
28
|
+
SANITIZE_ESCAPED_REGEXP = /(?<!\\)\\(\\\\)*(?![futbnr'"\\])/
|
29
|
+
def sanitize_escape_sequences(s)
|
30
|
+
s.gsub SANITIZE_ESCAPED_REGEXP, ''
|
31
|
+
end
|
32
|
+
|
33
|
+
def escape_quotes(s)
|
34
|
+
s.gsub("'", %q(\\\'))
|
35
|
+
end
|
12
36
|
|
13
37
|
# Cypher Helper
|
14
38
|
def cypher_prop_list(props)
|
data/lib/neo4j-core/version.rb
CHANGED
@@ -51,10 +51,22 @@ module Neo4j::Server
|
|
51
51
|
properties
|
52
52
|
end
|
53
53
|
|
54
|
+
def remove_properties(properties)
|
55
|
+
q = "START n=node(#{neo_id}) REMOVE " + properties.map do |k|
|
56
|
+
"n.`#{k}`"
|
57
|
+
end.join(', ')
|
58
|
+
@session._query_or_fail(q)
|
59
|
+
end
|
60
|
+
|
54
61
|
# (see Neo4j::Node#update_props)
|
55
62
|
def update_props(properties)
|
56
63
|
return if properties.empty?
|
57
|
-
|
64
|
+
|
65
|
+
removed_keys = properties.keys.select{|k| properties[k].nil?}
|
66
|
+
remove_properties(removed_keys) unless removed_keys.empty?
|
67
|
+
properties_to_set = properties.keys - removed_keys
|
68
|
+
return if properties_to_set.empty?
|
69
|
+
q = "START n=node(#{neo_id}) SET " + properties_to_set.map do |k|
|
58
70
|
"n.`#{k}`= #{escape_value(properties[k])}"
|
59
71
|
end.join(',')
|
60
72
|
@session._query_or_fail(q)
|
@@ -5,7 +5,9 @@ module Neo4j::Server
|
|
5
5
|
response = HTTParty.get(endpoint_url || 'http://localhost:7474')
|
6
6
|
raise "Server not available on #{endpoint_url} (response code #{response.code})" unless response.code == 200
|
7
7
|
root_data = JSON.parse(response.body)
|
8
|
-
|
8
|
+
data_url = root_data['data']
|
9
|
+
data_url << '/' unless data_url.end_with?('/')
|
10
|
+
Neo4j::Server::CypherSession.new(data_url)
|
9
11
|
end
|
10
12
|
|
11
13
|
class CypherSession < Neo4j::Session
|
@@ -36,7 +36,7 @@ module Neo4j::Server
|
|
36
36
|
|
37
37
|
# So we have to do this workaround
|
38
38
|
params.each_pair do |k,v|
|
39
|
-
statement[:statement].gsub!("{ #{k} }", escape_value(v))
|
39
|
+
statement[:statement].gsub!("{ #{k} }", "#{escape_value(v)}")
|
40
40
|
end
|
41
41
|
end
|
42
42
|
response = HTTParty.post(@exec_url, headers: resource_headers, body: body.to_json)
|
data/lib/neo4j/session.rb
CHANGED
@@ -50,23 +50,23 @@ module Neo4j
|
|
50
50
|
# Returns an enumerable of hash values, column => value
|
51
51
|
#
|
52
52
|
# @example Using the Cypher DSL
|
53
|
-
# q =
|
53
|
+
# q = session.query("START n=node({param}) RETURN n", :param => 0)
|
54
54
|
# q.first[:n] #=> the node
|
55
55
|
# q.columns.first => :n
|
56
56
|
#
|
57
57
|
# @example Using the Cypher DSL
|
58
|
-
# q =
|
58
|
+
# q = session.query{ match node(3) <=> node(:x); ret :x}
|
59
59
|
# q.first[:n] #=> the @node
|
60
60
|
# q.columns.first => :n
|
61
61
|
#
|
62
62
|
# @example Using the Cypher DSL and one parameter (n=Neo4j.ref_node)
|
63
|
-
# q =
|
63
|
+
# q = session.query(Neo4j.ref_node){|n| n <=> node(:x); :x}
|
64
64
|
# q.first[:n] #=> the @node
|
65
65
|
# q.columns.first => :n
|
66
66
|
#
|
67
67
|
# @example Using an array of nodes
|
68
68
|
# # same as - two_nodes=node(Neo4j.ref_node.neo_id, node_b.neo_id), b = node(b.neo_id)
|
69
|
-
# q =
|
69
|
+
# q = session.query([Neo4j.ref_node, node_b], node_c){|two_nodes, b| two_nodes <=> b; b}
|
70
70
|
#
|
71
71
|
# @see Cypher
|
72
72
|
# @see http://docs.neo4j.org/chunked/milestone/cypher-query-lang.html The Cypher Query Language Documentation
|
@@ -100,7 +100,7 @@ module Neo4j
|
|
100
100
|
register(create_session(db_type, params), name, default)
|
101
101
|
end
|
102
102
|
|
103
|
-
def create_session(db_type, params)
|
103
|
+
def create_session(db_type, params = {})
|
104
104
|
unless (@@factories[db_type])
|
105
105
|
raise "Can't connect to database '#{db_type}', available #{@@factories.keys.join(',')}"
|
106
106
|
end
|
metadata
CHANGED
@@ -1,69 +1,69 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4j-core
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.0.0.alpha.
|
4
|
+
version: 3.0.0.alpha.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Ronge
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-04-12 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: httparty
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- -
|
17
|
+
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
19
|
version: '0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- -
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
|
-
- -
|
38
|
+
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: os
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
|
-
- -
|
45
|
+
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: neo4j-cypher
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ">="
|
60
60
|
- !ruby/object:Gem::Version
|
61
61
|
version: '0'
|
62
62
|
type: :runtime
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
|
-
- -
|
66
|
+
- - ">="
|
67
67
|
- !ruby/object:Gem::Version
|
68
68
|
version: '0'
|
69
69
|
description: |
|
@@ -77,21 +77,15 @@ extensions: []
|
|
77
77
|
extra_rdoc_files:
|
78
78
|
- README.md
|
79
79
|
files:
|
80
|
-
-
|
81
|
-
-
|
82
|
-
- lib/neo4j
|
83
|
-
- lib/neo4j/property_container.rb
|
84
|
-
- lib/neo4j/property_validator.rb
|
85
|
-
- lib/neo4j/relationship.rb
|
86
|
-
- lib/neo4j/session.rb
|
87
|
-
- lib/neo4j/tasks/neo4j_server.rb
|
88
|
-
- lib/neo4j/transaction.rb
|
80
|
+
- Gemfile
|
81
|
+
- README.md
|
82
|
+
- lib/neo4j-core.rb
|
89
83
|
- lib/neo4j-core/cypher_translator.rb
|
90
84
|
- lib/neo4j-core/hash_with_indifferent_access.rb
|
91
85
|
- lib/neo4j-core/helpers.rb
|
92
86
|
- lib/neo4j-core/label.rb
|
93
87
|
- lib/neo4j-core/version.rb
|
94
|
-
- lib/neo4j-
|
88
|
+
- lib/neo4j-embedded.rb
|
95
89
|
- lib/neo4j-embedded/embedded_database.rb
|
96
90
|
- lib/neo4j-embedded/embedded_impermanent_session.rb
|
97
91
|
- lib/neo4j-embedded/embedded_label.rb
|
@@ -100,7 +94,7 @@ files:
|
|
100
94
|
- lib/neo4j-embedded/embedded_session.rb
|
101
95
|
- lib/neo4j-embedded/property.rb
|
102
96
|
- lib/neo4j-embedded/to_java.rb
|
103
|
-
- lib/neo4j-
|
97
|
+
- lib/neo4j-server.rb
|
104
98
|
- lib/neo4j-server/cypher_label.rb
|
105
99
|
- lib/neo4j-server/cypher_node.rb
|
106
100
|
- lib/neo4j-server/cypher_node_uncommited.rb
|
@@ -109,38 +103,43 @@ files:
|
|
109
103
|
- lib/neo4j-server/cypher_session.rb
|
110
104
|
- lib/neo4j-server/cypher_transaction.rb
|
111
105
|
- lib/neo4j-server/resource.rb
|
112
|
-
- lib/neo4j
|
113
|
-
- lib/
|
114
|
-
-
|
115
|
-
-
|
106
|
+
- lib/neo4j/entity_equality.rb
|
107
|
+
- lib/neo4j/label.rb
|
108
|
+
- lib/neo4j/node.rb
|
109
|
+
- lib/neo4j/property_container.rb
|
110
|
+
- lib/neo4j/property_validator.rb
|
111
|
+
- lib/neo4j/relationship.rb
|
112
|
+
- lib/neo4j/session.rb
|
113
|
+
- lib/neo4j/tasks/neo4j_server.rb
|
114
|
+
- lib/neo4j/transaction.rb
|
116
115
|
- neo4j-core.gemspec
|
117
116
|
homepage: http://github.com/andreasronge/neo4j-core/tree
|
118
117
|
licenses: []
|
119
118
|
metadata: {}
|
120
119
|
post_install_message:
|
121
120
|
rdoc_options:
|
122
|
-
- --quiet
|
123
|
-
- --title
|
121
|
+
- "--quiet"
|
122
|
+
- "--title"
|
124
123
|
- Neo4j::Core
|
125
|
-
- --line-numbers
|
126
|
-
- --main
|
124
|
+
- "--line-numbers"
|
125
|
+
- "--main"
|
127
126
|
- README.rdoc
|
128
|
-
- --inline-source
|
127
|
+
- "--inline-source"
|
129
128
|
require_paths:
|
130
129
|
- lib
|
131
130
|
required_ruby_version: !ruby/object:Gem::Requirement
|
132
131
|
requirements:
|
133
|
-
- -
|
132
|
+
- - ">="
|
134
133
|
- !ruby/object:Gem::Version
|
135
134
|
version: 1.8.7
|
136
135
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
137
136
|
requirements:
|
138
|
-
- -
|
137
|
+
- - ">"
|
139
138
|
- !ruby/object:Gem::Version
|
140
139
|
version: 1.3.1
|
141
140
|
requirements: []
|
142
141
|
rubyforge_project: neo4j-core
|
143
|
-
rubygems_version: 2.
|
142
|
+
rubygems_version: 2.2.2
|
144
143
|
signing_key:
|
145
144
|
specification_version: 4
|
146
145
|
summary: A graph database for JRuby
|