40 lines
1.3 KiB
Ruby
40 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
require_relative '../../migration_helpers'
|
|
|
|
module RuboCop
|
|
module Cop
|
|
module Migration
|
|
class ScheduleAsync < RuboCop::Cop::Cop
|
|
include MigrationHelpers
|
|
|
|
ENFORCED_SINCE = 2020_02_12_00_00_00
|
|
|
|
MSG = <<~MSG
|
|
Don't call the background migration worker directly, use the `#migrate_in` or
|
|
`#queue_background_migration_jobs_by_range_at_intervals` migration helpers instead.
|
|
MSG
|
|
|
|
def_node_matcher :calls_background_migration_worker?, <<~PATTERN
|
|
(send (const {cbase nil?} :BackgroundMigrationWorker) #perform_method? ...)
|
|
PATTERN
|
|
|
|
def_node_matcher :calls_ci_database_worker?, <<~PATTERN
|
|
(send (const {(const {cbase nil?} :BackgroundMigration) nil?} :CiDatabaseWorker) #perform_method? ...)
|
|
PATTERN
|
|
|
|
def_node_matcher :perform_method?, <<~PATTERN
|
|
{:perform_async :bulk_perform_async :perform_in :bulk_perform_in}
|
|
PATTERN
|
|
|
|
def on_send(node)
|
|
return unless in_migration?(node)
|
|
return if version(node) < ENFORCED_SINCE
|
|
return unless calls_background_migration_worker?(node) || calls_ci_database_worker?(node)
|
|
|
|
add_offense(node, location: :expression)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|