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.
@@ -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