class RuboCop::Cop::RSpec::VerifiedDoubleReference

Checks for consistent verified double reference style.

Only investigates references that are one of the supported styles.

@see rspec.info/features/3-12/rspec-mocks/verifying-doubles

This cop can be configured in your configuration using the ‘EnforcedStyle` option and supports `–auto-gen-config`.

@example ‘EnforcedStyle: constant` (default)

# bad
let(:foo) do
  instance_double('ClassName', method_name: 'returned_value')
end

# good
let(:foo) do
  instance_double(ClassName, method_name: 'returned_value')
end

@example ‘EnforcedStyle: string`

# bad
let(:foo) do
  instance_double(ClassName, method_name: 'returned_value')
end

# good
let(:foo) do
  instance_double('ClassName', method_name: 'returned_value')
end

@example Reference is not in the supported style list. No enforcement

# good
let(:foo) do
  instance_double(@klass, method_name: 'returned_value')
end

Constants

MSG
REFERENCE_TYPE_STYLES
RESTRICT_ON_SEND

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/verified_double_reference.rb, line 74
def on_send(node)
  verified_double(node) do |class_reference|
    break correct_style_detected unless opposing_style?(class_reference)

    message = format(MSG, style: style)
    expression = class_reference.source_range

    add_offense(expression, message: message) do |corrector|
      offense = class_reference.source
      corrector.replace(expression, correct_style(offense))

      opposite_style_detected
    end
  end
end

Private Instance Methods

correct_style(offense) click to toggle source
# File lib/rubocop/cop/rspec/verified_double_reference.rb, line 101
def correct_style(offense)
  if style == :string
    "'#{offense}'"
  else
    offense.gsub(/^['"]|['"]$/, '')
  end
end
opposing_style?(class_reference) click to toggle source
# File lib/rubocop/cop/rspec/verified_double_reference.rb, line 92
def opposing_style?(class_reference)
  class_reference_style = REFERENCE_TYPE_STYLES[class_reference.type]

  # Only enforce supported styles
  return false unless class_reference_style

  class_reference_style != style
end