neo4j 1.0.0.beta.9 → 1.0.0.beta.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. data/README.rdoc +5 -1971
  2. data/lib/neo4j/mapping/class_methods/relationship.rb +2 -2
  3. data/lib/neo4j/mapping/decl_relationship_dsl.rb +6 -1
  4. data/lib/neo4j/mapping/has_n.rb +17 -1
  5. data/lib/neo4j/node_traverser.rb +14 -1
  6. data/lib/neo4j/rails/model.rb +127 -31
  7. data/lib/neo4j/rails/tx_methods.rb +11 -0
  8. data/lib/neo4j/rails/value.rb +44 -1
  9. data/lib/neo4j/version.rb +1 -1
  10. data/lib/neo4j.rb +1 -0
  11. metadata +4 -59
  12. data/lib/neo4j.old/batch_inserter.rb +0 -144
  13. data/lib/neo4j.old/config.rb +0 -138
  14. data/lib/neo4j.old/event_handler.rb +0 -73
  15. data/lib/neo4j.old/extensions/activemodel.rb +0 -158
  16. data/lib/neo4j.old/extensions/aggregate/aggregate_enum.rb +0 -40
  17. data/lib/neo4j.old/extensions/aggregate/ext/node_mixin.rb +0 -69
  18. data/lib/neo4j.old/extensions/aggregate/node_aggregate.rb +0 -8
  19. data/lib/neo4j.old/extensions/aggregate/node_aggregate_mixin.rb +0 -331
  20. data/lib/neo4j.old/extensions/aggregate/node_aggregator.rb +0 -216
  21. data/lib/neo4j.old/extensions/aggregate/node_group.rb +0 -43
  22. data/lib/neo4j.old/extensions/aggregate/prop_group.rb +0 -30
  23. data/lib/neo4j.old/extensions/aggregate/property_enum.rb +0 -24
  24. data/lib/neo4j.old/extensions/aggregate/props_aggregate.rb +0 -8
  25. data/lib/neo4j.old/extensions/aggregate/props_aggregate_mixin.rb +0 -31
  26. data/lib/neo4j.old/extensions/aggregate/props_aggregator.rb +0 -80
  27. data/lib/neo4j.old/extensions/aggregate.rb +0 -12
  28. data/lib/neo4j.old/extensions/find_path.rb +0 -117
  29. data/lib/neo4j.old/extensions/graph_algo/all_simple_paths.rb +0 -133
  30. data/lib/neo4j.old/extensions/graph_algo/neo4j-graph-algo-0.3.jar +0 -0
  31. data/lib/neo4j.old/extensions/graph_algo.rb +0 -1
  32. data/lib/neo4j.old/extensions/reindexer.rb +0 -104
  33. data/lib/neo4j.old/extensions/rest/rest.rb +0 -336
  34. data/lib/neo4j.old/extensions/rest/rest_mixin.rb +0 -193
  35. data/lib/neo4j.old/extensions/rest/server.rb +0 -50
  36. data/lib/neo4j.old/extensions/rest/stubs.rb +0 -141
  37. data/lib/neo4j.old/extensions/rest.rb +0 -21
  38. data/lib/neo4j.old/extensions/rest_master.rb +0 -34
  39. data/lib/neo4j.old/extensions/rest_slave.rb +0 -31
  40. data/lib/neo4j.old/extensions/tx_tracker.rb +0 -392
  41. data/lib/neo4j.old/indexer.rb +0 -187
  42. data/lib/neo4j.old/jars/geronimo-jta_1.1_spec-1.1.1.jar +0 -0
  43. data/lib/neo4j.old/jars/neo4j-kernel-1.0.jar +0 -0
  44. data/lib/neo4j.old/jars.rb +0 -6
  45. data/lib/neo4j.old/mixins/java_list_mixin.rb +0 -139
  46. data/lib/neo4j.old/mixins/java_node_mixin.rb +0 -205
  47. data/lib/neo4j.old/mixins/java_property_mixin.rb +0 -169
  48. data/lib/neo4j.old/mixins/java_relationship_mixin.rb +0 -60
  49. data/lib/neo4j.old/mixins/migration_mixin.rb +0 -157
  50. data/lib/neo4j.old/mixins/node_mixin.rb +0 -249
  51. data/lib/neo4j.old/mixins/property_class_methods.rb +0 -265
  52. data/lib/neo4j.old/mixins/rel_class_methods.rb +0 -167
  53. data/lib/neo4j.old/mixins/relationship_mixin.rb +0 -103
  54. data/lib/neo4j.old/neo.rb +0 -247
  55. data/lib/neo4j.old/node.rb +0 -49
  56. data/lib/neo4j.old/reference_node.rb +0 -15
  57. data/lib/neo4j.old/relationship.rb +0 -85
  58. data/lib/neo4j.old/relationships/decl_relationship_dsl.rb +0 -164
  59. data/lib/neo4j.old/relationships/has_list.rb +0 -101
  60. data/lib/neo4j.old/relationships/has_n.rb +0 -129
  61. data/lib/neo4j.old/relationships/node_traverser.rb +0 -138
  62. data/lib/neo4j.old/relationships/relationship_dsl.rb +0 -149
  63. data/lib/neo4j.old/relationships/traversal_position.rb +0 -50
  64. data/lib/neo4j.old/relationships/wrappers.rb +0 -51
  65. data/lib/neo4j.old/search_result.rb +0 -72
  66. data/lib/neo4j.old/transaction.rb +0 -254
  67. data/lib/neo4j.old/version.rb +0 -3
