class RuboCop::Cop::RSpec::VariableDefinition

Checks that memoized helpers names are symbols or strings.

@example EnforcedStyle: symbols (default)

# bad
subject('user') { create_user }
let('user_name') { 'Adam' }

# good
subject(:user) { create_user }
let(:user_name) { 'Adam' }

@example EnforcedStyle: strings

# bad
subject(:user) { create_user }
let(:user_name) { 'Adam' }

# good
subject('user') { create_user }
let('user_name') { 'Adam' }

Constants

MSG

Public Instance Methods

on_send(node) click to toggle source
# File lib/rubocop/cop/rspec/variable_definition.rb, line 34
def on_send(node)
  return unless inside_example_group?(node)

  variable_definition?(node) do |variable|
    next unless style_offense?(variable)

    add_offense(
      variable,
      message: format(MSG, style: style)
    ) do |corrector|
      corrector.replace(variable, correct_variable(variable))
    end
  end
end

Private Instance Methods

correct_variable(variable) click to toggle source
# File lib/rubocop/cop/rspec/variable_definition.rb, line 51
def correct_variable(variable)
  case variable.type
  when :dsym
    variable.source[1..]
  when :sym
    variable.value.to_s.inspect
  else
    variable.value.to_sym.inspect
  end
end
string?(node) click to toggle source
# File lib/rubocop/cop/rspec/variable_definition.rb, line 67
def string?(node)
  node.str_type?
end
style_offense?(variable) click to toggle source
# File lib/rubocop/cop/rspec/variable_definition.rb, line 62
def style_offense?(variable)
  (style == :symbols && string?(variable)) ||
    (style == :strings && symbol?(variable))
end
symbol?(node) click to toggle source
# File lib/rubocop/cop/rspec/variable_definition.rb, line 71
def symbol?(node)
  node.sym_type? || node.dsym_type?
end