class RuboCop::Cop::RSpec::ClassCheck

Enforces consistent use of ‘be_a` or `be_kind_of`.

@example EnforcedStyle: be_a (default)

# bad
expect(object).to be_kind_of(String)
expect(object).to be_a_kind_of(String)

# good
expect(object).to be_a(String)
expect(object).to be_an(String)

@example EnforcedStyle: be_kind_of

# bad
expect(object).to be_a(String)
expect(object).to be_an(String)

# good
expect(object).to be_kind_of(String)
expect(object).to be_a_kind_of(String)

Constants

METHOD_NAMES_FOR_BE_A
METHOD_NAMES_FOR_KIND_OF
MSG
PREFERRED_METHOD_NAME_BY_STYLE
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 54
def on_send(node)
  return unless offending?(node)

  add_offense(
    node.loc.selector,
    message: format_message(node)
  ) do |corrector|
    autocorrect(corrector, node)
  end
end

Private Instance Methods

autocorrect(corrector, node) click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 67
def autocorrect(corrector, node)
  corrector.replace(node.loc.selector, preferred_method_name)
end
format_message(node) click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 71
def format_message(node)
  format(
    MSG,
    current: node.method_name,
    preferred: preferred_method_name
  )
end
offending?(node) click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 79
def offending?(node)
  !node.receiver && !preferred_method_name?(node.method_name)
end
preferred_method_name() click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 87
def preferred_method_name
  PREFERRED_METHOD_NAME_BY_STYLE[style]
end
preferred_method_name?(method_name) click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 83
def preferred_method_name?(method_name)
  preferred_method_names.include?(method_name)
end
preferred_method_names() click to toggle source
# File lib/rubocop/cop/rspec/class_check.rb, line 91
def preferred_method_names
  if style == :be_a
    METHOD_NAMES_FOR_BE_A
  else
    METHOD_NAMES_FOR_KIND_OF
  end
end