neo4j 5.0.2 → 5.0.3
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/CHANGELOG.md +4 -0
- data/lib/neo4j/active_node/has_n/association.rb +20 -13
- data/lib/neo4j/active_node/has_n.rb +0 -18
- data/lib/neo4j/active_node/query/query_proxy.rb +4 -2
- data/lib/neo4j/active_node/query/query_proxy_eager_loading.rb +46 -0
- data/lib/neo4j/shared/persistence.rb +17 -1
- data/lib/neo4j/version.rb +1 -1
- data/lib/neo4j.rb +1 -0
- 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: a74b7d45b24d73d7a6b74a9fd422ac3868812a1e
|
4
|
+
data.tar.gz: af35506b1d68f73313ab0dea22328c5cb9233186
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2b49582690880a513369153e59db263e513dd437baa090406f051b0e05059a67026761f84b46a42b31fdb4afb1de4ecc35aea7a19e5ff3e273e7aa9aea5617a5
|
7
|
+
data.tar.gz: 9f74ec13fee9f81dadd6aacaf59fd1845623fb939be6ff90742f761f46b5ab8348b72efa47765c23dbff89f5bbc7f0ae12b67cf8bc6e1de4654bd5bac1604b46
|
data/CHANGELOG.md
CHANGED
@@ -5,6 +5,10 @@ This project adheres to [Semantic Versioning](http://semver.org/).
|
|
5
5
|
|
6
6
|
## [Unreleased][unreleased]
|
7
7
|
|
8
|
+
### Changed
|
9
|
+
- `ActiveNode#destroyed?` and `ActiveRel#destroyed?` now only consider the in-memory state of if an object is destroyed without checking the database
|
10
|
+
- Moved `#with_associations` method from `AssociationProxy` to `QueryProxy` so that all `QueryProxy` chains can benefit from it.
|
11
|
+
|
8
12
|
## [5.0.2] - 2015-06-30
|
9
13
|
|
10
14
|
### Fixed
|
@@ -6,7 +6,8 @@ module Neo4j
|
|
6
6
|
class Association
|
7
7
|
include Neo4j::Shared::RelTypeConverters
|
8
8
|
include Neo4j::ActiveNode::Dependent::AssociationMethods
|
9
|
-
|
9
|
+
|
10
|
+
attr_reader :type, :name, :relationship, :direction, :dependent, :model_class
|
10
11
|
|
11
12
|
def initialize(type, direction, name, options = {type: nil})
|
12
13
|
validate_init_arguments(type, direction, name, options)
|
@@ -58,10 +59,22 @@ module Neo4j
|
|
58
59
|
end
|
59
60
|
end
|
60
61
|
|
62
|
+
def target_classes
|
63
|
+
target_class_names.map(&:constantize)
|
64
|
+
end
|
65
|
+
|
61
66
|
def target_classes_or_nil
|
62
67
|
@target_classes_or_nil ||= discovered_model if target_class_names
|
63
68
|
end
|
64
69
|
|
70
|
+
def target_where_clause
|
71
|
+
return if model_class == false
|
72
|
+
|
73
|
+
Array.new(target_classes).map do |target_class|
|
74
|
+
"#{name}:#{target_class.mapped_label_name}"
|
75
|
+
end.join(' OR ')
|
76
|
+
end
|
77
|
+
|
65
78
|
def discovered_model
|
66
79
|
target_class_names.map(&:constantize).select do |constant|
|
67
80
|
constant.ancestors.include?(::Neo4j::ActiveNode)
|
@@ -87,12 +100,9 @@ module Neo4j
|
|
87
100
|
|
88
101
|
def relationship_type(create = false)
|
89
102
|
case
|
90
|
-
when relationship_class
|
91
|
-
|
92
|
-
when @
|
93
|
-
@relationship_type
|
94
|
-
when @origin
|
95
|
-
origin_type
|
103
|
+
when relationship_class then relationship_class_type
|
104
|
+
when @relationship_type then @relationship_type
|
105
|
+
when @origin then origin_type
|
96
106
|
else
|
97
107
|
(create || exceptional_target_class?) && decorated_rel_type(@name)
|
98
108
|
end
|
@@ -130,12 +140,9 @@ module Neo4j
|
|
130
140
|
|
131
141
|
def direction_cypher(relationship_cypher, create, reverse = false)
|
132
142
|
case get_direction(create, reverse)
|
133
|
-
when :out
|
134
|
-
|
135
|
-
when :
|
136
|
-
"<-#{relationship_cypher}-"
|
137
|
-
when :both
|
138
|
-
"-#{relationship_cypher}-"
|
143
|
+
when :out then "-#{relationship_cypher}->"
|
144
|
+
when :in then "<-#{relationship_cypher}-"
|
145
|
+
when :both then "-#{relationship_cypher}-"
|
139
146
|
end
|
140
147
|
end
|
141
148
|
|
@@ -84,26 +84,8 @@ module Neo4j::ActiveNode
|
|
84
84
|
target.public_send(method_name, *args, &block)
|
85
85
|
end
|
86
86
|
|
87
|
-
def with_associations(*spec)
|
88
|
-
return_object_clause = '[' + spec.map { |n| "collect(#{n})" }.join(',') + ']'
|
89
|
-
query_from_association_spec(spec).pluck(:previous, return_object_clause).map do |record, eager_data|
|
90
|
-
eager_data.each_with_index do |eager_records, index|
|
91
|
-
record.send(spec[index]).cache_result(eager_records)
|
92
|
-
end
|
93
|
-
|
94
|
-
record
|
95
|
-
end
|
96
|
-
end
|
97
|
-
|
98
87
|
private
|
99
88
|
|
100
|
-
def query_from_association_spec(spec)
|
101
|
-
spec.inject(@query_proxy.query_as(:previous).return(:previous)) do |query, association_name|
|
102
|
-
association = @query_proxy.model.associations[association_name]
|
103
|
-
query.optional_match("previous#{association.arrow_cypher}#{association_name}")
|
104
|
-
end
|
105
|
-
end
|
106
|
-
|
107
89
|
def target_for_missing_method(method_name)
|
108
90
|
case method_name
|
109
91
|
when *QUERY_PROXY_METHODS
|
@@ -5,6 +5,7 @@ module Neo4j
|
|
5
5
|
include Neo4j::ActiveNode::Query::QueryProxyEnumerable
|
6
6
|
include Neo4j::ActiveNode::Query::QueryProxyMethods
|
7
7
|
include Neo4j::ActiveNode::Query::QueryProxyFindInBatches
|
8
|
+
include Neo4j::ActiveNode::Query::QueryProxyEagerLoading
|
8
9
|
include Neo4j::ActiveNode::Dependent::QueryProxyMethods
|
9
10
|
|
10
11
|
# The most recent node to start a QueryProxy chain.
|
@@ -37,6 +38,7 @@ module Neo4j
|
|
37
38
|
@association = association
|
38
39
|
@context = options.delete(:context)
|
39
40
|
@options = options
|
41
|
+
@associations_spec = []
|
40
42
|
|
41
43
|
instance_vars_from_options!(options)
|
42
44
|
|
@@ -317,8 +319,8 @@ module Neo4j
|
|
317
319
|
end
|
318
320
|
|
319
321
|
def build_deeper_query_proxy(method, args)
|
320
|
-
new_link.tap do |
|
321
|
-
Link.for_args(@model, method, args).each { |link|
|
322
|
+
new_link.tap do |new_query_proxy|
|
323
|
+
Link.for_args(@model, method, args).each { |link| new_query_proxy._add_links(link) }
|
322
324
|
end
|
323
325
|
end
|
324
326
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module ActiveNode
|
3
|
+
module Query
|
4
|
+
module QueryProxyEagerLoading
|
5
|
+
def initialize(model, association = nil, options = {})
|
6
|
+
@associations_spec = []
|
7
|
+
|
8
|
+
super
|
9
|
+
end
|
10
|
+
|
11
|
+
def each(node = true, rel = nil, &block)
|
12
|
+
if @associations_spec.size > 0
|
13
|
+
return_object_clause = '[' + @associations_spec.map { |n| "collect(#{n})" }.join(',') + ']'
|
14
|
+
query_from_association_spec.pluck(identity, return_object_clause).map do |record, eager_data|
|
15
|
+
eager_data.each_with_index do |eager_records, index|
|
16
|
+
record.association_proxy(@associations_spec[index]).cache_result(eager_records)
|
17
|
+
end
|
18
|
+
|
19
|
+
block.call(record)
|
20
|
+
end
|
21
|
+
else
|
22
|
+
super
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def with_associations(*spec)
|
27
|
+
new_link.tap do |new_query_proxy|
|
28
|
+
new_spec = new_query_proxy.instance_variable_get('@associations_spec') + spec
|
29
|
+
new_query_proxy.instance_variable_set('@associations_spec', new_spec)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def query_from_association_spec
|
36
|
+
@associations_spec.inject(query_as(identity).return(identity)) do |query, association_name|
|
37
|
+
association = model.associations[association_name]
|
38
|
+
|
39
|
+
query.optional_match("#{identity}#{association.arrow_cypher}#{association_name}")
|
40
|
+
.where(association.target_where_clause)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -78,9 +78,25 @@ module Neo4j::Shared
|
|
78
78
|
|
79
79
|
# Returns +true+ if the object was destroyed.
|
80
80
|
def destroyed?
|
81
|
-
@_deleted ||
|
81
|
+
@_deleted || _destroyed_double_check?
|
82
82
|
end
|
83
83
|
|
84
|
+
# These two methods should be removed in 6.0.0
|
85
|
+
def _destroyed_double_check?
|
86
|
+
if _active_record_destroyed_behavior?
|
87
|
+
true
|
88
|
+
else
|
89
|
+
(!new_record? && !exist?)
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def _active_record_destroyed_behavior?
|
94
|
+
fail 'Remove this workaround in 6.0.0' if Neo4j::VERSION >= '6.0.0'
|
95
|
+
|
96
|
+
!!Neo4j::Config[:_active_record_destroyed_behavior]
|
97
|
+
end
|
98
|
+
# End of two methods which should be removed in 6.0.0
|
99
|
+
|
84
100
|
|
85
101
|
# @return [Hash] all defined and none nil properties
|
86
102
|
def props
|
data/lib/neo4j/version.rb
CHANGED
data/lib/neo4j.rb
CHANGED
@@ -55,6 +55,7 @@ require 'neo4j/active_node/query_methods'
|
|
55
55
|
require 'neo4j/active_node/query/query_proxy_methods'
|
56
56
|
require 'neo4j/active_node/query/query_proxy_enumerable'
|
57
57
|
require 'neo4j/active_node/query/query_proxy_find_in_batches'
|
58
|
+
require 'neo4j/active_node/query/query_proxy_eager_loading'
|
58
59
|
require 'neo4j/active_node/query/query_proxy_link'
|
59
60
|
require 'neo4j/active_node/labels'
|
60
61
|
require 'neo4j/active_node/id_property'
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: neo4j
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 5.0.
|
4
|
+
version: 5.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andreas Ronge, Brian Underwood, Chris Grigg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-
|
11
|
+
date: 2015-07-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: orm_adapter
|
@@ -240,6 +240,7 @@ files:
|
|
240
240
|
- lib/neo4j/active_node/property.rb
|
241
241
|
- lib/neo4j/active_node/query.rb
|
242
242
|
- lib/neo4j/active_node/query/query_proxy.rb
|
243
|
+
- lib/neo4j/active_node/query/query_proxy_eager_loading.rb
|
243
244
|
- lib/neo4j/active_node/query/query_proxy_enumerable.rb
|
244
245
|
- lib/neo4j/active_node/query/query_proxy_find_in_batches.rb
|
245
246
|
- lib/neo4j/active_node/query/query_proxy_link.rb
|