Certas mensagens não podem ser enviadas no chat

O value too long for type character varying(1000) indica para mim que está relacionado ao trecho. Isso é surpreendente porque tecnicamente limitamos os trechos em 150 caracteres, então este caso nunca deveria acontecer. Inicialmente, pensei que fosse um bug em nosso construtor de trechos, mas olhando o código do trecho no chat, vi isto:

def build_excerpt
  # apenas mostra o URL se a mensagem inteira for um URL, pois não podemos criar trechos de oneboxes
  return message if UrlHelper.relaxed_parse(message).is_a?(URI)

  # mensagens apenas de upload são melhor representadas como o nome do arquivo
  return uploads.first.original_filename if cooked.blank? && uploads.present?

  # isso pode retornar em branco para algumas coisas complexas como citações, o que é aceitável
  PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end

Uma depuração rápida mostrou que, na verdade, nunca chegamos a PrettyText.excerpt e paramos no primeiro return. Aparentemente, o ??? está fazendo nosso código pensar que isso é um URL:

[1] pry(main)> UrlHelper.relaxed_parse("???\ntest").is_a?(URI)
=> true
3 curtidas