class ReeString::TruncateWords

def call(str, words_count, **opts)

def call(str, words_count, **opts)
  str = str.dup
  sep = opts[:separator] || /\s+/
  sep = Regexp.escape(sep.to_s) unless Regexp === sep
  if str =~ /\A((?>.+?#{sep}){#{words_count - 1}}.+?)#{sep}.*/m
    $1 + (opts[:omission] || "...")
  else
    str
  end
end