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