module PrioritizedCallbacks::ActiveSupport::CallbacksClassMethodsPatch

Public Instance Methods

append_callbacks_order(name, order_items, options = {}) click to toggle source
# File lib/prioritized_callbacks/active_support/callbacks_class_methods_patch.rb, line 11
def append_callbacks_order(name, order_items, options = {})
  chain = get_callbacks(name)
  raise ArgumentError, "Callbacks for #{name} are not defined" unless chain
  order          = chain.config[:order].dup
  insert_pos     = order.size
  order_items    = order_items.map(&:to_sym)
  existing_items = order & order_items
  raise ArgumentError, "Order item(s) #{existing_items.map(&:inspect).join(', ')} already exist for #{name} callbacks" if existing_items.any?
  if (before = options[:before]&.to_sym)
    insert_pos = order.index(before)
    raise ArgumentError, "Order item #{before.inspect} is not defined for #{name} callbacks" unless insert_pos
  elsif (after = options[:after]&.to_sym)
    insert_pos = order.index(after)
    raise ArgumentError, "Order item #{after.inspect} is not defined for #{name} callbacks" unless insert_pos
    insert_pos += 1
  end
  order.insert insert_pos, *order_items
  set_callbacks_order name, order
end
set_callbacks_order(name, order_items) click to toggle source
# File lib/prioritized_callbacks/active_support/callbacks_class_methods_patch.rb, line 4
def set_callbacks_order(name, order_items)
  chain = get_callbacks(name)
  raise ArgumentError, "Callbacks for #{name} are not defined" unless chain
  order_items = order_items.map(&:to_sym)
  set_callbacks name, chain.copy_with_new_order(order_items)
end