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