# File lib/cabin/channel.rb, line 160
  def publish(data, &block)
    event = {}
    self.class.filters.each do |filter|
      filter.call(event)
    end

    if data.is_a?(String)
      event[:message] = data
    else
      event.merge!(data)
    end
    event.merge!(@data) # Merge any logger context

    @subscriber_lock.synchronize do
      @subscribers.each do |id, output|
        append =  block_given? ? block.call(output, event) : true
        output << event if append
      end
    end
  end