class RuboCop::Cop::Rails::SkipsModelValidations

This cop checks for the use of methods which skip validations which are listed in guides.rubyonrails.org/active_record_validations.html#skipping-validations

Methods may be ignored from this rule by configuring a `Whitelist`.

@example

# bad
Article.first.decrement!(:view_count)
DiscussionBoard.decrement_counter(:post_count, 5)
Article.first.increment!(:view_count)
DiscussionBoard.increment_counter(:post_count, 5)
person.toggle :active
product.touch
Billing.update_all("category = 'authorized', author = 'David'")
user.update_attribute(:website, 'example.com')
user.update_columns(last_request_at: Time.current)
Post.update_counters 5, comment_count: -1, action_count: 1

# good
user.update(website: 'example.com')
FileUtils.touch('file')

@example Whitelist: [“touch”]

# bad
DiscussionBoard.decrement_counter(:post_count, 5)
DiscussionBoard.increment_counter(:post_count, 5)
person.toggle :active

# good
user.touch

Constants

METHODS_WITH_ARGUMENTS
MSG

Public Instance Methods

on_csend(node)
Alias for: on_send
on_send(node) click to toggle source
# File lib/rubocop/cop/rails/skips_model_validations.rb, line 56
def on_send(node)
  return if whitelist.include?(node.method_name.to_s)
  return unless blacklist.include?(node.method_name.to_s)
  return if allowed_method?(node)
  return if good_touch?(node)

  add_offense(node, location: :selector)
end
Also aliased as: on_csend

Private Instance Methods

allowed_method?(node) click to toggle source
# File lib/rubocop/cop/rails/skips_model_validations.rb, line 72
def allowed_method?(node)
  METHODS_WITH_ARGUMENTS.include?(node.method_name.to_s) &&
    !node.arguments?
end
blacklist() click to toggle source
# File lib/rubocop/cop/rails/skips_model_validations.rb, line 77
def blacklist
  cop_config['Blacklist'] || []
end
message(node) click to toggle source
# File lib/rubocop/cop/rails/skips_model_validations.rb, line 68
def message(node)
  format(MSG, method: node.method_name)
end
whitelist() click to toggle source
# File lib/rubocop/cop/rails/skips_model_validations.rb, line 81
def whitelist
  cop_config['Whitelist'] || []
end