class RuboCop::Cop::Rails::MigrationClassName


end
class CreateUsers < ActiveRecord::Migration[7.0]
# good
end
class SellBooks < ActiveRecord::Migration[7.0]
# bad
# db/migrate/20220224111111_create_users.rb
@example
(e.g. ‘20220224111111_create_users.rb` should define `CreateUsers` class.)
whose name matches the file name.
Makes sure that each migration file defines a migration class

def basename_without_timestamp_and_suffix(filepath)

def basename_without_timestamp_and_suffix(filepath)
  basename = File.basename(filepath, '.rb')
  basename = remove_gem_suffix(basename)
  basename.sub(/\A\d+_/, '')
end

def camelize(word)

def camelize(word)
  word.split('_').map(&:capitalize).join
end

def on_class(node)

def on_class(node)
  return unless migration_class?(node)
  basename = basename_without_timestamp_and_suffix(processed_source.file_path)
  class_identifier = node.identifier.location.name
  camelized_basename = camelize(basename)
  return if class_identifier.source.casecmp(camelized_basename).zero?
  message = format(MSG, camelized_basename: camelized_basename)
  add_offense(class_identifier, message: message) do |corrector|
    corrector.replace(class_identifier, camelized_basename)
  end
end

def remove_gem_suffix(file_name)

e.g.: from `add_blobs.active_storage` to `add_blobs`.
def remove_gem_suffix(file_name)
  file_name.sub(/\..+\z/, '')
end