1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66
|
require 'active_support/core_ext/array/wrap'
module ActiveLdap
module Callbacks
extend ActiveSupport::Concern
CALLBACKS = [
:after_initialize, :after_find, :after_touch, :before_validation, :after_validation,
:before_save, :around_save, :after_save, :before_create, :around_create,
:after_create, :before_update, :around_update, :after_update,
:before_destroy, :around_destroy, :after_destroy, :after_commit, :after_rollback
]
included do
extend ActiveModel::Callbacks
include ActiveModel::Validations::Callbacks
singleton_class.class_eval do
prepend CallbackedInstantiatable
end
define_model_callbacks :initialize, :find, :touch, :only => :after
define_model_callbacks :save, :create, :update, :destroy
end
module ClassMethods
def method_added(meth)
super
if CALLBACKS.include?(meth.to_sym)
ActiveSupport::Deprecation.warn("Base##{meth} has been deprecated, please use Base.#{meth} :method instead", caller[0,1])
send(meth.to_sym, meth.to_sym)
end
end
end
module CallbackedInstantiatable
def instantiate(record)
object = super(record)
object.run_callbacks(:find)
object.run_callbacks(:initialize)
object
end
end
def destroy #:nodoc:
run_callbacks(:destroy) { super }
end
def touch(*) #:nodoc:
run_callbacks(:touch) { super }
end
private
def create_or_update #:nodoc:
run_callbacks(:save) { super }
end
def create #:nodoc:
run_callbacks(:create) { super }
end
def update(*) #:nodoc:
run_callbacks(:update) { super }
end
end
end
|