module ActionCallback
Constants
- VERSION
Public Class Methods
extended(mod)
click to toggle source
# File lib/action_callback.rb, line 12 def ActionCallback.extended(mod) initialize_callback_chain(mod) [:before, :after].each do |callback| define_callback(callback) alias_method :"#{callback}_filter", :"#{callback}_action" end initialize_validation_chain(mod) define_validation end
version()
click to toggle source
# File lib/action_callback/version.rb, line 4 def self.version VERSION end
Private Instance Methods
define_callback(callback_hook)
click to toggle source
# File lib/action_callback/define_callback.rb, line 10 def define_callback(callback_hook) define_method("#{callback_hook}_action") do |callback, method_scope| @_callback_chain ||= Callback::Chain.new method_scope[:on].each do |mth_name| _callback_chain.append(callback_hook, mth_name, callback) undef_method(mth_name) if included_modules.map(&:to_s).include?('ActionWithCallbacks') class_eval <<-RUBY module ActionWithCallbacks define_method(:#{mth_name}) do |*args, &block| self.class._callback_chain.before_chain_of(:#{mth_name}).each { |cb| send(cb) } super(*args, &block) self.class._callback_chain.after_chain_of(:#{mth_name}).each { |cb| send(cb) } end end RUBY prepend self::ActionWithCallbacks end end end
define_validation()
click to toggle source
Calls superclass method
# File lib/action_callback/define_validation.rb, line 10 def define_validation define_method(:validate) do |*args, &block| @_validation_chain ||= Validation::Chain.new options = args.last if options.key?(:before) validator_mth_name = args.first options[:before].each do |mth_name| _validation_chain.append(:before, mth_name, validator_mth_name) undef_method(mth_name) if included_modules.map(&:to_s).include?('ActionWithValidations') class_eval <<-RUBY module ActionWithValidations define_method(:#{mth_name}) do |*args, &block| self.class._validation_chain.before_chain_of(:#{mth_name}).each { |v| send(v) } should_run = true should_run = !errors.present? if self.class.ancestors.include?(ActiveRecord::Base) super(*args, &block) if should_run end end RUBY prepend self::ActionWithValidations end else super(*args, &block) end end end
initialize_callback_chain(mod)
click to toggle source
# File lib/action_callback/define_callback.rb, line 4 def initialize_callback_chain(mod) mod.define_singleton_method(:_callback_chain) do @_callback_chain end end
initialize_validation_chain(mod)
click to toggle source
# File lib/action_callback/define_validation.rb, line 4 def initialize_validation_chain(mod) mod.define_singleton_method(:_validation_chain) do @_validation_chain end end