class ActiveSupport::Callbacks::Filters::Around
Public Class Methods
build(callback_sequence, user_callback, user_conditions, chain_config)
click to toggle source
# File lib/active_support/callbacks.rb, line 251 def self.build(callback_sequence, user_callback, user_conditions, chain_config) if user_conditions.any? halting_and_conditional(callback_sequence, user_callback, user_conditions) else halting(callback_sequence, user_callback) end end
Private Class Methods
halting(callback_sequence, user_callback)
click to toggle source
# File lib/active_support/callbacks.rb, line 277 def self.halting(callback_sequence, user_callback) callback_sequence.around do |env, &run| target = env.target value = env.value if env.halted run.call else user_callback.call(target, value) { run.call.value } env end end end
halting_and_conditional(callback_sequence, user_callback, user_conditions)
click to toggle source
# File lib/active_support/callbacks.rb, line 259 def self.halting_and_conditional(callback_sequence, user_callback, user_conditions) callback_sequence.around do |env, &run| target = env.target value = env.value halted = env.halted if !halted && user_conditions.all? { |c| c.call(target, value) } user_callback.call(target, value) { run.call.value } env else run.call end end end