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)
def remove_gem_suffix(file_name) file_name.sub(/\..+\z/, '') end