class RuboCop::Cop::Rails::AfterCommitOverride


after_update_commit :log_update_action
after_create_commit :log_create_action
# good
after_save_commit :log_action
# good
after_commit :log_action, on: :destroy
# This will override both previous callbacks.
after_update_commit :log_action
# This won’t be triggered.
after_commit :log_action, on: :create
# This won’t be triggered.
# bad
after_update_commit :log_action
# after_create_commit.
# This will override the callback added by
after_create_commit :log_action
# This won’t be triggered.
# bad
@example
and ‘after_destroy_commit`) with the same callback name per model.
(and its aliases - `after_create_commit`, `after_update_commit`,
Enforces that there is only one call to `after_commit`

def after_commit_callback?(node)

def after_commit_callback?(node)
  AFTER_COMMIT_CALLBACKS.include?(node.method_name)
end

def each_after_commit_callback(class_node)

def each_after_commit_callback(class_node)
  class_send_nodes(class_node).each do |node|
    yield node if after_commit_callback?(node) && named_callback?(node)
  end
end

def named_callback?(node)

def named_callback?(node)
  name = node.first_argument
  return false unless name
  name.sym_type?
end

def on_class(class_node)

def on_class(class_node)
  seen_callback_names = {}
  each_after_commit_callback(class_node) do |node|
    callback_name = node.first_argument.value
    if seen_callback_names.key?(callback_name)
      add_offense(node, message: format(MSG, name: callback_name))
    else
      seen_callback_names[callback_name] = true
    end
  end
end