Method: ActiveSupport::Callbacks::CallbackChain#compile

Defined in:
lib/active_support/callbacks.rb

#compile(type) ⇒ Object



615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
# File 'lib/active_support/callbacks.rb', line 615

def compile(type)
  if type.nil?
    @all_callbacks || @mutex.synchronize do
      final_sequence = CallbackSequence.new
      @all_callbacks ||= @chain.reverse.inject(final_sequence) do |callback_sequence, callback|
        callback.apply(callback_sequence)
      end
    end
  else
    @single_callbacks[type] || @mutex.synchronize do
      final_sequence = CallbackSequence.new
      @single_callbacks[type] ||= @chain.reverse.inject(final_sequence) do |callback_sequence, callback|
        type == callback.kind ? callback.apply(callback_sequence) : callback_sequence
      end
    end
  end
end