class RuboCop::Cop::Rails::ActiveRecordOverride


end
end
self.title = title.upcase!
def upcase_title
before_save :upcase_title
class Book < ApplicationRecord
# good
end
end
super
self.title = title.upcase!
def save
class Book < ApplicationRecord
# bad
@example
callbacks.
Checks for overriding built-in Active Record methods instead of using

def active_model?(parent_class_name)

def active_model?(parent_class_name)
  ACTIVE_RECORD_CLASSES.include?(parent_class_name)
end

def callback_names(method_name)

def callback_names(method_name)
  names = %w[before_ around_ after_].map do |prefix|
    "`#{prefix}#{method_name}`"
  end
  names[-1] = "or #{names.last}"
  names.join(', ')
end

def find_parent_class_name(node)

def find_parent_class_name(node)
  return nil unless node
  if node.class_type?
    parent_class_name = node.node_parts[1]
    return nil if parent_class_name.nil?
    return parent_class_name.source
  end
  find_parent_class_name(node.parent)
end

def message(method_name)

def message(method_name)
  format(MSG, prefer: callback_names(method_name), bad: method_name)
end

def on_def(node)

def on_def(node)
  return unless BAD_METHODS.include?(node.method_name)
  parent_class_name = find_parent_class_name(node)
  return unless active_model?(parent_class_name)
  return unless node.descendants.any?(&:zsuper_type?)
  add_offense(node, message: message(node.method_name))
end