Impossibile inviare un determinato messaggio in chat

value too long for type character varying(1000) mi indica che è correlato all’estratto. Questo è sorprendente perché tecnicamente limitiamo gli estratti a 150 caratteri, quindi questo caso non dovrebbe mai verificarsi. Inizialmente ho pensato che fosse un bug nel nostro generatore di estratti, ma guardando il codice dell’estratto in chat ho visto questo:

def build_excerpt
  # mostra solo l'URL se l'intero messaggio è un URL, perché non possiamo estrarre onebox
  return message if UrlHelper.relaxed_parse(message).is_a?(URI)

  # i messaggi solo di upload sono meglio rappresentati come il nome del file
  return uploads.first.original_filename if cooked.blank? && uploads.present?

  # questo potrebbe restituire vuoto per alcune cose complesse come le citazioni, il che è accettabile
  PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end

Un rapido debug ha dimostrato che in realtà non raggiungiamo mai PrettyText.excerpt e ci fermiamo al primo return. Apparentemente i ??? fanno credere al nostro codice che si tratti di un URL:

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