class RuboCop::Cop::InternalAffairs::ExampleDescription

Checks that RSpec examples that use ‘expects_offense` or `expects_no_offenses` do not have conflicting descriptions.

@example

# bad
it 'does not register an offense' do
  expect_offense('...')
end

it 'registers an offense' do
  expect_no_offenses('...')
end

# good
it 'registers an offense' do
  expect_offense('...')
end

it 'does not register an offense' do
  expect_no_offenses('...')
end

Constants

EXPECT_CORRECTION_INCORRECT_DESCRIPTIONS
EXPECT_NO_CORRECTIONS_INCORRECT_DESCRIPTIONS
EXPECT_NO_OFFENSES_INCORRECT_DESCRIPTIONS
EXPECT_OFFENSE_INCORRECT_DESCRIPTIONS
MSG
RESTRICT_ON_SEND

Attributes

descriptions[RW]

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/internal_affairs/example_description.rb, line 67
def on_send(node)
  parent = node.each_ancestor(:block).first
  return unless parent && (description = offense_example?(parent))

  method_name = node.method_name
  message = format(MSG, method_name: method_name)

  regexp_group = self.class.const_get("#{method_name}_incorrect_descriptions".upcase)
  check_description(description, regexp_group, message)
end

Private Instance Methods

check_description(description, regexps, message) click to toggle source
# File lib/rubocop/cop/internal_affairs/example_description.rb, line 80
def check_description(description, regexps, message)
  return unless regexps.any? { |regexp| regexp.match?(string_contents(description)) }

  add_offense(description, message: message)
end
string_contents(node) click to toggle source
# File lib/rubocop/cop/internal_affairs/example_description.rb, line 86
def string_contents(node)
  node.str_type? ? node.value : node.source
end