Certains messages ne peuvent pas être envoyés dans le chat

La valeur trop longue pour le type character varying(1000) m’indique que c’est lié à l’extrait. C’est surprenant car techniquement nous limitons les extraits à 150 caractères, donc ce cas ne devrait jamais arriver. Au début, j’ai pensé à un bug dans notre générateur d’extraits, mais en regardant le code de l’extrait dans le chat, j’ai vu ceci :

def build_excerpt
  # affiche juste l'URL si le message entier est une URL, car nous ne pouvons pas extraire les oneboxes
  return message if UrlHelper.relaxed_parse(message).is_a?(URI)

  # les messages contenant uniquement des téléversements sont mieux représentés par le nom du fichier
  return uploads.first.original_filename if cooked.blank? && uploads.present?

  # cela peut retourner une chaîne vide pour des choses complexes comme les citations, c'est acceptable
  PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end

Un débogage rapide a montré que nous n’atteignons en fait jamais PrettyText.excerpt et que nous nous arrêtons à la première instruction return. Apparemment, les ??? font que notre code pense qu’il s’agit d’une URL :

[1] pry(main)> UrlHelper.relaxed_parse("???\ntest").is_a?(URI)
=> true
3 « J'aime »