em-emitter 0.9.0.beta.1 → 0.9.0.beta.2
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.
- data/lib/em-emitter/emitter.rb +34 -4
- data/lib/em-emitter/observable.rb +11 -2
- data/lib/em-emitter/observer.rb +3 -2
- metadata +2 -2
data/lib/em-emitter/emitter.rb
CHANGED
@@ -19,20 +19,50 @@ module EM
|
|
19
19
|
def self.add_observer(object, event, method_to_call)
|
20
20
|
raise EM::Emitter::MaxObserversReachedException.new if @@observers.count >= @@max_listeners
|
21
21
|
|
22
|
-
|
22
|
+
observer = EM::Emitter::Observer.new(event, object, method_to_call)
|
23
23
|
|
24
|
-
@@observers
|
24
|
+
@@observers << observer
|
25
|
+
|
26
|
+
# emit a system event that an observer has been added with the observer and the listener count
|
27
|
+
EM::Emitter::emit({
|
28
|
+
:from => '_emitter',
|
29
|
+
:action => 'add_observer'
|
30
|
+
}, {
|
31
|
+
:observer => observer,
|
32
|
+
:listeners_count => @@observers.count
|
33
|
+
})
|
34
|
+
|
35
|
+
observer
|
25
36
|
end
|
26
37
|
|
27
38
|
def self.remove_observer(observer)
|
28
39
|
@@observers.delete_if { |x| x == observer }
|
40
|
+
|
41
|
+
# emit a system event that an observer has been remove with the observer and the listener count
|
42
|
+
EM::Emitter::emit({
|
43
|
+
:from => '_emitter',
|
44
|
+
:action => 'remove_observer'
|
45
|
+
}, {
|
46
|
+
:observer => observer,
|
47
|
+
:listeners_count => @@observers.count
|
48
|
+
})
|
29
49
|
end
|
30
50
|
|
31
51
|
def self.clear_observers!
|
32
52
|
@@observers = []
|
53
|
+
|
54
|
+
# emit a system event that all observers have been removed
|
55
|
+
EM::Emitter::emit({
|
56
|
+
:from => '_emitter',
|
57
|
+
:action => 'clear_observers'
|
58
|
+
}, {
|
59
|
+
:listeners_count => @@observers.count
|
60
|
+
})
|
61
|
+
|
62
|
+
@@observers.count
|
33
63
|
end
|
34
64
|
|
35
|
-
def self.emit(
|
65
|
+
def self.emit(event, data)
|
36
66
|
@@observers.each do |ob|
|
37
67
|
if ob.is_active && ob.event == event
|
38
68
|
# make the observer method calls async
|
@@ -44,7 +74,7 @@ module EM
|
|
44
74
|
end
|
45
75
|
|
46
76
|
EM.next_tick do
|
47
|
-
# remove non active items
|
77
|
+
# remove non active items
|
48
78
|
@@observers.delete_if { |x| x.is_active == false }
|
49
79
|
end
|
50
80
|
end
|
@@ -2,6 +2,9 @@ module EM
|
|
2
2
|
module Emitter
|
3
3
|
module Observable
|
4
4
|
|
5
|
+
attr_reader :receivers
|
6
|
+
# TODO: pass event along with data to methods
|
7
|
+
|
5
8
|
def uses_clone(cloner)
|
6
9
|
@uses_clone = cloner
|
7
10
|
end
|
@@ -12,15 +15,21 @@ module EM
|
|
12
15
|
object = clone_data(object)
|
13
16
|
end
|
14
17
|
|
15
|
-
EM::Emitter.emit(
|
18
|
+
EM::Emitter.emit(event, object)
|
16
19
|
self
|
17
20
|
end
|
18
21
|
|
19
22
|
def receiver(event, method_name)
|
20
|
-
|
23
|
+
@receivers ||= []
|
24
|
+
@receivers << EM::Emitter.add_observer(self, event, method_name)
|
21
25
|
self
|
22
26
|
end
|
23
27
|
|
28
|
+
def remove_receivers!
|
29
|
+
@receivers.each { |rec| EM::Emitter.remove_observer(rec) }
|
30
|
+
@receivers = []
|
31
|
+
end
|
32
|
+
|
24
33
|
def clone_data(object)
|
25
34
|
# clone or copy depending on type
|
26
35
|
if object.nil?
|
data/lib/em-emitter/observer.rb
CHANGED
@@ -16,8 +16,9 @@ module EM
|
|
16
16
|
|
17
17
|
def call_action(data)
|
18
18
|
# only invoke the method if it can be invoked
|
19
|
-
if @object.nil? == false && @object.respond_to?(@method)
|
20
|
-
@object.
|
19
|
+
if @object.nil? == false && @object.respond_to?(@method) &&
|
20
|
+
(@object.method(@method).arity == 2 || @object.method(@method).arity == -1)
|
21
|
+
@object.send(@method, data, @event.event_hash)
|
21
22
|
end
|
22
23
|
end
|
23
24
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: em-emitter
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.9.0.beta.
|
4
|
+
version: 0.9.0.beta.2
|
5
5
|
prerelease: 6
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-10-
|
12
|
+
date: 2012-10-11 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: eventmachine
|