Sha256: a00d5cc1929059382812b577529fc96f6ea7999cb5be04a014ba026d9540c01b

Contents?: true

Size: 1.26 KB

Versions: 1

Compression:

Stored size: 1.26 KB

Contents

module Signal
  module ActiveRecord
    def self.included(base)
      base.class_eval do
        include Signal
        include InstanceMethods

        around_create     :around_create_signal
        around_save       :around_save_signal
        around_destroy    :around_destroy_signal
        before_validation :before_validation_signal
        after_validation  :after_validation_signal
      end
    end

    module InstanceMethods
      private
      def around_create_signal
        emit_signal(:before, :create)
        yield
        return unless persisted?
        emit_signal(:on, :create)
        emit_signal(:after, :create)
      end

      def around_save_signal
        if new_record?
          yield
          return
        end

        emit_signal(:before, :update)
        yield
        emit_signal(:on, :update)
        emit_signal(:after, :update)
      end

      def around_destroy_signal
        emit_signal(:before, :remove)
        yield
        emit_signal(:on, :remove)
        emit_signal(:after, :remove)
      end

      def before_validation_signal
        emit_signal(:before, :validation)
      end

      def after_validation_signal
        emit_signal(:on, :validation) if errors.any?
        emit_signal(:after, :validation)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
signal-0.1.0 lib/signal/active_record.rb