From ef9d2a38a5faa641b73a2760c38ad28e87325545 Mon Sep 17 00:00:00 2001 From: Yevgeny Matveyev Date: Tue, 6 Jan 2026 17:56:04 +0300 Subject: [PATCH] Migrate RuboCop cops to Base API --- database_validations.gemspec | 6 +++--- lib/database_validations/rubocop/cop/belongs_to.rb | 7 +++---- lib/database_validations/rubocop/cop/uniqueness_of.rb | 7 ++++--- spec/rubocop/cop/belongs_to_spec.rb | 4 ++-- spec/rubocop/cop/uniqueness_of_spec.rb | 8 ++++---- 5 files changed, 16 insertions(+), 16 deletions(-) diff --git a/database_validations.gemspec b/database_validations.gemspec index 38ec27d..132893f 100644 --- a/database_validations.gemspec +++ b/database_validations.gemspec @@ -24,12 +24,12 @@ and ActiveRecord validations with better performance and consistency." spec.add_development_dependency 'benchmark-ips', '~> 2.7' spec.add_development_dependency 'bundler', '~> 2.0' - spec.add_development_dependency 'db-query-matchers', '>= 0.9' + spec.add_development_dependency 'db-query-matchers', '>= 0.15' spec.add_development_dependency 'mysql2' spec.add_development_dependency 'pg' spec.add_development_dependency 'rake', '~> 13.0' spec.add_development_dependency 'rspec', '~> 3.0' - spec.add_development_dependency 'rubocop', '~> 0.60' - spec.add_development_dependency 'rubocop-rspec', '~> 1.30' + spec.add_development_dependency 'rubocop', '~> 1.80' + spec.add_development_dependency 'rubocop-rspec', '~> 3.8' spec.add_development_dependency 'sqlite3', '~> 1.3' end diff --git a/lib/database_validations/rubocop/cop/belongs_to.rb b/lib/database_validations/rubocop/cop/belongs_to.rb index b1637bc..7212477 100644 --- a/lib/database_validations/rubocop/cop/belongs_to.rb +++ b/lib/database_validations/rubocop/cop/belongs_to.rb @@ -10,8 +10,9 @@ module DatabaseValidations # # good # db_belongs_to :company # - class BelongsTo < Cop + class BelongsTo < Base MSG = 'Use `db_belongs_to`.'.freeze + RESTRICT_ON_SEND = %i[belongs_to].freeze NON_SUPPORTED_OPTIONS = %i[ optional @@ -20,14 +21,12 @@ class BelongsTo < Cop foreign_type ].freeze - def_node_matcher :belongs_to?, '(send nil? :belongs_to ...)' def_node_matcher :option_name, '(pair (sym $_) ...)' def on_send(node) - return unless belongs_to?(node) return unless supported?(node) - add_offense(node, location: :selector) + add_offense(node.loc.selector) end private diff --git a/lib/database_validations/rubocop/cop/uniqueness_of.rb b/lib/database_validations/rubocop/cop/uniqueness_of.rb index 5058120..6878946 100644 --- a/lib/database_validations/rubocop/cop/uniqueness_of.rb +++ b/lib/database_validations/rubocop/cop/uniqueness_of.rb @@ -14,17 +14,18 @@ module DatabaseValidations # validates_db_uniqueness_of :address, scope: :user_id # validates_db_uniqueness_of :title # - class UniquenessOf < Cop + class UniquenessOf < Base MSG = 'Use `validates_db_uniqueness_of`.'.freeze + RESTRICT_ON_SEND = %i[validates validates_uniqueness_of].freeze def_node_matcher :uniquness_validation?, '(pair (sym :uniqueness) _)' def on_send(node) if node.method_name == :validates_uniqueness_of - add_offense(node, location: :selector) + add_offense(node.loc.selector) elsif node.method_name == :validates uniqueness(node) do |option| - add_offense(option) + add_offense(option.loc.expression) end end end diff --git a/spec/rubocop/cop/belongs_to_spec.rb b/spec/rubocop/cop/belongs_to_spec.rb index 458b7c9..f9ec262 100644 --- a/spec/rubocop/cop/belongs_to_spec.rb +++ b/spec/rubocop/cop/belongs_to_spec.rb @@ -6,14 +6,14 @@ it 'detects `belongs_to`: true``' do expect_offense(<<-RUBY) belongs_to :company - ^^^^^^^^^^ Use `db_belongs_to`. + ^^^^^^^^^^ DatabaseValidations/BelongsTo: Use `db_belongs_to`. RUBY end it 'detects `belongs_to` with an option' do expect_offense(<<-RUBY) belongs_to :company, touch: true - ^^^^^^^^^^ Use `db_belongs_to`. + ^^^^^^^^^^ DatabaseValidations/BelongsTo: Use `db_belongs_to`. RUBY end diff --git a/spec/rubocop/cop/uniqueness_of_spec.rb b/spec/rubocop/cop/uniqueness_of_spec.rb index 9087337..39d147d 100644 --- a/spec/rubocop/cop/uniqueness_of_spec.rb +++ b/spec/rubocop/cop/uniqueness_of_spec.rb @@ -6,28 +6,28 @@ it 'detects `uniqueness: true`' do expect_offense(<<-RUBY) validates :slug, uniqueness: true - ^^^^^^^^^^^^^^^^ Use `validates_db_uniqueness_of`. + ^^^^^^^^^^^^^^^^ DatabaseValidations/UniquenessOf: Use `validates_db_uniqueness_of`. RUBY end it 'detects `uniqueness` on multiple fields' do expect_offense(<<-RUBY) validates :code, :name, uniqueness: true - ^^^^^^^^^^^^^^^^ Use `validates_db_uniqueness_of`. + ^^^^^^^^^^^^^^^^ DatabaseValidations/UniquenessOf: Use `validates_db_uniqueness_of`. RUBY end it 'detects conditional uniqeuness valudation' do expect_offense(<<-RUBY) validates :main, uniqueness: {scope: :client_id}, if: -> { main? && main_changed? } - ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Use `validates_db_uniqueness_of`. + ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ DatabaseValidations/UniquenessOf: Use `validates_db_uniqueness_of`. RUBY end it 'detects `validates_uniqueness_of`' do expect_offense(<<-RUBY) validates_uniqueness_of :title, :slug - ^^^^^^^^^^^^^^^^^^^^^^^ Use `validates_db_uniqueness_of`. + ^^^^^^^^^^^^^^^^^^^^^^^ DatabaseValidations/UniquenessOf: Use `validates_db_uniqueness_of`. RUBY end end