Sur mon site Web Middleman-construit, j'ai besoin d'exécuter le code Ruby spécifique sur le contenu de toutes les pages (modèles).Exécuter la méthode Ruby sur toute la page dans Middleman
Par exemple, si j'avais suivant aide dans mon config.rb
:
def myexample(text)
text.gsub("dog","cat")
end
Et dans mon test.html.haml
:
Mon visualisées et les généré /test.html
lirait:
Some text about a cat.
Cependant, j'utilise plusieurs façons différentes s pour sortir le texte qui doit être modifié, notamment via le filtre :markdown
de HAML, donc je préférerais ne pas tout emballer dans l'assistant = myexample("Text")
. Je voudrais être en mesure d'exécuter le code Ruby qui prendrait le contenu de toutes les pages (de préférence) ou généré une sortie HTML (si la première option n'est pas possible) comme un argument passé à un tel assistant.
Idéalement, ce code serait exécuté dans les environnements de développement et de construction, mais si cela n'est pas possible, la construction est suffisante.
Est-il possible de le faire?
PS. Dans mon cas spécifique, j'utilise une notation abrégée pour référencer d'autres pages, puis j'utilise un regular expression and eval()
in order to replace them with relative links from data files.
Y a-t-il une raison pour laquelle vous ne pouvez pas vous assurer que HAML génère le code HTML final que vous recherchez? Ce que vous faites est définitivement non conventionnel, et vous pouvez le rendre plus compliqué que ce qu'il doit être. Mais je sais aussi que votre code actuel est beaucoup plus complexe que cela. –
Le problème principal ici est que j'ai plus de 100 utilisations du filtre HAML '': markdown'', qui est utilisé pour traiter la marque de bloc (plusieurs paragraphes), dont 20% incluent des références '' ref.pageA''. J'ai été capable de changer mes partiels, donc maintenant ils sont traités par votre code à partir de l'autre question, mais ces filtres HAML '': markdown'' ont encore des liens qui ont besoin d'être évalués. Je ne veux pas changer tous les filtres HAML en helper '' mymarkdown() '' car cela détruirait la lisibilité et helper ne semble pas pouvoir accepter les entrées de bloc (plusieurs paragraphes) de toute façon. – Rafal
Si l'exécution du code sur la page entière n'est pas possible, alors ma seule solution serait de déplacer tous ces blocs sous le filtre HAML '': markdown'' dans le fichier de données et de les mettre dans le modèle avec '' mymarkdown''. Et puis je devrais emballer tous les autres bits de texte d'un paragraphe qui incluent également des liens avec l'aide '' mymarkdown''. – Rafal