class RuboCop::RSpec::Wording

RSpec example wording rewriter

def append_suffix(word, suffix)

def append_suffix(word, suffix)
  suffix = suffix.upcase if uppercase?(word)
  "#{word}#{suffix}"
end

def ignored_word?(word)

def ignored_word?(word)
  ignores.any? { |ignore| ignore.casecmp(word).zero? }
end

def initialize(text, ignore:, replace:)

def initialize(text, ignore:, replace:)
  @text         = text
  @ignores      = ignore
  @replacements = replace
end

def remove_should_and_pluralize

def remove_should_and_pluralize
  _should, *words = text.split
  words.each_with_index do |word, index|
    next if ignored_word?(word)
    words[index] = substitute(word)
    break
  end
  words.join(' ')
end

def replace_prefix(pattern, replacement)

def replace_prefix(pattern, replacement)
  text.sub(pattern) do |shouldnt|
    uppercase?(shouldnt) ? replacement.upcase : replacement
  end
end

def rewrite

def rewrite
  case text
  when SHOULDNT_BE_PREFIX
    replace_prefix(SHOULDNT_BE_PREFIX, 'is not')
  when SHOULDNT_PREFIX
    replace_prefix(SHOULDNT_PREFIX, 'does not')
  else
    remove_should_and_pluralize
  end
end

def substitute(word)

def substitute(word)
  # NOTE: Custom replacements are case sensitive.
  return replacements.fetch(word) if replacements.key?(word)
  case word
  when ES_SUFFIX_PATTERN  then append_suffix(word, 'es')
  when IES_SUFFIX_PATTERN then append_suffix(word[0..-2], 'ies')
  else append_suffix(word, 's')
  end
end

def uppercase?(word)

def uppercase?(word)
  word.upcase.eql?(word)
end