¿Cómo validar Markdown?
-
04-07-2019 - |
Pregunta
Es posible escribir Markdown con una sintaxis no válida. No válido significa que la biblioteca BlueCloth no puede analizar el contenido y lanza una excepción. El asistente de markdown
en Rails no detecta ninguna excepción de BlueCloth y, debido a eso, la página completa no se procesa (en su lugar, se representa la página de 500 errores de servidor).
En mi caso, los usuarios pueden escribir contenido de Markdown y guardarlo en la base de datos. Si alguien usó una sintaxis no válida, todos los intentos de representación sucesivos de ese contenido fallan (Código de estado 500 - Error interno del servidor).
¿Cómo solucionas este problema? ¿Es posible validar la sintaxis de Markdown en el nivel de Modelo antes de guardar en la base de datos?
Solución
Debería escribir su propio método de validación en el que inicializaría el objeto BlueCloth e intente llamar al método to_html
para detectar cualquier excepción. Si detecta una excepción, la validación falla, de lo contrario debería estar bien.
En tu modelo:
protected:
def validate
bc = BlueCloth.new(your_markdown_string_attribute)
begin
bc.to_html
rescue
errors.add(:your_markdown_string_attribute, 'has invalid markdown syntax')
end
end
Otros consejos
He investigado un poco y he decidido utilizar RDiscount en lugar de BlueCloth. RDiscount parece ser mucho más rápido y más confiable que BlueCloth.
Es fácil integrar RDiscount en su entorno Rails. Incluya el siguiente recorte en su environment.rb
y estará listo para comenzar:
begin
require "rdiscount"
BlueCloth = RDiscount
rescue LoadError
# BlueCloth is still the our fallback,
# if RDiscount is not available
require 'bluecloth'
end
(probado con Rails 2.2.0)