Nimble Blog (1/2)
by Simon Tirant (3 min read)
This post also exists in english
La gĂ©nĂšse dâune librarie đ
Il y a trois ans de cela (c-Ă -d. en 2020), JosĂ© Valim, le crĂ©ateur dâElixir, a publiĂ© un article sur le blog de Dashbit racontant la nouvelle façon avec laquelle ils ont dĂ©cidĂ© de concevoir leur nouveau blog. Comme câest pricnipalement un site avec du contenu statique, ils ne voulaient pas sâembĂȘter avec un CMS lourd comme WordPress ou autres (existe-t-il vraiment dâautres que Wordpress en rĂ©alitĂ© âââ).
Vous avez aussi les générateurs de sites statiques, tels que le trÚs réputé Jekyll, pour transformer vos repos Git de fichiers Markdown en une belle page HTML. Signification: vous écrivez, vous git add .
, vous git commit -m "Mon super nouveau post"
, vous git push
et voilĂ ! Câest publiĂ© ! Mais vous devez aussi construire votre page en amont, donc il nây a absolument aucun contenu dynamic. MĂȘme pas un tout petit peu. ConcrĂštement, cela veut dire que vous ne pouvez ni filtrer, ni trier, ni paginer vos articles comme vous pourriez lâattendre dâun super blog tel que celui que vous ĂȘtes actuellement en train de lire (nâest-ce pas ? Sâil vous plaĂźt, dites âOuiâ đ„șđ).
Alors, la question Ă 1 million de dollars (en vrai câest gratuit car câest open source) est : âSeigneur, comment puis-je obtenir le meilleur des deux mondes ? Comment puis-je avoir un blog lĂ©gĂšrement dynamique compilĂ© Ă partir de simple fichiers Markdown situĂ©s sur un repertoir Git dĂ©diĂ© ??? Sâil te plaĂźt, aide-moi ! AIDE-MOI !â
Calme-toi Jean-Jean, JosĂ© tâassure le coup ! En effet, pour commencer, lâarticle prĂ©cĂ©demment mentionnĂ© continue de dĂ©crire la façon dont ils ont fait un blog dynamique, en utilisant Phoenix pour prĂ©-compiler et charger en mĂ©moire leurs posts Markdown situĂ©s Ă lâintĂ©rieur dâun fichier du framework (Ă savoir sur le disque et non pas en base de donnĂ©es!).
En un mot, quand ton projet compile, nous lisons tous les posts de blog depuis le disque et nous les convertissons en des structures de données en mémoire.
JosĂ© Valim (traduit depuis lâanglais)
Lâarticle va assez profondĂ©ment dans le code afin que vous puissiez tout voir: la dĂ©finition de la struct %Post{}
, la fonction pour appeler les fichiers .md
afin de les transformer en une liste de %Post{}
, triĂ©e par date de publication descendante et stockĂ©e Ă lâintĂ©rieur dâun module attribute (lâopĂ©rateur @)
). Ce module peut ensuite ĂȘtre appelĂ© via une fonction publique nommĂ©e list_post/0
, servant lors de lâĂ©xĂ©cution le contenu stockĂ© en mĂ©moire durant la compilation.
Et bien voici, juste devant vos beaux yeux, les 17 lignes de code qui résument à elles-seules le coeur de leur application de blog :
defmodule Dashbit.Blog do
alias Dashbit.Blog.Post
posts_paths = "posts/**/*.md" |> Path.wildcard() |> Enum.sort()
posts =
for post_path <- posts_paths do
@external_resource Path.relative_to_cwd(post_path)
Post.parse!(post_path)
end
@posts Enum.sort_by(posts, & &1.date, {:desc, Date})
def list_posts do
@posts
end
end
Ensuite, plus quâun simple article tutoriel, JosĂ© a dĂ©cidĂ© de faire de ces lignes de codes une librairie Hex nommĂ©e NimblePublisher. Maintenant vous pouvez faire pareil que Dashbit sans avoir Ă analyser les fichiers Markdown en des structs (sauf si vous voulez personaliser lâanalyse) ou convertir la syntaxe Markdown en un bon vieux HTML lors de la compilation (ce qui est en rĂ©alitĂ© fait par les dĂ©pendances Earmark et MakeupElixir).
Et câest exactement ce que nous allons voir dans le prochain article: un tutoriel sur NimblePublisher propulsĂ© par Phoenix 1.7, la derniĂšre version du framework qui ammĂšne des changements dans le mĂ©canisme des vues!