module RuboCop::Rails::MigrationFileSkippable

def self.apply_to_cops!

def self.apply_to_cops!
  RuboCop::Cop::Registry.all.each { |cop| cop.prepend(MigrationFileSkippable) }
end

def add_global_offense(message = nil, severity: nil)

def add_global_offense(message = nil, severity: nil)
  return if already_migrated_file?
  super if method(__method__).super_method
end

def add_offense(node_or_range, message: nil, severity: nil, &block)

def add_offense(node_or_range, message: nil, severity: nil, &block)
  return if already_migrated_file?
  super if method(__method__).super_method
end

def already_migrated_file?

def already_migrated_file?
  return false unless migrated_schema_version
  match_data = File.basename(processed_source.file_path).match(/(?<timestamp>\d{14})/)
  schema_version = match_data['timestamp'] if match_data
  return false unless schema_version
  schema_version <= migrated_schema_version.to_s # Ignore applied migration files.
end

def migrated_schema_version

def migrated_schema_version
  @migrated_schema_version ||= config.for_all_cops.fetch('MigratedSchemaVersion', nil)
end