# File lib/cabin/channel.rb, line 178
  def publish(data, &block)
    event = {}

    self.class.actions.each do |action|
      action.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 |_, subscriber|
        append = block_given? ? block.call(subscriber, event) : true
        if append && self.class.allow_event?(event, subscriber)
          subscriber << event
        end
      end
    end
  end