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 |matched| uppercase?(matched) ? 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