Skip to content

Commit

Permalink
Merge e73fbff into 26d9d5b
Browse files Browse the repository at this point in the history
  • Loading branch information
kcdragon committed Jul 29, 2015
2 parents 26d9d5b + e73fbff commit 241c354
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 0 deletions.
4 changes: 4 additions & 0 deletions lib/wisper.rb
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@ def self.subscribe(*args, &block)
end
end

def self.unsubscribe(*listeners)
GlobalListeners.unsubscribe(*listeners)
end

def self.publisher
Publisher
end
Expand Down
13 changes: 13 additions & 0 deletions lib/wisper/global_listeners.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,15 @@ def subscribe(*listeners)
self
end

def unsubscribe(*listeners)
with_mutex do
@registrations.delete_if do |registration|
listeners.include?(registration.listener)
end
end
self
end

def registrations
with_mutex { @registrations }
end
Expand All @@ -40,6 +49,10 @@ def self.subscribe(*listeners)
instance.subscribe(*listeners)
end

def self.unsubscribe(*listeners)
instance.unsubscribe(*listeners)
end

def self.registrations
instance.registrations
end
Expand Down
23 changes: 23 additions & 0 deletions spec/lib/wisper_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,29 @@
end
end

describe '.unsubscribe' do
it 'removes listener from list of listeners' do
listener = double('listener')

Wisper.subscribe(listener)
expect(Wisper::GlobalListeners.listeners).to eq [listener]

Wisper.unsubscribe(listener)
expect(Wisper::GlobalListeners.listeners).to eq []
end

it 'removes listeners from list of listeners' do
listener_1 = double('listener')
listener_2 = double('listener')

Wisper.subscribe(listener_1, listener_2)
expect(Wisper::GlobalListeners.listeners).to include listener_1, listener_2

Wisper.unsubscribe(listener_1, listener_2)
expect(Wisper::GlobalListeners.listeners).to eq []
end
end

describe '.publisher' do
it 'returns the Publisher module' do
expect(Wisper.publisher).to eq Wisper::Publisher
Expand Down

0 comments on commit 241c354

Please sign in to comment.