Sha256: e6aabda47c79546ff78413bd08e7afd89569a5ea8c90efc75d8184802640657f
Contents?: true
Size: 1.53 KB
Versions: 2
Compression:
Stored size: 1.53 KB
Contents
module Exposure module Callbacks def self.included(base) base.extend ClassMethods base.send(:include, InstanceMethods) end module ClassMethods # access point for creating and configuring before_ callbacks. def before(trigger, *actions) options = actions.extract_options! actions.each do |action| build_callback('before', trigger, action, options) end end # access point for creating and configuring after_ callbacks. def after(trigger, *actions) options = actions.extract_options! actions.each do |action| build_callback('after', trigger, action, options) end end # builds callbacks that adhere to the ActiveSupport::Callbacks interface 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 end module InstanceMethods end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
exposure-0.2.1 | lib/exposure/behaviors/callbacks.rb |
exposure-0.2.0 | lib/exposure/behaviors/callbacks.rb |