require 'spec_helper' describe Cassie::Subscribers do it "should be able to add and remove a subscriber" do subscribers = Cassie::Subscribers.new expect(subscribers.empty?).to eq true data_1 = [] data_2 = [] subscriber_1 = lambda{|info| data_1 << info} subscriber_2 = lambda{|info| data_2 << info} subscribers.add(subscriber_1) subscribers << subscriber_2 expect(subscribers.empty?).to eq false expect(subscribers.size).to eq 2 expect(subscribers.include?(subscriber_1)).to eq true expect(subscribers.include?(subscriber_2)).to eq true subscribers.each{|s| s.call(:payload)} expect(data_1).to eq [:payload] expect(data_2).to eq [:payload] subscribers.remove(subscriber_2) expect(subscribers.size).to eq 1 expect(subscribers.include?(subscriber_1)).to eq true expect(subscribers.include?(subscriber_2)).to eq false subscribers.each{|s| s.call(:more)} expect(data_1).to eq [:payload, :more] expect(data_2).to eq [:payload] subscribers.delete(subscriber_1) expect(subscribers.size).to eq 0 end it "should have a hierarchy of subscribers" do subscribers_1 = Cassie::Subscribers.new subscribers_2 = Cassie::Subscribers.new(subscribers_1) subscribers_3 = Cassie::Subscribers.new(subscribers_1) data_1 = [] data_2 = [] data_3 = [] subscribers_1 << lambda{|info| data_1 << info} subscribers_2 << lambda{|info| data_2 << info} expect(subscribers_1.size).to eq 1 expect(subscribers_2.size).to eq 2 expect(subscribers_3.size).to eq 1 subscribers_1.each{|subscriber| subscriber.call(:payload_1)} subscribers_2.each{|subscriber| subscriber.call(:payload_2)} subscribers_3.each{|subscriber| subscriber.call(:payload_3)} expect(data_1).to eq [:payload_1, :payload_2, :payload_3] expect(data_2).to eq [:payload_2] subscribers_2.clear expect(subscribers_2.size).to eq 1 subscribers_1.clear expect(subscribers_2.size).to eq 0 end end