From d76d0a030f6aa11003278aba6f1e42501f73891d Mon Sep 17 00:00:00 2001 From: Kevin Sawicki & Nathan Sobo Date: Thu, 16 May 2013 13:36:51 -0700 Subject: [PATCH] Forward all subscribe arguments from Subscriber to EventEmitter --- spec/stdlib/subscriber-spec.coffee | 15 ++++++++++++++- src/stdlib/subscriber.coffee | 7 +++++-- 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/spec/stdlib/subscriber-spec.coffee b/spec/stdlib/subscriber-spec.coffee index 60f43cd40..714d14145 100644 --- a/spec/stdlib/subscriber-spec.coffee +++ b/spec/stdlib/subscriber-spec.coffee @@ -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' diff --git a/src/stdlib/subscriber.coffee b/src/stdlib/subscriber.coffee index 40d55b409..5975451a5 100644 --- a/src/stdlib/subscriber.coffee +++ b/src/stdlib/subscriber.coffee @@ -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)