Sha256: 7ba69ca423722f668753379447cbc8f8858f74a6e54b745cba3ad7f11ad7455e

Contents?: true

Size: 1.72 KB

Versions: 1

Compression:

Stored size: 1.72 KB

Contents

require "pusherable/version"

module Pusherable
  extend ActiveSupport::Concern

  module ClassMethods
    def pusherable?
      false
    end

    def pusherable(pusherable_channel = "test_channel")
      raise "Please `gem install pusher` and configure it to run in your app!" if Pusher.app_id.blank? || Pusher.key.blank? || Pusher.secret.blank?

      class_attribute :pusherable_channel
      self.pusherable_channel = pusherable_channel

      class_eval do
        if defined?(Mongoid) && defined?(Mongoid::Document) && include?(Mongoid::Document)
          after_create :pusherable_trigger_create
          after_update :pusherable_trigger_update
          before_destroy :pusherable_trigger_destroy
        else
          after_commit :pusherable_trigger_create, on: :create
          after_commit :pusherable_trigger_update, on: :update
          after_commit :pusherable_trigger_destroy, on: :destroy
        end

        def self.pusherable?
          true
        end

        private

        def pusherable_class_name
          self.class.name.underscore
        end

        def pusherable_trigger_create
          Pusher.trigger(pusherable_channel, "#{pusherable_class_name}.create", self.to_json)
        end

        def pusherable_trigger_update
          Pusher.trigger(pusherable_channel, "#{pusherable_class_name}.update", self.to_json)
        end

        def pusherable_trigger_destroy
          Pusher.trigger(pusherable_channel, "#{pusherable_class_name}.destroy", self.to_json)
        end
      end
    end
  end
end

if defined?(ActiveRecord) && defined?(ActiveRecord::Base)
  ActiveRecord::Base.send :include, Pusherable
end

if defined?(Mongoid) && defined?(Mongoid::Document)
  Mongoid::Document.send :include, Pusherable
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
pusherable-1.1.1 lib/pusherable.rb