Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions database_validations.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -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
7 changes: 3 additions & 4 deletions lib/database_validations/rubocop/cop/belongs_to.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down
7 changes: 4 additions & 3 deletions lib/database_validations/rubocop/cop/uniqueness_of.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
4 changes: 2 additions & 2 deletions spec/rubocop/cop/belongs_to_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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

Expand Down
8 changes: 4 additions & 4 deletions spec/rubocop/cop/uniqueness_of_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -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