module ActiveAdmin::Callbacks::ClassMethods

def define_active_admin_callbacks(*names)


end
end
# runs after save
def call_after_save(arg1, arg2)

protected

end
end
save!
run_save_callbacks :arg1, :arg2 do
# Will run before, yield, then after
def save

after_save :call_after_save

end
# runs before save
before_save do |arg1, arg2|

define_active_admin_callbacks :save

include ActiveAdmin::Callbacks
class MyClassWithCallbacks

Example:

Define a new callback.
def define_active_admin_callbacks(*names)
  names.each do |name|
    [:before, :after].each do |type|
      # Define a method to set the callback
      class_eval(<<-EOS, __FILE__, __LINE__ + 1)
        # def self.before_create_callbacks
        def self.#{type}_#{name}_callbacks
          @#{type}_#{name}_callbacks ||= []
        end
        # def self.before_create
        def self.#{type}_#{name}(method = nil, &block)
          #{type}_#{name}_callbacks << (method || block)
        end
      EOS
    end
    # Define a method to run the callbacks
    class_eval(<<-EOS, __FILE__, __LINE__ + 1)
      def run_#{name}_callbacks(*args)
        self.class.before_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
        value = yield if block_given?
        self.class.after_#{name}_callbacks.each{|callback| call_callback_with(callback, *args)}
        return value
      end
      EOS
   end
 end