events 0.9.5 → 0.9.6

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.
@@ -103,6 +103,7 @@ module Events # :nodoc:
103
103
  emit(:new_listener, event, listener)
104
104
 
105
105
  event_listeners = listeners(event)
106
+ event_listeners.push(listener)
106
107
 
107
108
  current = event_listeners.length
108
109
  if max_listeners > 0 && current > max_listeners && !event_listeners.warned
@@ -113,7 +114,6 @@ module Events # :nodoc:
113
114
  event_listeners.warned = true
114
115
  end
115
116
 
116
- event_listeners.push(listener)
117
117
  self
118
118
  end
119
119
  alias on add_listener
@@ -155,11 +155,13 @@ module Events # :nodoc:
155
155
  self
156
156
  end
157
157
 
158
- # :call-seq: emitter.remove_all_listeners(event) -> emitter
158
+ # :call-seq: emitter.remove_all_listeners -> emitter
159
+ # emitter.remove_all_listeners(event) -> emitter
159
160
  #
160
- # Removes all listeners from the listener array for the specified event.
161
+ # Removes all listeners, or those of the specified event.
161
162
  #
162
- def remove_all_listeners(event)
163
+ def remove_all_listeners(event=:_remove_all_listeners_default_arg_)
164
+ @listeners = nil if event == :_remove_all_listeners_default_arg_
163
165
  if @listeners && @listeners.key?(event)
164
166
  @listeners[event].clear
165
167
  @listeners.delete(event)
@@ -1,7 +1,8 @@
1
1
  require "test/unit"
2
2
  require "../lib/events"
3
3
 
4
- # Tests transliterated from javascript originals at http://github.com/ry/node/
4
+ # Tests transliterated from javascript originals at
5
+ # http://github.com/joyent/node/
5
6
  class TestEventEmitter < Test::Unit::TestCase
6
7
 
7
8
  # /test/simple/test-event-emitter-add-listeners.js
@@ -36,6 +37,35 @@ class TestEventEmitter < Test::Unit::TestCase
36
37
  assert_equal(1, times_hello_emited)
37
38
  end
38
39
 
40
+ # /test/simple/test-event-emitter-check-listener-leaks.js
41
+ def test_event_emitter_check_listener_leaks
42
+ e = Events::EventEmitter.new
43
+
44
+ # default
45
+ 10.times do
46
+ e.on(:default) {}
47
+ end
48
+ assert(!e.listeners(:default).warned)
49
+ e.on(:default) {}
50
+ assert(e.listeners(:default).warned)
51
+
52
+ # specific
53
+ e.max_listeners = 5
54
+ 5.times do
55
+ e.on(:specific) {}
56
+ end
57
+ assert(!e.listeners(:specific).warned)
58
+ e.on(:specific) {}
59
+ assert(e.listeners(:specific).warned)
60
+
61
+ # unlimited
62
+ e.max_listeners = 0
63
+ 1000.times do
64
+ e.on(:unlimited) {}
65
+ end
66
+ assert(!e.listeners(:unlimited).warned)
67
+ end
68
+
39
69
  # /test/simple/test-event-emitter-modify-in-emit.js
40
70
  def test_event_emitter_modify_in_emit
41
71
  callbacks_called = []
@@ -92,6 +122,25 @@ class TestEventEmitter < Test::Unit::TestCase
92
122
  assert_equal(0, e.listeners(:foo).length)
93
123
  end
94
124
 
125
+ # /test/simple/test-event-emitter-remove-all-listeners.js
126
+ def test_event_emitter_remove_all_listeners
127
+ listener = Proc.new {}
128
+
129
+ e1 = Events::EventEmitter.new
130
+ e1.add_listener(:foo, &listener)
131
+ e1.add_listener(:bar, &listener)
132
+ e1.remove_all_listeners(:foo)
133
+ assert_equal([], e1.listeners(:foo))
134
+ assert_equal([listener], e1.listeners(:bar))
135
+
136
+ e2 = Events::EventEmitter.new
137
+ e2.add_listener(:foo, &listener)
138
+ e2.add_listener(:bar, &listener)
139
+ e2.remove_all_listeners
140
+ assert_equal([], e2.listeners(:foo))
141
+ assert_equal([], e2.listeners(:bar))
142
+ end
143
+
95
144
  # /test/simple/test-event-emitter-remove-listeners.js
96
145
  def test_event_emitter_remove_listeners
97
146
  count = 0
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: events
3
3
  version: !ruby/object:Gem::Version
4
- hash: 49
4
+ hash: 55
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 9
9
- - 5
10
- version: 0.9.5
9
+ - 6
10
+ version: 0.9.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Matthew Sadler
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-04-11 00:00:00 +01:00
18
+ date: 2011-05-25 00:00:00 +01:00
19
19
  default_executable:
20
20
  dependencies: []
21
21