Module: AbAdmin::Controllers::Callbacks::ClassMethods
- Defined in:
- lib/ab_admin/controllers/callbacks.rb
Instance Method Summary collapse
-
#define_admin_callbacks(*names) ⇒ Object
Define a new callback.
Instance Method Details
#define_admin_callbacks(*names) ⇒ Object
Define a new callback.
Example:
class MyClassWithCallbacks
include ActiveAdmin::Callbacks
define_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
70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File 'lib/ab_admin/controllers/callbacks.rb', line 70 def define_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 |