Module: ActiveAdmin::Callbacks::ClassMethods
- Defined in:
- lib/active_admin/callbacks.rb
Instance Method Summary collapse
-
#define_active_admin_callbacks(*names) ⇒ Object
Define a new callback.
Instance Method Details
#define_active_admin_callbacks(*names) ⇒ Object
Define a new callback.
Example:
class MyClassWithCallbacks
include ActiveAdmin::Callbacks
define_active_admin_callbacks :save
before_save do |arg1, arg2|
# runs before save
end
after_save :call_after_save
def save
# Will run before, yield, then after
run_save_callbacks :arg1, :arg2 do
save!
end
end
protected
def call_after_save(arg1, arg2)
# runs after save
end
end
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 |
# File 'lib/active_admin/callbacks.rb', line 56 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 # 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 end end |