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|
      callback_name = "#{type}_#{name}_callbacks"
      callback_ivar = "@#{callback_name}"
      # def self.before_create_callbacks
      singleton_class.send :define_method, callback_name do
        instance_variable_get(callback_ivar) || instance_variable_set(callback_ivar, [])
      end
      singleton_class.send :private, callback_name
      # def self.before_create
      singleton_class.send :define_method, "#{type}_#{name}" do |method = nil, &block|
        send(callback_name).push method || block
      end
    end
    # def run_create_callbacks
    define_method "run_#{name}_callbacks" do |*args, &block|
      self.class.send("before_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
      value = block.try :call
      self.class.send("after_#{name}_callbacks").each { |cbk| run_callback(cbk, *args) }
      return value
    end
    send :private, "run_#{name}_callbacks"
  end
end