em-emitter 0.9.0.beta.1 → 0.9.0.beta.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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
- @@observers << EM::Emitter::Observer.new(event, object, method_to_call)
22
+ observer = EM::Emitter::Observer.new(event, object, method_to_call)
23
23
 
24
- @@observers.count
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(object, event, data)
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 first
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(self, event, object)
18
+ EM::Emitter.emit(event, object)
16
19
  self
17
20
  end
18
21
 
19
22
  def receiver(event, method_name)
20
- EM::Emitter.add_observer(self, event, method_name)
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?
@@ -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.send(@method, data)
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.1
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-09 00:00:00.000000000 Z
12
+ date: 2012-10-11 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: eventmachine