module ActiveAdmin::Callbacks::ClassMethods
Public Instance Methods
define_active_admin_callbacks(*names)
click to toggle source
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
# File lib/active_admin/callbacks.rb, line 56 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