class MockQueue attr_reader :messages def initialize @messages = [] @subscription_id = 0 @subscriptions = {} end def subscribe(&block) @subscription_id += 1 @subscriptions[@subscription_id] = block @subscription_id end def push(message) @messages.push(message) @subscriptions.values.each do |callback| callback.call(message) end message end def clear_messages! @messages = [] end def unsubscribe(subscription_id) @subscriptions.delete(subscription_id) nil end end