neoon 0.0.4 → 0.0.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +16 -16
- data/lib/faraday/neoon/raise_error.rb +1 -9
- data/lib/neoon/client/connection.rb +4 -4
- data/lib/neoon/cypher/handler.rb +9 -15
- data/lib/neoon/cypher/instance_query.rb +2 -29
- data/lib/neoon/cypher/node/operations.rb +43 -0
- data/lib/neoon/error.rb +17 -1
- data/lib/neoon/model/node.rb +9 -4
- data/lib/neoon/model/schema.rb +4 -6
- data/lib/neoon/version.rb +1 -1
- data/lib/neoon.rb +1 -0
- data/spec/neoon/model/config_spec.rb +8 -0
- data/spec/neoon/model/node_spec.rb +25 -51
- data/spec/neoon/model/schema_spec.rb +7 -7
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 28243d5e5b0830a48aa0df05d3b94dfc9b7bf3b7
|
4
|
+
data.tar.gz: 5d7b6ea2499ed9302ae792a566410a33a60047fe
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f5be28a492cfdfbfc9356c9e7eb69b5511df51d5cb90353b857dfc195a46a489d8e9f0e9d719d0e34a056d11ee77a13bd64e0394575c485ea29bb9f91711b6f7
|
7
|
+
data.tar.gz: 603ac48d81ef63a99a6004d64356a5cadfe9345a83e79568ffa262c3f4a20380990cbe64717a7ad8be80c24d753f5d8f7bde1223b3f4d61700cd0f4525e1bc54
|
data/README.md
CHANGED
@@ -83,12 +83,12 @@ end
|
|
83
83
|
This will be used internally to auto index models nodes.
|
84
84
|
|
85
85
|
```ruby
|
86
|
-
Topic.neo_index_list #=>
|
86
|
+
Topic.neo_index_list #=> { :name => true, :slug => "UNIQUENESS" }
|
87
87
|
|
88
88
|
#
|
89
89
|
# Sync the indexed nodes as described in each model config. It returns the indexed fields.
|
90
90
|
# Remember, this will be called on each model on the boot if preload_models set to true.
|
91
|
-
Topic.neo_schema_update #=>
|
91
|
+
Topic.neo_schema_update #=> { :name => true, :slug => "UNIQUENESS" }
|
92
92
|
```
|
93
93
|
|
94
94
|
---
|
@@ -98,13 +98,13 @@ Topic.neo_schema_update #=> [:name, :slug]
|
|
98
98
|
`Neoon::Cypher::InstanceQuery` should be initialized with an Class name or `label`. You can use `Neoon::Cypher::Query` to manually create indexes, constraints, etc.
|
99
99
|
|
100
100
|
```ruby
|
101
|
-
l = Neoon::Cypher::Query.new('Person')
|
101
|
+
l = Neoon::Cypher::Query.new('Person')
|
102
102
|
|
103
|
-
l.create_index(:name)
|
104
|
-
# l.drop_index(:name)
|
103
|
+
l.create_index(:name)
|
104
|
+
# l.drop_index(:name)
|
105
105
|
|
106
|
-
l.create_constraint(:username)
|
107
|
-
# l.drop_constraint(:username)
|
106
|
+
l.create_constraint(:username)
|
107
|
+
# l.drop_constraint(:username)
|
108
108
|
|
109
109
|
l.list_indexes #=> { :name => true, :username => "UNIQUENESS" }
|
110
110
|
```
|
@@ -121,25 +121,25 @@ Use it with Struct:
|
|
121
121
|
|
122
122
|
```ruby
|
123
123
|
Customer = Struct.new(:id, :neo_node_properties)
|
124
|
-
cus = Customer.new(50, {:name => 'Julie', :address => 'PS'})
|
124
|
+
cus = Customer.new(50, {:name => 'Julie', :address => 'PS'})
|
125
125
|
|
126
126
|
c = Neoon::Cypher::InstanceQuery.new(cus)
|
127
127
|
|
128
|
-
c.find_node
|
129
|
-
c.create_node
|
130
|
-
c.delete_node
|
128
|
+
c.find_node #=> Return node in Neo4j if already saved
|
129
|
+
c.create_node #=> Create object node / or update it
|
130
|
+
c.delete_node #=> Remove object node
|
131
131
|
```
|
132
132
|
|
133
|
-
Note that the key of finding nodes in Neo4j is `id` as saved in Neo4j with key `
|
133
|
+
Note that the key of finding nodes in Neo4j is `id` as saved in Neo4j with key `_id`.
|
134
134
|
|
135
135
|
Another example on the model we defined above:
|
136
136
|
|
137
137
|
```ruby
|
138
|
-
t = Neoon::Cypher::InstanceQuery.new(Topic.first)
|
138
|
+
t = Neoon::Cypher::InstanceQuery.new(Topic.first)
|
139
139
|
|
140
|
-
t.find_node
|
141
|
-
t.create_node
|
142
|
-
t.delete_node
|
140
|
+
t.find_node #=> Returns node in Neo4j if already saved
|
141
|
+
t.create_node #=> Create object node / or update it
|
142
|
+
t.delete_node #=> Remove object node
|
143
143
|
```
|
144
144
|
|
145
145
|
---
|
@@ -6,15 +6,7 @@ module Faraday
|
|
6
6
|
@app.call(env).on_complete do |env|
|
7
7
|
case env[:status]
|
8
8
|
when (400..499)
|
9
|
-
|
10
|
-
raise "Neoon::Error::#{body["cause"]["exception"]}".constantize, "#{{
|
11
|
-
:message => body["message"],
|
12
|
-
:exception => body["exception"],
|
13
|
-
:cause => {
|
14
|
-
:message => body["cause"]["message"],
|
15
|
-
:exception => body["cause"]["exception"]
|
16
|
-
}
|
17
|
-
} if env[:body]}"
|
9
|
+
raise "Neoon::Error::#{JSON.parse(env[:body])["cause"]["exception"]}".constantize.new(env[:response], env[:response].body)
|
18
10
|
when (500..599)
|
19
11
|
raise 'Something went error with Neo4j server.'
|
20
12
|
end
|
@@ -5,10 +5,10 @@ module Neoon
|
|
5
5
|
attr_reader :connection
|
6
6
|
|
7
7
|
def initialize(url)
|
8
|
-
|
9
|
-
end_point = "#{
|
8
|
+
uri = URI.parse(url)
|
9
|
+
end_point = "#{uri.scheme}://#{uri.host}:#{uri.port}#{uri.path}"
|
10
10
|
@connection ||= Faraday.new(end_point, connection_options.merge(:builder => middleware))
|
11
|
-
@connection.basic_auth(
|
11
|
+
@connection.basic_auth(uri.user, uri.password) if uri.user && uri.password
|
12
12
|
end
|
13
13
|
|
14
14
|
include Request
|
@@ -26,7 +26,7 @@ module Neoon
|
|
26
26
|
:request => {
|
27
27
|
:open_timeout => 5,
|
28
28
|
:timeout => 10,
|
29
|
-
}
|
29
|
+
}
|
30
30
|
}
|
31
31
|
end
|
32
32
|
|
data/lib/neoon/cypher/handler.rb
CHANGED
@@ -2,27 +2,21 @@ module Neoon
|
|
2
2
|
module Cypher
|
3
3
|
class Handler
|
4
4
|
|
5
|
-
attr_reader :query, :args
|
5
|
+
attr_reader :query, :args, :result
|
6
6
|
|
7
7
|
def initialize(hash)
|
8
|
-
@query
|
9
|
-
@args
|
10
|
-
end
|
8
|
+
@query = hash[:query]
|
9
|
+
@args = hash[:args]
|
11
10
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
query.gsub(/\s+/, ' ').strip
|
11
|
+
@result = begin
|
12
|
+
make_cypher_request(query, args)
|
13
|
+
rescue Exception => e
|
14
|
+
{ :error => e }
|
17
15
|
end
|
18
16
|
end
|
19
17
|
|
20
|
-
def
|
21
|
-
|
22
|
-
query.each { |q| make_cypher_request(q, args) }
|
23
|
-
else
|
24
|
-
make_cypher_request(query, args)
|
25
|
-
end
|
18
|
+
def to_cypher
|
19
|
+
[query.gsub(/\s+/, ' ').strip, args]
|
26
20
|
end
|
27
21
|
|
28
22
|
protected
|
@@ -7,37 +7,10 @@ module Neoon
|
|
7
7
|
def initialize(object)
|
8
8
|
@id = object.id
|
9
9
|
@label = object.class.name
|
10
|
-
@args = object.neo_node_properties
|
10
|
+
@args = object.neo_node_properties.merge(:_id => id)
|
11
11
|
end
|
12
12
|
|
13
|
-
|
14
|
-
cypher_query = <<-CYPHER
|
15
|
-
MATCH node:#{label} WHERE node._id = #{id}
|
16
|
-
RETURN node
|
17
|
-
CYPHER
|
18
|
-
cypherable(:query => cypher_query)
|
19
|
-
end
|
20
|
-
|
21
|
-
def create_node
|
22
|
-
cypher_query = <<-CYPHER
|
23
|
-
MERGE (node:#{label} { _id: #{id} })
|
24
|
-
ON CREATE node SET node = {props}
|
25
|
-
ON MATCH node SET node = {props}
|
26
|
-
RETURN node
|
27
|
-
CYPHER
|
28
|
-
cypherable(:query => cypher_query, :args => {:props => args})
|
29
|
-
end
|
30
|
-
alias_method :update_node, :create_node
|
31
|
-
alias_method :save_node, :create_node
|
32
|
-
|
33
|
-
def delete_node
|
34
|
-
cypher_query = <<-CYPHER
|
35
|
-
MATCH node:#{label}
|
36
|
-
WHERE node._id = #{id}
|
37
|
-
DELETE node
|
38
|
-
CYPHER
|
39
|
-
cypherable(:query => cypher_query)
|
40
|
-
end
|
13
|
+
include Neoon::Cypher::Node::Operations
|
41
14
|
|
42
15
|
protected
|
43
16
|
|
@@ -0,0 +1,43 @@
|
|
1
|
+
module Neoon
|
2
|
+
module Cypher
|
3
|
+
module Node
|
4
|
+
module Operations
|
5
|
+
|
6
|
+
def find_node
|
7
|
+
cypher_query = <<-CYPHER
|
8
|
+
MATCH node:#{label} WHERE node._id = #{id}
|
9
|
+
RETURN node
|
10
|
+
CYPHER
|
11
|
+
cypherable(:query => cypher_query)
|
12
|
+
end
|
13
|
+
|
14
|
+
def save_node
|
15
|
+
# since you can't update a constrain with same value
|
16
|
+
# we have to remove the node and re-create it
|
17
|
+
# other way ???
|
18
|
+
delete_node unless (label.constantize.respond_to?(:neo_schema_index_keys) ? label.constantize.neo_schema_index_keys : Neoon::Cypher::Query.new(label).list_indexes).select{|k,v| v=='UNIQUENESS'}.empty?
|
19
|
+
|
20
|
+
cypher_query = <<-CYPHER
|
21
|
+
MERGE (node:#{label} { _id: #{id} })
|
22
|
+
ON CREATE node SET node = {props}
|
23
|
+
ON MATCH node SET node = {props}
|
24
|
+
RETURN node
|
25
|
+
CYPHER
|
26
|
+
cypherable(:query => cypher_query, :args => {:props => args})
|
27
|
+
end
|
28
|
+
alias_method :update_node, :save_node
|
29
|
+
alias_method :create_node, :save_node
|
30
|
+
|
31
|
+
def delete_node
|
32
|
+
cypher_query = <<-CYPHER
|
33
|
+
MATCH node:#{label}
|
34
|
+
WHERE node._id = #{id}
|
35
|
+
DELETE node
|
36
|
+
CYPHER
|
37
|
+
cypherable(:query => cypher_query)
|
38
|
+
end
|
39
|
+
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
data/lib/neoon/error.rb
CHANGED
@@ -1,11 +1,27 @@
|
|
1
1
|
module Neoon
|
2
2
|
module Error
|
3
3
|
|
4
|
-
class Exception < StandardError
|
4
|
+
class Exception < StandardError
|
5
|
+
attr_reader :response
|
6
|
+
|
7
|
+
def initialize(response, message)
|
8
|
+
@response = response
|
9
|
+
super(message)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
5
13
|
class IndexException < Exception; end
|
6
14
|
class SchemaException < Exception; end
|
7
15
|
class CypherException < Exception; end
|
8
16
|
|
17
|
+
# custom
|
18
|
+
class NodeNotFoundException < Exception; end
|
19
|
+
|
20
|
+
# org.neo4j.kernel.impl.api.constraints
|
21
|
+
class ConstraintValidationKernelException < Exception; end
|
22
|
+
class UnableToValidateConstraintKernelException < Exception; end
|
23
|
+
class UniqueConstraintViolationKernelException < Exception; end
|
24
|
+
|
9
25
|
# org.neo4j.kernel.api.exceptions
|
10
26
|
class BeginTransactionFailureException < Exception; end
|
11
27
|
class ConstraintCreationException < Exception; end
|
data/lib/neoon/model/node.rb
CHANGED
@@ -3,21 +3,26 @@ module Neoon
|
|
3
3
|
module Node
|
4
4
|
|
5
5
|
def neo_node
|
6
|
-
_cypher_query.find_node.
|
6
|
+
_node = _cypher_query.find_node.result.data
|
7
|
+
if _node.empty?
|
8
|
+
excep = { :message => "Cannot find node with id [#{_cypher_query.id}] in database.", :exception => "NodeNotFoundException" }
|
9
|
+
raise Neoon::Error::NodeNotFoundException.new excep, excep
|
10
|
+
end
|
11
|
+
_node.first.first.data
|
7
12
|
end
|
8
13
|
|
9
14
|
def neo_create
|
10
|
-
_cypher_query.create_node.
|
15
|
+
_cypher_query.create_node.result.data
|
11
16
|
end
|
12
17
|
alias_method :neo_save, :neo_create
|
13
18
|
alias_method :neo_update, :neo_create
|
14
19
|
|
15
20
|
def neo_destroy
|
16
|
-
_cypher_query.delete_node.
|
21
|
+
_cypher_query.delete_node.result.data
|
17
22
|
end
|
18
23
|
|
19
24
|
def neo_node_properties
|
20
|
-
_neo_node.merge(
|
25
|
+
_neo_node.merge(:_id => self.id)
|
21
26
|
end
|
22
27
|
|
23
28
|
protected
|
data/lib/neoon/model/schema.rb
CHANGED
@@ -8,20 +8,18 @@ module Neoon
|
|
8
8
|
|
9
9
|
def neo_index_create key
|
10
10
|
if neo_schema_index_keys.select { |k,v| v == 'UNIQUENESS' }.include? key
|
11
|
-
_cypher_query.create_constraint(key)
|
11
|
+
_cypher_query.create_constraint(key)
|
12
12
|
else
|
13
|
-
_cypher_query.create_index(key)
|
13
|
+
_cypher_query.create_index(key)
|
14
14
|
end
|
15
|
-
true
|
16
15
|
end
|
17
16
|
|
18
17
|
def neo_index_drop key
|
19
18
|
if neo_index_list[key] == 'UNIQUENESS'
|
20
|
-
_cypher_query.drop_constraint(key)
|
19
|
+
_cypher_query.drop_constraint(key)
|
21
20
|
else
|
22
|
-
_cypher_query.drop_index(key)
|
21
|
+
_cypher_query.drop_index(key)
|
23
22
|
end
|
24
|
-
true
|
25
23
|
end
|
26
24
|
|
27
25
|
def neo_index_drop_all
|
data/lib/neoon/version.rb
CHANGED
data/lib/neoon.rb
CHANGED
@@ -14,6 +14,7 @@ require 'neoon/cypher/handler'
|
|
14
14
|
require 'neoon/cypher/schema/indexes'
|
15
15
|
require 'neoon/cypher/schema/constraints'
|
16
16
|
require 'neoon/cypher/query'
|
17
|
+
require 'neoon/cypher/node/operations'
|
17
18
|
require 'neoon/cypher/instance_query'
|
18
19
|
|
19
20
|
require 'neoon/model/config'
|
@@ -6,6 +6,14 @@ describe Neoon::Model::Config do
|
|
6
6
|
require 'app/models/topic'
|
7
7
|
end
|
8
8
|
|
9
|
+
it 'responds to .neoon' do
|
10
|
+
expect(Topic).to respond_to(:neoon)
|
11
|
+
end
|
12
|
+
|
13
|
+
it 'responds to .neo_model_config' do
|
14
|
+
expect(Topic).to respond_to(:neo_model_config)
|
15
|
+
end
|
16
|
+
|
9
17
|
it 'returns the model config singleton' do
|
10
18
|
expect(Topic.neo_model_config.class).to eq Neoon::Model::Config
|
11
19
|
end
|
@@ -2,80 +2,54 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe Neoon::Model::Node do
|
4
4
|
|
5
|
-
before :
|
5
|
+
before :all do
|
6
6
|
require 'app/models/topic'
|
7
|
+
Topic.neo_schema_update
|
7
8
|
Topic.destroy_all
|
8
9
|
end
|
9
10
|
|
10
|
-
|
11
|
-
|
12
|
-
expect(Topic).to respond_to(:neoon)
|
13
|
-
end
|
14
|
-
|
15
|
-
it 'responds to neo_model_config' do
|
16
|
-
expect(Topic).to respond_to(:neo_model_config)
|
17
|
-
end
|
11
|
+
after :all do
|
12
|
+
Topic.destroy_all
|
18
13
|
end
|
19
14
|
|
20
|
-
|
21
|
-
before do
|
22
|
-
@t = Topic.where(:name => 'Apple').first_or_create
|
23
|
-
end
|
24
|
-
|
25
|
-
after :all do
|
26
|
-
Topic.destroy_all
|
27
|
-
end
|
15
|
+
let(:topic) { Topic.where(:name => 'Apple').first_or_create }
|
28
16
|
|
29
|
-
|
30
|
-
|
17
|
+
context 'save' do
|
18
|
+
it 'responds to .neo_save' do
|
19
|
+
expect(topic).to respond_to(:neo_save)
|
31
20
|
end
|
32
21
|
|
33
22
|
it 'sets neo_node_properties' do
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
end
|
38
|
-
|
39
|
-
it 'saves to neo' do
|
40
|
-
@t.neo_node._id.should == @t.id
|
23
|
+
expect(topic.neo_node_properties[:_id]).to eql topic.id
|
24
|
+
expect(topic.neo_node_properties[:name]).to eql topic.name
|
25
|
+
expect(topic.neo_node_properties[:slug]).to eql "#{topic.id}-#{topic.name.underscore}"
|
41
26
|
end
|
42
27
|
|
43
|
-
it '
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
@t.neo_node._id.should == @t.id
|
48
|
-
|
49
|
-
@t.update_attribute(:name, 'Technology')
|
50
|
-
@t.neo_node.name.should == 'Technology'
|
51
|
-
@t.neo_node._id.should == @t.id
|
28
|
+
it 'has same values' do
|
29
|
+
expect(topic.neo_node._id).to eql topic.id
|
30
|
+
expect(topic.neo_node.name).to eql topic.name
|
31
|
+
expect(topic.neo_node.slug).to eql "#{topic.id}-#{topic.name.underscore}"
|
52
32
|
end
|
53
33
|
|
54
34
|
it 'has 1 record' do
|
55
|
-
Topic.count.
|
56
|
-
Topic.count.
|
35
|
+
expect(Topic.count).to eql Neoon.db.q('MATCH n:Topic return n').data.count
|
36
|
+
expect(Topic.count).to eql 1
|
57
37
|
end
|
58
38
|
end
|
59
39
|
|
60
40
|
context 'destroy' do
|
61
|
-
|
62
|
-
|
41
|
+
it 'responds to .neo_destroy' do
|
42
|
+
expect(topic).to respond_to(:neo_destroy)
|
63
43
|
end
|
64
44
|
|
65
|
-
|
66
|
-
|
45
|
+
it 'doesn\'t exist in neo4j' do
|
46
|
+
topic.destroy
|
47
|
+
expect { topic.neo_node }.to raise_error Neoon::Error::NodeNotFoundException
|
67
48
|
end
|
68
49
|
|
69
|
-
it '
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
it 'has 2 records' do
|
74
|
-
topic = Topic.new name: 'Jo'
|
75
|
-
topic.save
|
76
|
-
|
77
|
-
Topic.count.should == Neoon.db.q('MATCH n:Topic return n').data.count
|
78
|
-
Topic.count.should == 2
|
50
|
+
it 'has 0 record' do
|
51
|
+
expect(Topic.count).to eql Neoon.db.q('MATCH n:Topic return n').data.count
|
52
|
+
expect(Topic.count).to eql 0
|
79
53
|
end
|
80
54
|
end
|
81
55
|
|
@@ -9,7 +9,7 @@ describe Neoon::Model::Schema do
|
|
9
9
|
|
10
10
|
context 'list index' do
|
11
11
|
context 'from model config' do
|
12
|
-
it 'responds to neo_schema_index_keys' do
|
12
|
+
it 'responds to .neo_schema_index_keys' do
|
13
13
|
expect(Topic).to respond_to(:neo_schema_index_keys)
|
14
14
|
end
|
15
15
|
it 'returns all indexed properties' do
|
@@ -52,7 +52,7 @@ describe Neoon::Model::Schema do
|
|
52
52
|
end
|
53
53
|
|
54
54
|
context 'create index' do
|
55
|
-
it 'responds to neo_index_create' do
|
55
|
+
it 'responds to .neo_index_create' do
|
56
56
|
expect(Topic).to respond_to(:neo_index_create)
|
57
57
|
end
|
58
58
|
|
@@ -63,8 +63,8 @@ describe Neoon::Model::Schema do
|
|
63
63
|
expect(Topic.neo_index_create(:slug)).to be_true
|
64
64
|
expect(Topic.neo_index_list.keys).to eql [:name, :slug]
|
65
65
|
|
66
|
-
expect
|
67
|
-
expect
|
66
|
+
expect(Topic.neo_index_create(:name).result[:error].class).to eq Neoon::Error::AlreadyIndexedException
|
67
|
+
expect(Topic.neo_index_create(:slug).result[:error].class).to eq Neoon::Error::AlreadyConstrainedException
|
68
68
|
end
|
69
69
|
|
70
70
|
end
|
@@ -75,7 +75,7 @@ describe Neoon::Model::Schema do
|
|
75
75
|
Topic.neo_index_create(:slug)
|
76
76
|
end
|
77
77
|
|
78
|
-
it 'responds to neo_index_drop' do
|
78
|
+
it 'responds to .neo_index_drop' do
|
79
79
|
expect(Topic).to respond_to(:neo_index_drop)
|
80
80
|
end
|
81
81
|
|
@@ -86,8 +86,8 @@ describe Neoon::Model::Schema do
|
|
86
86
|
expect(Topic.neo_index_drop(:slug)).to be_true
|
87
87
|
expect(Topic.neo_index_list.keys).to eql []
|
88
88
|
|
89
|
-
expect
|
90
|
-
expect
|
89
|
+
expect(Topic.neo_index_drop(:name).result[:error].class).to eq Neoon::Error::DropIndexFailureException
|
90
|
+
expect(Topic.neo_index_drop(:slug).result[:error].class).to eq Neoon::Error::DropIndexFailureException
|
91
91
|
end
|
92
92
|
end
|
93
93
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neoon
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Amr Tamimi
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-10-16 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -157,6 +157,7 @@ files:
|
|
157
157
|
- lib/neoon/config.rb
|
158
158
|
- lib/neoon/cypher/handler.rb
|
159
159
|
- lib/neoon/cypher/instance_query.rb
|
160
|
+
- lib/neoon/cypher/node/operations.rb
|
160
161
|
- lib/neoon/cypher/query.rb
|
161
162
|
- lib/neoon/cypher/schema/constraints.rb
|
162
163
|
- lib/neoon/cypher/schema/indexes.rb
|