mirror of
https://github.com/pulsar-edit/pulsar.git
synced 2024-09-20 15:37:46 +03:00
Forward all subscribe arguments from Subscriber to EventEmitter
This commit is contained in:
parent
e2af4c964d
commit
d76d0a030f
@ -1,9 +1,10 @@
|
||||
Subscriber = require 'subscriber'
|
||||
EventEmitter = require 'event-emitter'
|
||||
_ = require 'underscore'
|
||||
{$$} = require 'space-pen'
|
||||
|
||||
describe "Subscriber", ->
|
||||
[emitter1, emitter2, event1Handler, event2Handler, subscriber] = []
|
||||
[emitter1, emitter2, emitter3, event1Handler, event2Handler, event3Handler, subscriber] = []
|
||||
|
||||
class TestEventEmitter
|
||||
_.extend TestEventEmitter.prototype, EventEmitter
|
||||
@ -14,11 +15,17 @@ describe "Subscriber", ->
|
||||
beforeEach ->
|
||||
emitter1 = new TestEventEmitter
|
||||
emitter2 = new TestEventEmitter
|
||||
emitter3 = $$ ->
|
||||
@div =>
|
||||
@a()
|
||||
@span()
|
||||
subscriber = new TestSubscriber
|
||||
event1Handler = jasmine.createSpy("event1Handler")
|
||||
event2Handler = jasmine.createSpy("event2Handler")
|
||||
event3Handler = jasmine.createSpy("event3Handler")
|
||||
subscriber.subscribe emitter1, 'event1', event1Handler
|
||||
subscriber.subscribe emitter2, 'event2', event2Handler
|
||||
subscriber.subscribe emitter3, 'event3', 'a', event3Handler
|
||||
|
||||
it "subscribes to events on the specified object", ->
|
||||
emitter1.trigger 'event1', 'foo'
|
||||
@ -27,6 +34,12 @@ describe "Subscriber", ->
|
||||
emitter2.trigger 'event2', 'bar'
|
||||
expect(event2Handler).toHaveBeenCalledWith('bar')
|
||||
|
||||
emitter3.find('span').trigger 'event3'
|
||||
expect(event3Handler).not.toHaveBeenCalledWith()
|
||||
|
||||
emitter3.find('a').trigger 'event3'
|
||||
expect(event3Handler).toHaveBeenCalled()
|
||||
|
||||
it "allows an object to unsubscribe en-masse", ->
|
||||
subscriber.unsubscribe()
|
||||
emitter1.trigger 'event1', 'foo'
|
||||
|
@ -1,12 +1,15 @@
|
||||
_ = require 'underscore'
|
||||
|
||||
module.exports =
|
||||
subscribe: (eventEmitter, eventName, callback) ->
|
||||
eventEmitter.on eventName, callback
|
||||
subscribe: (eventEmitter, subscribeArgs...) ->
|
||||
eventEmitter.on(subscribeArgs...)
|
||||
|
||||
@subscriptions ?= []
|
||||
@subscriptionsByObject ?= new WeakMap
|
||||
@subscriptionsByObject.set(eventEmitter, []) unless @subscriptionsByObject.has(eventEmitter)
|
||||
|
||||
eventName = _.first(subscribeArgs)
|
||||
callback = _.last(subscribeArgs)
|
||||
subscription = cancel: -> eventEmitter.off eventName, callback
|
||||
@subscriptions.push(subscription)
|
||||
@subscriptionsByObject.get(eventEmitter).push(subscription)
|
||||
|
Loading…
Reference in New Issue
Block a user