diff --git a/.rubocop_todo/database/multiple_databases.yml b/.rubocop_todo/database/multiple_databases.yml index e390f81f0304ac3a2106817094004fb3fdaaaa31..38a6ccb3ef4b42d6880b212a3b3b8befbbaad9da 100644 --- a/.rubocop_todo/database/multiple_databases.yml +++ b/.rubocop_todo/database/multiple_databases.yml @@ -18,10 +18,8 @@ Database/MultipleDatabases: - lib/gitlab/database/migrations/observers/query_log.rb - lib/gitlab/database/partitioning_migration_helpers/backfill_partitioned_table.rb - lib/gitlab/database.rb - - lib/gitlab/gitlab_import/importer.rb - lib/gitlab/health_checks/db_check.rb - lib/gitlab/import_export/group/relation_tree_restorer.rb - - lib/gitlab/legacy_github_import/importer.rb - lib/gitlab/seeder.rb - spec/db/schema_spec.rb - spec/initializers/database_config_spec.rb diff --git a/rubocop/cop/database/multiple_databases.rb b/rubocop/cop/database/multiple_databases.rb index fb6e81f98458155f939ed8b320e1e18784475f46..f20348d9d1fea9c4a2eb7b0fa5b9ae0a67f4662f 100644 --- a/rubocop/cop/database/multiple_databases.rb +++ b/rubocop/cop/database/multiple_databases.rb @@ -17,6 +17,10 @@ class MultipleDatabases < RuboCop::Cop::Cop https://docs.gitlab.com/ee/development/database/transaction_guidelines.html EOF + ALLOWED_METHODS = %i[ + no_touching + ].freeze + def_node_matcher :active_record_base_method_is_used?, <<~PATTERN (send (const (const nil? :ActiveRecord) :Base) $_) PATTERN @@ -24,8 +28,17 @@ class MultipleDatabases < RuboCop::Cop::Cop def on_send(node) return unless active_record_base_method_is_used?(node) + active_record_base_method = node.children[1] + return if method_is_allowed?(active_record_base_method) + add_offense(node, location: :expression, message: AR_BASE_MESSAGE) end + + private + + def method_is_allowed?(method_name) + ALLOWED_METHODS.include?(method_name.to_sym) + end end end end diff --git a/spec/rubocop/cop/database/multiple_databases_spec.rb b/spec/rubocop/cop/database/multiple_databases_spec.rb index 16b916d61dba091ee60aa16827b338bb7601919f..8bcd4710305ad24c7cfb4ffd57b3891a2a5df837 100644 --- a/spec/rubocop/cop/database/multiple_databases_spec.rb +++ b/spec/rubocop/cop/database/multiple_databases_spec.rb @@ -12,4 +12,14 @@ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Do not use methods from ActiveRecord::Base, [...] SOURCE end + + described_class::ALLOWED_METHODS.each do |method_name| + it "does not flag use of ActiveRecord::Base.#{method_name}" do + expect_no_offenses(<<~SOURCE) + ActiveRecord::Base.#{method_name} do + Project.save + end + SOURCE + end + end end