Sha256: a96b09d85b655f8690eff34621288b3d1f58813dfef16b1394004ebab9106cfe

Contents?: true

Size: 1.78 KB

Versions: 8

Compression:

Stored size: 1.78 KB

Contents

module CouchPotato
  module Persistence
    module Callbacks
      def self.included(base) #:nodoc:
        base.extend ClassMethods

        base.class_eval do
          attr_accessor :skip_callbacks
          def self.callbacks
            @callbacks ||= {}
            @callbacks[self.name] ||= {:before_validation => [], :before_validation_on_create => [], 
              :before_validation_on_update => [], :before_validation_on_save => [], :before_create => [], 
              :after_create => [], :before_update => [], :after_update => [],
              :before_save => [], :after_save => [],
              :before_destroy => [], :after_destroy => []}
          end
        end
      end

      # Runs all callbacks on a model with the given name, i.g. :after_create.
      # 
      # This method is called by the CouchPotato::Database object when saving/destroying an object 
      def run_callbacks(name)
        return if skip_callbacks
        self.class.callbacks[name].uniq.each do |callback|
          if callback.is_a?(Symbol)
            send callback
          elsif callback.is_a?(Proc)
            callback.call self
          else
            raise "Don't know how to handle callback of type #{name.class.name}"
          end
        end
      end

      module ClassMethods
        [
          :before_validation,
          :before_validation_on_create,
          :before_validation_on_update,
          :before_validation_on_save,
          :before_create,
          :before_save,
          :before_update,
          :before_destroy,
          :after_update,
          :after_save,
          :after_create,
          :after_destroy
        ].each do |callback|
          define_method callback do |*names|
            callbacks[callback].push *names
          end
        end
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
couch_potato-0.2.30 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.29 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.28 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.27 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.26 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.25 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.24 lib/couch_potato/persistence/callbacks.rb
couch_potato-0.2.23 lib/couch_potato/persistence/callbacks.rb