E-JAMBON bio photo

E-JAMBON

Ce qui se conçoit bien s'exprime clairement.

Email Twitter Github

Où j’appelle épisode 3 ce qui, théoriquement, aurait du constituer le sujet de l’éposode 2.

Dans l’épisode 1, j’avais terminé en notant que : 1. A chaque régénération du site, tous les encadrés générés par embark étaient reconstruits. C’est lent. Il faut donc enregistrer ces encadrés pour pouvoir réutiliser les données pour la prochaine régénération. 2. Que c’était moche, qu’il fallait créer de nouveaux styles.

Enregistrer les données embarquées :

  1. Si la donnée existe déjà, doit la lire.
  2. Si la donnée n’existe pas, on doit l’enregistrer.
  3. On doit afficher le cadre dans l’article.

Comment nommer générer le fichier.

On pourrait penser utiliser l’url telle quel en guise de nom de fichier.

  • D’une part la taille des noms de fichiers est limitée, alors que celle de l’url ne l’est pas.

  • D’autre part une url contient des paramètres : l’ordre dans lequel ils sont présentés importe peu : si ces paramètres ont la même valeur, c’est la même url.

Pour résoudre le premier problème soulevé, il y a une solution simple : calculer le checksum md5, sensé être unique pour une chaîne de caractères donnée, et l’utiliser en guise de nom de fichier.

Pour résoudre le deuxième problème, on utilise la classe URI pour extraire les paramètres de l’URL, puis on les classe par ordre alphabétique.

require 'uri'

embarkedURI = URI(monUrl)
embarkedURI.query &&= embarkedURI.query.split("&").sort.join("&")

Explication sur le &&=

embarkedURI.query renvoie la chaîne de caractère représentant les paramètres dans l’URL.

En ruby l’opérateur && ( opérateur ET ) est dit “paresseux”.

Sachant que l’opération : false && (quoique ce soit) vaut toujours “false” (faux), Ruby se comporte en paresseux et n’évalue l’opérande de droite de && qu’à la condition que c’elle de gauche soit vraie.

C’est pratique : nil s’évalue à “false”. Toutes les autres valeurs s’évaluent à true, sauf “false” (evidemment).

Dans notre cas, si la chaîne embarkedURI.query n’est pas vide (nil) c’est qu’il y a des paramètres. On veut les classer par ordre alphabétique. S’il n’y a pas de paramètres dans notre URL, on a rien à faire.

Pour manipuler des fichiers, en Ruby

On utilise la classe File, qui se trouve dans ‘fileutils’

La syntaxe

J’en ai ajouté un certain nombre de styles utilisables pour embarked. Ils s’appellent tous “embarked-nomDuStyle.css”

Embarked s’utilise désormais comme ceci :

embark url__mon titre__mon commentaire__nomDuStyle

Résultat

Mon blog

Un blog que vous pouvez lire à la rigueur

ICI E-JAMBON

E-jambon, le blog du jambon électronique.

Source : ici.e-jambon.com

Tests

En faisant des tests sur un grand nombre d’encadrés, je suis passé de 10 minutes de génération à quelques secondes lors de la deuxième génération. Le concept semble donc fonctionner.

Néanmoins : - Les images sont celles récupérées sur le site. Il y a sans doute moyen de les optimiser et de les conserver localement. S’il n’y en a pas, il y a sans doute moyen d’en génerer une. - Le choix de l’interface qui consiste à séparer les paramètres d’embark par un double underscore (tiret bas) risque de créer des bugs (quid d’une url qui contiendrait deux tirets bas). Il faudra donc la modifier. - Pour l’instant, il n’y a aucun traitement d’erreur / aucun test.

Bref : il y a encore du boulot. Mais ce n’est pas l’objet de ce post.

Le code

J’ai failli oublier de mettre le code obtenu.

Il est disponible ici : github/e-jambon/jekyll-test