Sha256: 6606e3ebcc25f692e9e215afa4c92b1788b6322ce820bb25eb069f5f152d7ff9

Contents?: true

Size: 1.31 KB

Versions: 3

Compression:

Stored size: 1.31 KB

Contents

# -*- encoding : utf-8 -*-
require 'active_model'
require 'active_record/observer'
require 'active_record/callbacks'

module Untied
  module Publisher
    class Observer < ActiveRecord::Observer
      def initialize
        Publisher.config.logger.info "Untied: Initializing publisher observer"

        publisher.define_callbacks
        observed = publisher.observed_classes

        self.class.send(:define_method, :observed_classes, Proc.new { observed })
        super
      end

      def method_missing(name, model, *args, &block)
        if ActiveRecord::Callbacks::CALLBACKS.include?(name)
          produce_event(name, model)
        else
          super
        end
      end

      protected

      def produce_event(callback, model)
        e = Event.new(:name => callback, :payload => model,
                      :origin => Publisher.config.service_name)
        producer.publish(e)
      end

      def producer
        Producer.new
      end

      def publisher
        return @publisher if defined?(@publisher)

        unless Publisher.config.doorkeeper
          raise NameError.new "You should define a class which includes " + \
            "Untied::Publisher::Doorkeeper and set it name to Untied::Publisher.config.doorkeeper."
        end
        @publisher = Publisher.config.doorkeeper.new
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
untied-publisher-0.0.3 lib/untied-publisher/observer.rb
untied-publisher-0.0.2 lib/untied-publisher/observer.rb
untied-publisher-0.0.1 lib/untied-publisher/observer.rb