Method: Exposure::Callbacks::ClassMethods#build_callback

Defined in:
lib/exposure/behaviors/callbacks.rb

#build_callback(prefix, trigger, action, options) ⇒ Object

builds callbacks that adhere to the ActiveSupport::Callbacks interface



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/exposure/behaviors/callbacks.rb', line 26

def build_callback(prefix, trigger, action, options) #:nodoc:
  callback_name = "#{prefix}_#{trigger}"
  
  if options[:on]
    callback_name += "_on_#{options.delete(:on)}"
  end
  
  options[:if] ||= []
  
  only_methods = Array.wrap(options.delete(:only))
  except_methods = Array.wrap(options.delete(:except))
  
  if only_methods.any?
    options[:if] << proc {|c| only_methods.include?(c.action_name.intern) }
  end
  
  if except_methods.any?
    options[:if] << proc {|c| !except_methods.include?(c.action_name.intern) }
  end
  
  self.send(callback_name, action, options)
end