@@ -1,141 +0,0 @@
1
- module Neo4j
2
- module Rest
3
- # A stub class that talk to a neo4j rest server.
4
- # It behaves like a Neo4j::Node, but instead of actually performing operation
5
- # it talks to the server over HTTP/JSON
6
- #
7
- module RestStubMixin
8
- attr_accessor :json
9
-
10
- def initialize(uri_or_json_hash)
11
- if uri_or_json_hash.kind_of?(Hash)
12
- @json = uri_or_json_hash
13
- else
14
- @json = RestHttpMethods.get_request(uri_or_json_hash)
15
- end
16
- end
17
-
18
- def [](key)
19
- @json['properties'][key.to_s]
20
- end
21
-
22
- def relationships
23
- RelationshipTraverserStub.new(@json['rels'])
24
- end
25
-
26
-
27
- def relationship?(type, dir=:outgoing)
28
- rels.rel?(type, dir)
29
- end
30
-
31
- def props
32
- @json['properties']
33
- end
34
- end
35
-
36
- module RestHttpMethods # :nodoc:
37
- class << self
38
- def get_request(resource, args = {})
39
- body = _get_request(resource, args)
40
- JSON.parse(body)
41
- end
42
-
43
- def _get_request(resource, args)
44
- _request(resource, :get, args)
45
- end
46
-
47
- def _request(resource, method = :get, args = {})
48
- url = URI.parse(resource)
49
- host = url.host
50
- host.sub!(/0\.0\.0\.0/, 'localhost')
51
-
52
- #if args
53
- # url.query = args.map { |k, v| "%s=%s" % [URI.encode(k), URI.encode(v)] }.join("&")
54
- #end
55
-
56
- req =
57
- case method
58
- when :put
59
- Net::HTTP::Put.new(url.path)
60
- when :get
61
- Net::HTTP::Get.new(url.path)
62
- when :post
63
- Net::HTTP::Post.new(url.path)
64
- end
65
-
66
- http = Net::HTTP.new(host, url.port)
67
- res = http.start() { |conn| conn.request(req) }
68
- res.body
69
- end
70
- end
71
- end
72
-
73
-
74
- class RelationshipStub # :nodoc:
75
- include RestStubMixin
76
-
77
- def start_node
78
- uri = @json['start_node']['uri']
79
- NodeStub.new(uri)
80
- end
81
-
82
- def end_node
83
- uri = @json['end_node']['uri']
84
- NodeStub.new(uri)
85
- end
86
-
87
- end
88
-
89
- class RelationshipTraverserStub
90
- include Enumerable
91
-
92
- def initialize(json)
93
- @json = json
94
- end
95
-
96
- def outgoing(rel_type)
97
- @rel_type = rel_type
98
- self
99
- end
100
-
101
- def relationship?(type, dir=:outgoing)
102
- !@json[type.to_s].nil?
103
- end
104
-
105
- def nodes
106
- @return_nodes = true
107
- self
108
- end
109
-
110
- def first
111
- each do |x|
112
- return x if !block_given? || yield(x)
113
- end
114
- end
115
-
116
- def each
117
- keys =
118
- if @rel_type.nil?
119
- @json.keys # take all keys
120
- else
121
- [@rel_type.to_s]
122
- end
123
-
124
- keys.each do |rel_type|
125
- next unless rel?(rel_type)
126
- if @return_nodes
127
- @json[rel_type.to_s].each {|uri| yield RelationshipStub.new(uri).end_node}
128
- else
129
- @json[rel_type.to_s].each {|uri| yield RelationshipStub.new(uri)}
130
- end
131
- end
132
- end
133
- end
134
-
135
- # A class that simply includes the RestStubMixin
136
- class NodeStub
137
- include RestStubMixin
138
- end
139
-
140
- end
141
- end
@@ -1,21 +0,0 @@
1
- require 'net/http'
2
- require 'thread'
3
- require 'json'
4
- require 'sinatra/base'
5
-
6
- require 'neo4j/extensions/rest/rest'
7
- require 'neo4j/extensions/rest/rest_mixin'
8
- require 'neo4j/extensions/rest/stubs'
9
- require 'neo4j/extensions/rest/server'
10
-
11
- # Provides Neo4j::NodeMixin::ClassMethods#all
12
- require 'neo4j/extensions/reindexer'
13
-
14
-
15
- module Neo4j
16
- # Make the ReferenceNode available as a REST resource
17
- # not possible to do much without that node being exposed ...
18
- class ReferenceNode
19
- include Neo4j::RestMixin
20
- end
21
- end
@@ -1,34 +0,0 @@
1
- require 'neo4j'
2
- require 'neo4j/extensions/rest'
3
- require 'neo4j/extensions/tx_tracker'
4
-
5
- module Neo4j
6
- class TxNode
7
- include Neo4j::RestMixin
8
- end
9
-
10
- class TxRelationshipCreatedNode
11
- include Neo4j::RestMixin
12
- end
13
-
14
- class TxNodeCreated
15
- include Neo4j::RestMixin
16
- end
17
-
18
- class TxNodeList
19
- include Neo4j::RestMixin
20
- end
21
-
22
- class ReferenceNode
23
- include Neo4j::RestMixin
24
- end
25
-
26
-
27
- # FOR TESTING PURPOSE ----
28
-
29
- class Node
30
- include Neo4j::RestMixin # for making it easier to test
31
- end
32
-
33
- Neo4j::Config[:storage_path] = 'tmp/master'
34
- end
@@ -1,31 +0,0 @@
1
- require 'net/http'
2
- require 'thread'
3
- require 'json'
4
- #require 'sinatra/base'
5
- require 'neo4j/extensions/rest/stubs'
6
-
7
-
8
- require 'neo4j/extensions/tx_tracker'
9
-
10
- module Neo4j
11
-
12
- module Rest #:nodoc: all
13
- def self.base_uri
14
- Neo4j::Config[:master_neo4j_uri]
15
- end
16
- end
17
-
18
-
19
- # TODO This is not working yet !
20
- def self.replicate
21
- neo_master = Neo4j::Rest::NodeStub.new(Config[:master_neo4j_uri] + "/neo")
22
- neo_ref_node = Neo4j::Rest::NodeStub.new(neo_master[:ref_node])
23
- tx_node_list = neo_ref_node.rels.outgoing(:tx_node_list).nodes.first
24
- tx_node = tx_node_list.rels.outgoing(:tx_nodes).nodes.first
25
- Neo4j::Transaction.run do
26
- Neo4j::TxNodeList.instance.redo_tx(tx_node)
27
- end
28
- end
29
-
30
- Config[:master_neo4j_uri] = 'http://localhost:9123'
31
- end
@@ -1,392 +0,0 @@
1
- module Neo4j
2
-
3
-
4
- # The relationship class between TxNodes
5
- class TxNodeRelationship
6
- include Neo4j::RelationshipMixin
7
- end
8
-
9
- # This nodes listen for all events like node nodes created/deleted or
10
- # if a property/relationship has changed. When a event is triggered it
11
- #
12
- class TxNodeList
13
- include Neo4j::NodeMixin
14
-
15
- has_list(:tx_nodes).relationship(TxNodeRelationship)
16
-
17
- def on_node_created(node)
18
- tx = TxNodeCreated.new
19
- uuid = Neo4j.create_uuid
20
- node[:uuid] = uuid # TODO should use a better UUID
21
- tx[:tracked_neo_id] = node.neo_id
22
- tx[:tracked_classname] = node.class.to_s unless node.kind_of?(org.neo4j.graphdb.Node)
23
- tx[:created] = true
24
- tx[:uuid] = uuid
25
- tx_nodes << tx
26
- end
27
-
28
- def on_node_deleted(node)
29
- tx = TxNode.new
30
- tx[:uuid] = node[:uuid]
31
- tx[:deleted] = true
32
- tx[:tracked_classname] = node.class.to_s unless node.kind_of?(org.neo4j.graphdb.Node)
33
- tx_nodes << tx
34
- end
35
-
36
-
37
- def on_tx_finished(tx)
38
- return if self.tx_nodes.empty? # nothing yet commited
39
- last_commited_node = self.tx_nodes.first
40
- last_commited_node[:tx_finished] = true
41
- end
42
-
43
- def on_property_changed(node, key, old_value, new_value)
44
- return if "uuid" == key.to_s # do not track uuid
45
- tx = TxNode.new
46
- tx[:uuid] = node[:uuid]
47
- tx[:property_changed] = true
48
- tx[:tracked_neo_id] = node.neo_id
49
- tx[:key] = key
50
- tx[:old_value] = old_value
51
- tx[:new_value] = new_value
52
- tx_nodes << tx
53
- end
54
-
55
- def on_relationship_created(relationship)
56
- # check so that it was no this method that caused this event
57
- return if tx_nodes.relationship_type.to_sym == relationship.relationship_type.to_sym
58
- tx = TxRelationshipCreatedNode.new
59
- uuid = Neo4j.create_uuid
60
- tx[:uuid] = uuid
61
- tx[:relationship_created] = true
62
- tx[:tracked_neo_id] = relationship.neo_id
63
- tx[:start_node_uuid] = relationship.start_node[:uuid]
64
- tx[:end_node_uuid] = relationship.end_node[:uuid]
65
- tx[:relationship_type] = relationship.relationship_type.to_s
66
- relationship[:uuid] = uuid
67
- tx_nodes << tx
68
- end
69
-
70
-
71
- def on_relationship_deleted(relationship)
72
- # check so that it was no this method that caused this event
73
- return if tx_nodes.relationship_type.to_sym == relationship.relationship_type.to_sym
74
- tx = TxNode.new
75
- uuid = Neo4j.create_uuid
76
- tx[:uuid] = uuid
77
- tx[:relationship_deleted] = true
78
- tx[:tracked_neo_id] = relationship.neo_id
79
- tx[:relationship_type] = relationship.relationship_type.to_s
80
- tx[:start_node_uuid] = relationship.start_node[:uuid]
81
- tx[:end_node_uuid] = relationship.end_node[:uuid]
82
- tx_nodes << tx
83
- end
84
-
85
-
86
- # Return a list of TxNodes that belongs to the same transaction
87
- # Will always include the specified from_tx_node
88
- # It will follow the linked list of tx nodes until it founds a new transaction.
89
- def tx_nodes_belonging_to_same_tx(from_tx_node)
90
- nodes_in_same_tx = []
91
- nodes_in_same_tx << from_tx_node # always include the first one
92
-
93
- # include all other nodes until we find a new transaction marker
94
- curr_node = from_tx_node
95
-
96
- while (true) do
97
- curr_node = curr_node.list(:tx_nodes).next
98
- break if curr_node.nil?
99
- break if curr_node[:tx_finished]
100
- nodes_in_same_tx << curr_node
101
- end
102
- nodes_in_same_tx
103
- end
104
-
105
- def create_node(tx_node)
106
- classname = tx_node[:tracked_classname]
107
- node = if classname.nil?
108
- Neo4j::Node.new
109
- else
110
- clazz = classname.split("::").inject(Kernel) do |container, name|
111
- container.const_get(name.to_s)
112
- end
113
- clazz.new
114
- end
115
-
116
- uuid = tx_node[:uuid]
117
- tx_node = find_tx(node.neo_id, :tracked_neo_id)
118
- #tx_node = find_tx_node(uuid)
119
- tx_node[:uuid] = uuid
120
- tx_node[:tracked_neo_id] = node.neo_id
121
- node[:uuid] = uuid
122
- end
123
-
124
- def delete_node(tx_node)
125
- uuid = tx_node[:uuid]
126
- node = load_node_with_uuid(uuid)
127
- node.del
128
- end
129
-
130
- def undo_property_changed(tx_node)
131
- uuid = tx_node[:uuid]
132
- node = load_node_with_uuid(uuid)
133
- key = tx_node[:key]
134
- old_value = tx_node[:old_value]
135
- node[key] = old_value
136
- end
137
-
138
- def redo_property_changed(tx_node)
139
- uuid = tx_node[:uuid]
140
- node = load_node_with_uuid(uuid)
141
- key = tx_node[:key]
142
- new_value = tx_node[:new_value]
143
- node[key] = new_value
144
- end
145
-
146
- def create_relationship(tx_node)
147
- # recreate deleted relationship
148
- type = tx_node[:relationship_type]
149
- start_node_uuid = tx_node[:start_node_uuid]
150
- end_node_uuid = tx_node[:end_node_uuid]
151
- start_node = load_node_with_uuid(start_node_uuid)
152
- end_node = load_node_with_uuid(end_node_uuid)
153
- start_node.rels.outgoing(type) << end_node
154
- end
155
-
156
- def delete_relationship(tx_node)
157
- relationship = load_relationship_with_uuid(tx_node[:uuid])
158
- relationship.del
159
- end
160
-
161
-
162
- def redo_tx(from_tx_node)
163
- nodes_to_redo = tx_nodes_belonging_to_same_tx(from_tx_node)
164
- nodes_to_redo.reverse_each do |curr_node|
165
- if (curr_node[:created])
166
- create_node(curr_node)
167
- elsif (curr_node[:deleted])
168
- delete_node(curr_node)
169
- elsif (curr_node[:property_changed])
170
- redo_property_changed(curr_node)
171
- elsif (curr_node[:relationship_created])
172
- create_relationship(curr_node)
173
- elsif (curr_node[:relationship_deleted])
174
- delete_relationship(curr_node)
175
- else
176
- raise "unknow tx #{curr_node.props.inspect}"
177
- end
178
- end
179
- end
180
-
181
- def undo_tx(from_tx_node = tx_nodes.first)
182
- return if from_tx_node.nil?
183
-
184
- nodes_to_undo = tx_nodes_belonging_to_same_tx(from_tx_node)
185
-
186
- nodes_to_undo.each do |curr_node|
187
- if (curr_node[:created])
188
- delete_node(curr_node)
189
- elsif (curr_node[:deleted])
190
- create_node(curr_node)
191
- elsif (curr_node[:property_changed])
192
- undo_property_changed(curr_node)
193
- elsif (curr_node[:relationship_created])
194
- delete_relationship(curr_node)
195
- elsif (curr_node[:relationship_deleted])
196
- create_relationship(curr_node)
197
- else
198
- raise "unknow tx #{curr_node.props.inspect}"
199
- end
200
- end
201
- end
202
-
203
-
204
- # Load a neo4j node given a cluster wide UUID (instead of id)
205
- # :api: public
206
- def load_node_with_uuid(uuid)
207
- txnode = find_tx_node(uuid)
208
- return if txnode.nil?
209
- # does this node exist ?
210
- id = txnode[:tracked_neo_id]
211
- Neo4j.load_node(id)
212
- end
213
-
214
-
215
- # Load a neo4j relatinship given a cluster wide UUID (instead of id)
216
- # :api: public
217
- def load_relationship_with_uuid(uuid)
218
- txnode = find_tx_relationship(uuid)
219
- return if txnode.nil?
220
- # does this node exist ?
221
- id = txnode[:tracked_neo_id]
222
- Neo4j.load_rel(id)
223
- end
224
-
225
-
226
- # :api: private
227
- def find_tx_node(uuid) # :nodoc:
228
- # since lucene only updates the index after the transaction commits we
229
- # first look in the current transaction
230
- found = find_tx(uuid)
231
- # if not found that find it with lucene
232
- found ||= TxNodeCreated.find(:uuid => uuid).first
233
- found
234
- end
235
-
236
-
237
- # :api: private
238
- def find_tx_relationship(uuid) # :nodoc:
239
- TxRelationshipCreatedNode.find(:uuid => uuid).first
240
- end
241
-
242
-
243
- # Find a TxNodeCreate node in the latest transaction with the given uuid
244
- def find_tx(value, key = :uuid) # :nodoc:
245
- tx_nodes.find {|node| node[:_classname] == TxNodeCreated.to_s && node[key] == value}
246
- end
247
-
248
- # Create a new a neo4j node given a cluster wide UUID (instead of id)
249
- # :nodoc:
250
- # :api: private
251
- def create_node_with_uuid(uuid)
252
- txnode = find_tx_node(uuid)
253
- return if txnode.nil?
254
- # does this node exist ?
255
- id = txnode[:tracked_neo_id]
256
- Neo4j.load_node(id)
257
- end
258
-
259
- #
260
- # Class methods ------------------------------------------------------
261
- #
262
-
263
- def self.on_neo_started(neo_instance)
264
- Neo4j::Transaction.run do
265
- # has the tx_node_list already been created ?
266
- unless neo_instance.ref_node.rel?(:tx_node_list)
267
- # it does not exist - create it
268
- neo_instance.ref_node.rels.outgoing(:tx_node_list) << TxNodeList.new
269
- end
270
- # cache this so we do not have to look it up always
271
- @tx_node_list = neo_instance.ref_node.rels.outgoing(:tx_node_list).nodes.first
272
- Neo4j.event_handler.add(@tx_node_list)
273
- end
274
- end
275
-
276
- def self.on_neo_stopped(neo_instance)
277
- # unregister the instance
278
- Neo4j.event_handler.remove(@tx_node_list)
279
- @tx_node_list = nil
280
- end
281
-
282
-
283
- def self.instance
284
- Neo4j.start unless @tx_node_list
285
- @tx_node_list
286
- end
287
- end
288
-
289
-
290
- # Keeps the uuid of created relationship in a lucene index
291
- class TxRelationshipCreatedNode
292
- include Neo4j::NodeMixin
293
-
294
- belongs_to_list(:tx_nodes).relationship(TxNodeRelationship)
295
-
296
- property :uuid
297
- index :uuid
298
-
299
- def to_s
300
- "TxRelationshipCreatedNode: " + props.inspect
301
- end
302
- end
303
-
304
-
305
- # Keeps the uuid of created nodes in a lucene index
306
- class TxNodeCreated
307
- include Neo4j::NodeMixin
308
-
309
- belongs_to_list(:tx_nodes).relationship(TxNodeRelationship)
310
-
311
- property :uuid
312
- index :uuid
313
-
314
- def to_s
315
- "TxNodeCreated: " + props.inspect
316
- end
317
- end
318
-
319
-
320
- # Represent an events like property change
321
- # Does not represend events for relationship and node creations
322
- class TxNode
323
- include Neo4j::NodeMixin
324
-
325
- belongs_to_list(:tx_nodes).relationship(TxNodeRelationship)
326
-
327
- def to_s
328
- "TxNode: " + props.inspect
329
- end
330
- end
331
-
332
-
333
- #-------------------------------------------------
334
- # Neo4j Module Methods
335
- #
336
- #-------------------------------------------------
337
-
338
-
339
- # Loads the tx tracker extension
340
- def self.load_tx_tracker
341
- Neo4j.event_handler.add_filter(TxNode)
342
- Neo4j.event_handler.add_filter(TxNodeCreated)
343
- Neo4j.event_handler.add_filter(TxRelationshipCreatedNode)
344
-
345
- Neo4j.event_handler.add(TxNodeList)
346
- Neo4j.event_handler.add(TxNodeRelationship)
347
- # if neo is already run we have to let txnodelist have a chance to add it self
348
- # TxNodeList.on_neo_started(Neo4j.instance) if Neo4j.running?
349
- Neo4j::Transaction.run { TxNodeList.on_neo_started(Neo4j) } if Neo4j.running?
350
- end
351
-
352
- def self.unload_tx_tracker
353
- Neo4j.event_handler.remove_filter(TxNode)
354
- Neo4j.event_handler.remove_filter(TxNodeCreated)
355
- Neo4j.event_handler.remove_filter(TxRelationshipCreatedNode)
356
-
357
- Neo4j.event_handler.remove(TxNodeList)
358
- Neo4j.event_handler.remove(TxNodeRelationship)
359
- end
360
-
361
- # Undo the last transaction
362
- #
363
- # :api: public
364
- def self.undo_tx
365
- TxNodeList.instance.undo_tx
366
- end
367
-
368
-
369
- # Loads a node with the given uuid
370
- # Returns nil if not found other wise the Node.
371
- # :api: public
372
- def self.load_node_with_uuid(uuid)
373
- TxNodeList.instance.load_node_with_uuid(uuid)
374
- end
375
-
376
-
377
- # Loads a relationship with the given uuid
378
- # Returns nil if not found other wise the Node.
379
- # :api: public
380
- def self.load_relationship_with_uuid(uuid)
381
- TxNodeList.instance.load_relationship_with_uuid(uuid)
382
- end
383
-
384
- # Generates a new unique uuid
385
- def self.create_uuid
386
- rand(100000000) # TODO a very bad UUID generator ...
387
- end
388
-
389
- Neo4j.load_tx_tracker
390
-
391
-
392
- end