Sha256: 13f73dbed0be81ce285f16a6a79ededdf267743d4be97a56a1aa4b50a97d22bf

Contents?: true

Size: 1.15 KB

Versions: 6

Compression:

Stored size: 1.15 KB

Contents

module ForeignOffice
  module Broadcaster

    def self.included(base)
      base.extend ClassMethods
      def handle_broadcast
        self.broadcast_change if self.changed?
      end

      def broadcast_change
        Rails.logger.debug "Broadcasting change for #{self.inspect}..."
        Rails.logger.debug "Serialize: #{self.serialize}"
        if self.class.channel_presence_required?
          PresenceChannelPublishJob.set(wait: 1).perform_later(id, self.class.name, self.serialize)
        else
          ForeignOffice.publish(channel: "#{self.class.name}#{self.id}", object: self.serialize)
        end
      rescue => e
        Rails.logger.error "Failed to broadcast change: #{e.inspect}"
        Rails.logger.debug e.backtrace.join("\n")
        raise e
      end

      def serialize
        self.attributes
      end
    end

    module ClassMethods
      def broadcast_changes!
        self.send(:after_save, :handle_broadcast, {unless: :skip_all_callbacks})
      end

      def require_channel_presence
        @channel_presence_required = true
      end

      def channel_presence_required?
        @channel_presence_required
      end
    end

  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
foreign_office-0.17.5 lib/foreign_office/broadcaster.rb
foreign_office-0.17.4 lib/foreign_office/broadcaster.rb
foreign_office-0.17.3 lib/foreign_office/broadcaster.rb
foreign_office-0.17.2 lib/foreign_office/broadcaster.rb
foreign_office-0.17.1 lib/foreign_office/broadcaster.rb
foreign_office-0.17.0 lib/foreign_office/broadcaster.rb