neo4j 2.0.0.alpha.5-java → 2.0.0.alpha.6-java
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGELOG +12 -0
- data/Gemfile +0 -4
- data/README.rdoc +106 -62
- data/lib/neo4j.rb +7 -33
- data/lib/neo4j/performance.rb +43 -0
- data/lib/neo4j/rails/accept_id.rb +19 -18
- data/lib/neo4j/rails/attributes.rb +366 -120
- data/lib/neo4j/rails/finders.rb +41 -15
- data/lib/neo4j/rails/has_n.rb +203 -0
- data/lib/neo4j/rails/identity.rb +25 -0
- data/lib/neo4j/rails/model.rb +65 -242
- data/lib/neo4j/rails/nested_attributes.rb +108 -0
- data/lib/neo4j/rails/node_persistance.rb +56 -0
- data/lib/neo4j/rails/observer.rb +0 -2
- data/lib/neo4j/rails/persistence.rb +32 -154
- data/lib/neo4j/rails/rack_middleware.rb +26 -2
- data/lib/neo4j/rails/rails.rb +9 -6
- data/lib/neo4j/rails/railtie.rb +1 -2
- data/lib/neo4j/rails/relationship.rb +18 -125
- data/lib/neo4j/rails/relationship_persistence.rb +107 -0
- data/lib/neo4j/rails/relationships/node_dsl.rb +72 -44
- data/lib/neo4j/rails/relationships/relationships.rb +187 -59
- data/lib/neo4j/rails/relationships/rels_dsl.rb +18 -17
- data/lib/neo4j/rails/relationships/storage.rb +19 -17
- data/lib/neo4j/rails/timestamps.rb +53 -51
- data/lib/neo4j/rails/transaction.rb +9 -1
- data/lib/neo4j/rails/validations/uniqueness.rb +1 -1
- data/lib/neo4j/rails/versioning/versioning.rb +2 -2
- data/lib/neo4j/version.rb +1 -1
- data/lib/orm_adapter/adapters/neo4j.rb +47 -46
- data/neo4j.gemspec +1 -1
- metadata +10 -69
- data/lib/neo4j/algo/algo.rb +0 -294
- data/lib/neo4j/batch/batch.rb +0 -4
- data/lib/neo4j/batch/indexer.rb +0 -109
- data/lib/neo4j/batch/inserter.rb +0 -179
- data/lib/neo4j/batch/rule_inserter.rb +0 -24
- data/lib/neo4j/batch/rule_node.rb +0 -72
- data/lib/neo4j/config.rb +0 -177
- data/lib/neo4j/core_ext/class/inheritable_attributes.rb +0 -12
- data/lib/neo4j/core_ext/class/rewrite_inheritable_attributes.rb +0 -170
- data/lib/neo4j/database.rb +0 -158
- data/lib/neo4j/equal.rb +0 -21
- data/lib/neo4j/event_handler.rb +0 -263
- data/lib/neo4j/has_list/class_methods.rb +0 -11
- data/lib/neo4j/has_list/has_list.rb +0 -3
- data/lib/neo4j/has_list/mapping.rb +0 -133
- data/lib/neo4j/has_n/class_methods.rb +0 -119
- data/lib/neo4j/has_n/decl_relationship_dsl.rb +0 -246
- data/lib/neo4j/has_n/has_n.rb +0 -3
- data/lib/neo4j/has_n/mapping.rb +0 -98
- data/lib/neo4j/identity_map.rb +0 -140
- data/lib/neo4j/index/class_methods.rb +0 -108
- data/lib/neo4j/index/index.rb +0 -39
- data/lib/neo4j/index/indexer.rb +0 -341
- data/lib/neo4j/index/indexer_registry.rb +0 -68
- data/lib/neo4j/index/lucene_query.rb +0 -256
- data/lib/neo4j/load.rb +0 -25
- data/lib/neo4j/migrations/class_methods.rb +0 -110
- data/lib/neo4j/migrations/extensions.rb +0 -58
- data/lib/neo4j/migrations/lazy_node_mixin.rb +0 -41
- data/lib/neo4j/migrations/migration.rb +0 -112
- data/lib/neo4j/migrations/migrations.rb +0 -6
- data/lib/neo4j/migrations/node_mixin.rb +0 -80
- data/lib/neo4j/migrations/ref_node_wrapper.rb +0 -32
- data/lib/neo4j/model.rb +0 -4
- data/lib/neo4j/neo4j.rb +0 -216
- data/lib/neo4j/node.rb +0 -270
- data/lib/neo4j/node_mixin/class_methods.rb +0 -51
- data/lib/neo4j/node_mixin/node_mixin.rb +0 -141
- data/lib/neo4j/paginated.rb +0 -23
- data/lib/neo4j/property/class_methods.rb +0 -79
- data/lib/neo4j/property/property.rb +0 -111
- data/lib/neo4j/rails/mapping/property.rb +0 -183
- data/lib/neo4j/rails/rel_persistence.rb +0 -237
- data/lib/neo4j/relationship.rb +0 -239
- data/lib/neo4j/relationship_mixin/class_methods.rb +0 -36
- data/lib/neo4j/relationship_mixin/relationship_mixin.rb +0 -142
- data/lib/neo4j/relationship_set.rb +0 -58
- data/lib/neo4j/rels/rels.rb +0 -110
- data/lib/neo4j/rels/traverser.rb +0 -102
- data/lib/neo4j/rule/class_methods.rb +0 -201
- data/lib/neo4j/rule/event_listener.rb +0 -66
- data/lib/neo4j/rule/functions/count.rb +0 -43
- data/lib/neo4j/rule/functions/function.rb +0 -74
- data/lib/neo4j/rule/functions/functions.rb +0 -3
- data/lib/neo4j/rule/functions/sum.rb +0 -29
- data/lib/neo4j/rule/rule.rb +0 -150
- data/lib/neo4j/rule/rule_node.rb +0 -217
- data/lib/neo4j/to_java.rb +0 -31
- data/lib/neo4j/transaction.rb +0 -73
- data/lib/neo4j/traversal/filter_predicate.rb +0 -25
- data/lib/neo4j/traversal/prune_evaluator.rb +0 -14
- data/lib/neo4j/traversal/rel_expander.rb +0 -31
- data/lib/neo4j/traversal/traversal.rb +0 -141
- data/lib/neo4j/traversal/traverser.rb +0 -284
- data/lib/neo4j/type_converters/type_converters.rb +0 -288
@@ -0,0 +1,108 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Rails
|
3
|
+
module NestedAttributes
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
extend TxMethods
|
6
|
+
|
7
|
+
def update_nested_attributes(rel_type, attr, options)
|
8
|
+
allow_destroy, reject_if = [options[:allow_destroy], options[:reject_if]] if options
|
9
|
+
begin
|
10
|
+
# Check if we want to destroy not found nodes (e.g. {..., :_destroy => '1' } ?
|
11
|
+
destroy = attr.delete(:_destroy)
|
12
|
+
found = _find_node(rel_type, attr[:id]) || Neo4j::Rails::Model.find(attr[:id])
|
13
|
+
if allow_destroy && destroy && destroy != '0'
|
14
|
+
found.destroy if found
|
15
|
+
else
|
16
|
+
if not found
|
17
|
+
_create_entity(rel_type, attr) #Create new node from scratch
|
18
|
+
else
|
19
|
+
#Create relationship to existing node in case it doesn't exist already
|
20
|
+
_add_relationship(rel_type, found) if (not _has_relationship(rel_type, attr[:id]))
|
21
|
+
found.update_attributes(attr)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end unless reject_if?(reject_if, attr)
|
25
|
+
end
|
26
|
+
tx_methods :update_nested_attributes
|
27
|
+
|
28
|
+
|
29
|
+
module ClassMethods
|
30
|
+
def accepts_nested_attributes_for(*attr_names)
|
31
|
+
options = attr_names.pop if attr_names[-1].is_a?(Hash)
|
32
|
+
|
33
|
+
attr_names.each do |association_name|
|
34
|
+
# Do some validation that we have defined the relationships we want to nest
|
35
|
+
rel = self._decl_rels[association_name.to_sym]
|
36
|
+
raise "No relationship declared with has_n or has_one with type #{association_name}" unless rel
|
37
|
+
raise "Can't use accepts_nested_attributes_for(#{association_name}) since it has not defined which class it has a relationship to, use has_n(#{association_name}).to(MyOtherClass)" unless rel.target_class
|
38
|
+
|
39
|
+
if rel.has_one?
|
40
|
+
send(:define_method, "#{association_name}_attributes=") do |attributes|
|
41
|
+
update_nested_attributes(association_name.to_sym, attributes, options)
|
42
|
+
end
|
43
|
+
else
|
44
|
+
send(:define_method, "#{association_name}_attributes=") do |attributes|
|
45
|
+
if attributes.is_a?(Array)
|
46
|
+
attributes.each do |attr|
|
47
|
+
update_nested_attributes(association_name.to_sym, attr, options)
|
48
|
+
end
|
49
|
+
else
|
50
|
+
attributes.each_value do |attr|
|
51
|
+
update_nested_attributes(association_name.to_sym, attr, options)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
protected
|
62
|
+
|
63
|
+
def _create_entity(rel_type, attr)
|
64
|
+
clazz = self.class._decl_rels[rel_type.to_sym].target_class
|
65
|
+
_add_relationship(rel_type, clazz.new(attr))
|
66
|
+
end
|
67
|
+
|
68
|
+
def _add_relationship(rel_type, node)
|
69
|
+
if respond_to?("#{rel_type}_rel")
|
70
|
+
send("#{rel_type}=", node)
|
71
|
+
elsif respond_to?("#{rel_type}_rels")
|
72
|
+
has_n = send("#{rel_type}")
|
73
|
+
has_n << node
|
74
|
+
else
|
75
|
+
raise "oops #{rel_type}"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
|
79
|
+
def _find_node(rel_type, id)
|
80
|
+
return nil if id.nil?
|
81
|
+
if respond_to?("#{rel_type}_rel")
|
82
|
+
send("#{rel_type}")
|
83
|
+
elsif respond_to?("#{rel_type}_rels")
|
84
|
+
has_n = send("#{rel_type}")
|
85
|
+
has_n.find { |n| n.id == id }
|
86
|
+
else
|
87
|
+
raise "oops #{rel_type}"
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
def _has_relationship(rel_type, id)
|
92
|
+
!_find_node(rel_type, id).nil?
|
93
|
+
end
|
94
|
+
|
95
|
+
def reject_if?(proc_or_symbol, attr)
|
96
|
+
return false if proc_or_symbol.nil?
|
97
|
+
if proc_or_symbol.is_a?(Symbol)
|
98
|
+
meth = method(proc_or_symbol)
|
99
|
+
meth.arity == 0 ? meth.call : meth.call(attr)
|
100
|
+
else
|
101
|
+
proc_or_symbol.call(attr)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
module Neo4j
|
2
|
+
module Rails
|
3
|
+
module NodePersistence
|
4
|
+
extend TxMethods
|
5
|
+
|
6
|
+
def initialize(attributes = nil)
|
7
|
+
initialize_relationships
|
8
|
+
initialize_attributes(attributes)
|
9
|
+
end
|
10
|
+
|
11
|
+
|
12
|
+
def create
|
13
|
+
node = Neo4j::Node.new
|
14
|
+
init_on_load(node)
|
15
|
+
Neo4j::IdentityMap.add(node, self)
|
16
|
+
init_on_create
|
17
|
+
write_changed_relationships
|
18
|
+
clear_relationships
|
19
|
+
true
|
20
|
+
end
|
21
|
+
|
22
|
+
def update
|
23
|
+
super
|
24
|
+
write_changed_relationships
|
25
|
+
clear_relationships
|
26
|
+
true
|
27
|
+
end
|
28
|
+
|
29
|
+
# Reload the object from the DB
|
30
|
+
def reload(options = nil)
|
31
|
+
# Can't reload a none persisted node
|
32
|
+
return self if new_record?
|
33
|
+
clear_changes
|
34
|
+
clear_relationships
|
35
|
+
clear_composition_cache
|
36
|
+
reset_attributes
|
37
|
+
unless reload_from_database
|
38
|
+
set_deleted_properties
|
39
|
+
freeze
|
40
|
+
end
|
41
|
+
self
|
42
|
+
end
|
43
|
+
|
44
|
+
|
45
|
+
def reload_from_database
|
46
|
+
Neo4j::IdentityMap.remove_node_by_id(neo_id)
|
47
|
+
if reloaded = self.class.load_entity(neo_id)
|
48
|
+
send(:attributes=, reloaded.attributes, false)
|
49
|
+
end
|
50
|
+
reloaded
|
51
|
+
end
|
52
|
+
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
data/lib/neo4j/rails/observer.rb
CHANGED
@@ -2,11 +2,8 @@ module Neo4j
|
|
2
2
|
module Rails
|
3
3
|
module Persistence
|
4
4
|
extend ActiveSupport::Concern
|
5
|
+
extend TxMethods
|
5
6
|
|
6
|
-
included do
|
7
|
-
extend TxMethods
|
8
|
-
tx_methods :destroy, :create, :update, :update_nested_attributes, :delete, :update_attributes, :update_attributes!
|
9
|
-
end
|
10
7
|
|
11
8
|
# Persist the object to the database. Validations and Callbacks are included
|
12
9
|
# by default but validation can be disabled by passing :validate => false
|
@@ -14,6 +11,7 @@ module Neo4j
|
|
14
11
|
def save(*)
|
15
12
|
create_or_update
|
16
13
|
end
|
14
|
+
tx_methods :save
|
17
15
|
|
18
16
|
# Persist the object to the database. Validations and Callbacks are included
|
19
17
|
# by default but validation can be disabled by passing :validate => false
|
@@ -26,18 +24,14 @@ module Neo4j
|
|
26
24
|
end
|
27
25
|
end
|
28
26
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
# * Callbacks are invoked.
|
34
|
-
# * Updates all the attributes that are dirty in this object.
|
35
|
-
#
|
36
|
-
def update_attribute(name, value)
|
37
|
-
respond_to?("#{name}=") ? send("#{name}=", value) : self[name] = value
|
38
|
-
save(:validate => false)
|
27
|
+
def update
|
28
|
+
write_changed_attributes
|
29
|
+
clear_changes
|
30
|
+
true
|
39
31
|
end
|
40
32
|
|
33
|
+
|
34
|
+
|
41
35
|
# Removes the node from Neo4j and freezes the object.
|
42
36
|
def destroy
|
43
37
|
delete
|
@@ -47,39 +41,14 @@ module Neo4j
|
|
47
41
|
# Same as #destroy but doesn't run destroy callbacks and doesn't freeze
|
48
42
|
# the object
|
49
43
|
def delete
|
50
|
-
del unless new_record?
|
44
|
+
del unless new_record? || destroyed?
|
51
45
|
set_deleted_properties
|
52
46
|
end
|
47
|
+
tx_methods :delete
|
53
48
|
|
54
49
|
# Returns true if the object was destroyed.
|
55
|
-
def destroyed?
|
56
|
-
@_deleted ||
|
57
|
-
end
|
58
|
-
|
59
|
-
# Updates this resource with all the attributes from the passed-in Hash and requests that the record be saved.
|
60
|
-
# If saving fails because the resource is invalid then false will be returned.
|
61
|
-
def update_attributes(attributes)
|
62
|
-
self.attributes = attributes
|
63
|
-
save
|
64
|
-
end
|
65
|
-
|
66
|
-
# Same as #update_attributes, but raises an exception if saving fails.
|
67
|
-
def update_attributes!(attributes)
|
68
|
-
self.attributes = attributes
|
69
|
-
save!
|
70
|
-
end
|
71
|
-
|
72
|
-
# Reload the object from the DB.
|
73
|
-
def reload(options = nil)
|
74
|
-
clear_changes
|
75
|
-
clear_relationships
|
76
|
-
clear_composition_cache
|
77
|
-
reset_attributes
|
78
|
-
unless reload_from_database
|
79
|
-
set_deleted_properties
|
80
|
-
freeze
|
81
|
-
end
|
82
|
-
self
|
50
|
+
def destroyed?
|
51
|
+
@_deleted || (!new_record? && !self.class.load_entity(neo_id))
|
83
52
|
end
|
84
53
|
|
85
54
|
# Returns if the record is persisted, i.e. it’s not a new record and it was not destroyed
|
@@ -89,23 +58,38 @@ module Neo4j
|
|
89
58
|
|
90
59
|
# Returns true if the record hasn't been saved to Neo4j yet.
|
91
60
|
def new_record?
|
92
|
-
|
61
|
+
_java_entity.nil?
|
93
62
|
end
|
94
63
|
|
95
64
|
alias :new? :new_record?
|
96
65
|
|
97
66
|
# Freeze the properties hash.
|
98
67
|
def freeze
|
99
|
-
@
|
68
|
+
@_properties.freeze
|
69
|
+
self
|
100
70
|
end
|
101
71
|
|
102
72
|
# Returns +true+ if the properties hash has been frozen.
|
103
73
|
def frozen?
|
104
|
-
reload
|
105
|
-
@
|
74
|
+
reload unless new_record?
|
75
|
+
@_properties.frozen?
|
106
76
|
end
|
107
77
|
|
78
|
+
|
108
79
|
module ClassMethods
|
80
|
+
|
81
|
+
def transaction(&block)
|
82
|
+
Neo4j::Rails::Transaction.run do |tx|
|
83
|
+
block.call(tx)
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
def new(*args, &block)
|
88
|
+
instance = orig_new(*args, &block)
|
89
|
+
instance.instance_eval(&block) if block
|
90
|
+
instance
|
91
|
+
end
|
92
|
+
|
109
93
|
# Initialize a model and set a bunch of attributes at the same time. Returns
|
110
94
|
# the object whether saved successfully or not.
|
111
95
|
def create(*args)
|
@@ -143,114 +127,8 @@ module Neo4j
|
|
143
127
|
end
|
144
128
|
end
|
145
129
|
|
146
|
-
def update
|
147
|
-
write_changed_attributes
|
148
|
-
write_changed_relationships
|
149
|
-
clear_changes
|
150
|
-
clear_relationships
|
151
|
-
true
|
152
|
-
end
|
153
|
-
|
154
|
-
def create
|
155
|
-
node = Neo4j::Node.new
|
156
|
-
@_java_node = node
|
157
|
-
Neo4j::IdentityMap.add(node, self)
|
158
|
-
init_on_create
|
159
|
-
clear_changes
|
160
|
-
clear_relationships
|
161
|
-
true
|
162
|
-
end
|
163
|
-
|
164
|
-
def init_on_create(*)
|
165
|
-
self._classname = self.class.to_s
|
166
|
-
write_default_attributes
|
167
|
-
write_changed_attributes
|
168
|
-
write_changed_relationships
|
169
|
-
end
|
170
|
-
|
171
|
-
def reset_attributes
|
172
|
-
@properties = {}
|
173
|
-
end
|
174
|
-
|
175
|
-
def reload_from_database
|
176
|
-
Neo4j::IdentityMap.remove_node_by_id(id)
|
177
|
-
if reloaded = self.class.load(id)
|
178
|
-
clear_relationships
|
179
|
-
send(:attributes=, reloaded.attributes, false)
|
180
|
-
end
|
181
|
-
reloaded
|
182
|
-
end
|
183
|
-
|
184
130
|
def set_deleted_properties
|
185
|
-
@_deleted
|
186
|
-
@_persisted = false
|
187
|
-
@_java_node = nil
|
188
|
-
end
|
189
|
-
|
190
|
-
# Ensure any defaults are stored in the DB
|
191
|
-
def write_default_attributes
|
192
|
-
attribute_defaults.each do |attribute, value|
|
193
|
-
write_attribute(attribute, Neo4j::TypeConverters.convert(value, attribute, self.class, false)) unless changed_attributes.has_key?(attribute) || _java_node.has_property?(attribute)
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
# Write attributes to the Neo4j DB only if they're altered
|
198
|
-
def write_changed_attributes
|
199
|
-
@properties.each do |attribute, value|
|
200
|
-
write_attribute(attribute, value) if changed_attributes.has_key?(attribute)
|
201
|
-
end
|
202
|
-
end
|
203
|
-
|
204
|
-
def _create_entity(rel_type, attr)
|
205
|
-
clazz = self.class._decl_rels[rel_type.to_sym].target_class
|
206
|
-
_add_relationship(rel_type, clazz.new(attr))
|
207
|
-
end
|
208
|
-
|
209
|
-
def _add_relationship(rel_type, node)
|
210
|
-
if respond_to?("#{rel_type}_rel")
|
211
|
-
send("#{rel_type}=", node)
|
212
|
-
elsif respond_to?("#{rel_type}_rels")
|
213
|
-
has_n = send("#{rel_type}")
|
214
|
-
has_n << node
|
215
|
-
else
|
216
|
-
raise "oops #{rel_type}"
|
217
|
-
end
|
218
|
-
end
|
219
|
-
|
220
|
-
def _find_node(rel_type, id)
|
221
|
-
return nil if id.nil?
|
222
|
-
if respond_to?("#{rel_type}_rel")
|
223
|
-
send("#{rel_type}")
|
224
|
-
elsif respond_to?("#{rel_type}_rels")
|
225
|
-
has_n = send("#{rel_type}")
|
226
|
-
has_n.find { |n| n.id == id }
|
227
|
-
else
|
228
|
-
raise "oops #{rel_type}"
|
229
|
-
end
|
230
|
-
end
|
231
|
-
|
232
|
-
def _has_relationship(rel_type, id)
|
233
|
-
!_find_node(rel_type,id).nil?
|
234
|
-
end
|
235
|
-
|
236
|
-
def update_nested_attributes(rel_type, attr, options)
|
237
|
-
allow_destroy, reject_if = [options[:allow_destroy], options[:reject_if]] if options
|
238
|
-
begin
|
239
|
-
# Check if we want to destroy not found nodes (e.g. {..., :_destroy => '1' } ?
|
240
|
-
destroy = attr.delete(:_destroy)
|
241
|
-
found = _find_node(rel_type, attr[:id]) || Model.find(attr[:id])
|
242
|
-
if allow_destroy && destroy && destroy != '0'
|
243
|
-
found.destroy if found
|
244
|
-
else
|
245
|
-
if not found
|
246
|
-
_create_entity(rel_type, attr) #Create new node from scratch
|
247
|
-
else
|
248
|
-
#Create relationship to existing node in case it doesn't exist already
|
249
|
-
_add_relationship(rel_type, found) if (not _has_relationship(rel_type,attr[:id]))
|
250
|
-
found.update_attributes(attr)
|
251
|
-
end
|
252
|
-
end
|
253
|
-
end unless reject_if?(reject_if, attr)
|
131
|
+
@_deleted = true
|
254
132
|
end
|
255
133
|
|
256
134
|
public
|
@@ -2,18 +2,42 @@ module Neo4j
|
|
2
2
|
module Rails
|
3
3
|
# close lucene connections
|
4
4
|
# reset the Neo4j.threadlocal_ref_node (Multitenancy)
|
5
|
-
|
5
|
+
# clear the identity map
|
6
|
+
class Middleware
|
7
|
+
class Body #:nodoc:
|
8
|
+
def initialize(target, original)
|
9
|
+
@target = target
|
10
|
+
@original = original
|
11
|
+
end
|
12
|
+
|
13
|
+
def each(&block)
|
14
|
+
@target.each(&block)
|
15
|
+
end
|
16
|
+
|
17
|
+
def close
|
18
|
+
@target.close if @target.respond_to?(:close)
|
19
|
+
ensure
|
20
|
+
IdentityMap.enabled = @original
|
21
|
+
IdentityMap.clear
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
6
25
|
def initialize(app)
|
7
26
|
@app = app
|
8
27
|
end
|
9
28
|
|
10
29
|
def call(env)
|
11
|
-
|
30
|
+
enabled = IdentityMap.enabled
|
31
|
+
IdentityMap.enabled = Neo4j::Config[:identity_map]
|
32
|
+
status, headers, body = @app.call(env)
|
33
|
+
[status, headers, Body.new(body, enabled)]
|
12
34
|
ensure
|
13
35
|
Neo4j::Rails::Model.close_lucene_connections
|
14
36
|
Neo4j.threadlocal_ref_node = Neo4j.default_ref_node
|
15
37
|
end
|
16
38
|
end
|
39
|
+
|
17
40
|
end
|
18
41
|
|
42
|
+
|
19
43
|
end
|