Un équivalent à nl2br pour Ruby on Rails utilisant simple_format

Si vous avez fait vos premières armes en développement web sur PHP et avez fini par rejoindre les rangs des adeptes de Ruby on Rails, il est possible que la bonne vieille méthode nl2br vous manque un peu...

Rails propose, quant à lui, simple_format, qui transforme automatiquement vos sauts de ligne en balises HTML et encapsule votre contenu dans un paragraphe. Hélas, cette dernière traite systématiquement deux sauts de ligne consécutifs comme un nouveau paragraphe, et n'offre pas la possibilité de modifier ce comportement.

Voici donc une petite méthode à insérer dans un helper de votre projet et qui vous permettra de retrouver vos marques. Elle fonctionne comme simple_format, mais n'insère que des <br /> (un par \n) et aucun

dans votre contenu :

def nl2br(s, html_options = {})
simple_format(s, html_options, :sanitize => false).gsub(/<\/p>(\s*)<p([^>]*)>/, '<br /><br />')
end

Notez que dans mon cas, je passe d'office la valeur false au paramètre :sanitize des options de simple_format, au cas où la chaîne de caractères à traiter contiendrait déjà du HTML auquel je voudrais faire subir le même traitement. À vous d'ajuster selon votre préférence !

Cette méthode sera utilisée comme ceci dans vos templates ERB :

<%= nl2br(my_content, { :class => 'americaine' }).html_safe %>

D'aucuns objecteront (à raison) que html_safe est trop permissif dans le cas d'une entrée utilisateur, raison pour laquelle je n'ai pas inclus son appel dans le helper. Le cas échéant, il vous est toujours possible de supprimer certaines balises indésirables avec, par exemple :

<%= nl2br(my_content).gsub(/<script([^>]*)>(.*?)<\/script>/u, '').html_safe %>