class RuboCop::Cop::Rails::RefuteMethods

Use `assert_not` methods instead of `refute` methods.

@example EnforcedStyle: assert_not (default)

# bad
refute false
refute_empty [1, 2, 3]
refute_equal true, false

# good
assert_not false
assert_not_empty [1, 2, 3]
assert_not_equal true, false

@example EnforcedStyle: refute

# bad
assert_not false
assert_not_empty [1, 2, 3]
assert_not_equal true, false

# good
refute false
refute_empty [1, 2, 3]
refute_equal true, false

Constants

ASSERT_NOT_METHODS
CORRECTIONS
MSG
REFUTE_METHODS
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rails/refute_methods.rb, line 61
def on_send(node)
  return unless offensive?(node)

  method_name = node.method_name
  message = offense_message(method_name)
  range = node.loc.selector

  add_offense(range, message: message) do |corrector|
    corrector.replace(range, convert_good_method(method_name))
  end
end

Private Instance Methods

bad_method?(method_name) click to toggle source
# File lib/rubocop/cop/rails/refute_methods.rb, line 75
def bad_method?(method_name)
  if style == :assert_not
    REFUTE_METHODS.include?(method_name)
  else
    ASSERT_NOT_METHODS.include?(method_name)
  end
end
convert_good_method(bad_method) click to toggle source
# File lib/rubocop/cop/rails/refute_methods.rb, line 91
def convert_good_method(bad_method)
  if style == :assert_not
    CORRECTIONS.fetch(bad_method)
  else
    CORRECTIONS.invert.fetch(bad_method)
  end
end
offense_message(method_name) click to toggle source
# File lib/rubocop/cop/rails/refute_methods.rb, line 83
def offense_message(method_name)
  format(
    MSG,
    bad_method: method_name,
    good_method: convert_good_method(method_name)
  )
end