/
event_handler.rb
64 lines (51 loc) · 2.01 KB
/
event_handler.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
module Neo4j
# Handles events like a new node is created or deleted
class EventHandler
def initialize
@listeners = []
@filter_classes = []
end
def add(listener)
@listeners << listener unless @listeners.include?(listener)
add_filter(listener) # the listener do not want to get events on it self
end
def remove(listener)
@listeners.delete(listener)
end
def remove_all
@listeners = []
end
def add_filter(filter_class)
@filter_classes << filter_class unless @filter_classes.include?(filter_class)
end
def node_created(node)
return if @filter_classes.include?(node.class)
@listeners.each {|li| li.on_node_created(node) if li.respond_to?(:on_node_created)}
end
def node_deleted(node)
return if @filter_classes.include?(node.class)
@listeners.each {|li| li.on_node_deleted(node) if li.respond_to?(:on_node_deleted)}
end
def relationship_created(relationship)
return if @filter_classes.include?(relationship.class)
@listeners.each {|li| li.on_relationship_created(relationship) if li.respond_to?(:on_relationship_created)}
end
def relationship_deleted(relationship)
return if @filter_classes.include?(relationship.class)
@listeners.each {|li| li.on_relationship_deleted(relationship) if li.respond_to?(:on_relationship_deleted)}
end
def property_changed(node, key, old_value, new_value)
return if @filter_classes.include?(node.class)
@listeners.each {|li| li.on_property_changed(node, key, old_value, new_value) if li.respond_to?(:on_property_changed)}
end
def tx_finished(tx)
@listeners.each {|li| li.on_tx_finished(tx) if li.respond_to?(:on_tx_finished)}
end
def neo_started(neo_instance)
@listeners.each {|li| li.on_neo_started(neo_instance) if li.respond_to?(:on_neo_started)}
end
def neo_stopped(neo_instance)
@listeners.each {|li| li.on_neo_stopped(neo_instance) if li.respond_to?(:on_neo_stopped)}
end
end
end