No se puede enviar cierto mensaje en el chat

El value too long for type character varying(1000) me indica que está relacionado con el extracto. Esto es sorprendente porque técnicamente limitamos los extractos a 150 caracteres, por lo que este caso nunca debería ocurrir. Al principio pensé que era un error en nuestro generador de extractos, pero al mirar el código del extracto en el chat vi esto:

def build_excerpt
  # solo muestra la URL si el mensaje completo es una URL, porque no podemos extraer oneboxes
  return message if UrlHelper.relaxed_parse(message).is_a?(URI)

  # los mensajes solo de carga se representan mejor como el nombre del archivo
  return uploads.first.original_filename if cooked.blank? && uploads.present?

  # esto puede devolver un valor en blanco para algunas cosas complejas como citas, eso es aceptable
  PrettyText.excerpt(cooked, EXCERPT_LENGTH, strip_links: true, keep_mentions: true)
end

Una depuración rápida ha demostrado que en realidad nunca llegamos a PrettyText.excerpt y nos detenemos en el primer return. Aparentemente, los ??? hacen que nuestro código piense que esto es una URL:

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