class ActiveSupport::Callbacks::Filters::Around
Public Class Methods
build(next_callback, user_callback, user_conditions, chain_config)
click to toggle source
# File lib/active_support/callbacks.rb, line 268 def self.build(next_callback, user_callback, user_conditions, chain_config) if chain_config.key?(:terminator) && user_conditions.any? halting_and_conditional(next_callback, user_callback, user_conditions) elsif chain_config.key? :terminator halting(next_callback, user_callback) elsif user_conditions.any? conditional(next_callback, user_callback, user_conditions) else simple(next_callback, user_callback) end end
Private Class Methods
conditional(next_callback, user_callback, user_conditions)
click to toggle source
# File lib/active_support/callbacks.rb, line 317 def self.conditional(next_callback, user_callback, user_conditions) lambda { |env| target = env.target value = env.value if user_conditions.all? { |c| c.call(target, value) } user_callback.call(target, value) { env = next_callback.call env env.value } env else next_callback.call env end } end
halting(next_callback, user_callback)
click to toggle source
# File lib/active_support/callbacks.rb, line 299 def self.halting(next_callback, user_callback) lambda { |env| target = env.target value = env.value if env.halted next_callback.call env else user_callback.call(target, value) { env = next_callback.call env env.value } env end } end
halting_and_conditional(next_callback, user_callback, user_conditions)
click to toggle source
# File lib/active_support/callbacks.rb, line 280 def self.halting_and_conditional(next_callback, user_callback, user_conditions) lambda { |env| target = env.target value = env.value halted = env.halted if !halted && user_conditions.all? { |c| c.call(target, value) } user_callback.call(target, value) { env = next_callback.call env env.value } env else next_callback.call env end } end
simple(next_callback, user_callback)
click to toggle source
# File lib/active_support/callbacks.rb, line 335 def self.simple(next_callback, user_callback) lambda { |env| user_callback.call(env.target, env.value) { env = next_callback.call env env.value } env } end