Test fixtures et reformatage

Les tests fixtures sont un des moyens de gérer les données nécessaires aux tests. Le système de test fixtures de Ruby on Rails se distingue par sa grande facilité d’écriture. Les données sont saisies dans des fichiers YAML, et le système de test gère les id, les relations 1-n et les relations n-n.

Parfois les données brutes ne sont pas disponibles dans le bon format. L’éditeur vi (ou vim), disponible sur toutes les bonnes plateformes, dispose d’une commande d’édition par expressions régulières très puissante. Prenons un exemple. J’ai donc besoin de convertir une liste d’ATA au format YAML.

Format liste

21 : Air conditioning
22 : Auto flight
23 : Communications

Format YAML

21:
  number: 21
  description: Air conditioning

22:
  number: 22
  description: Auto flight

23:
  number: 23
  description: Communications

La commande vi de substitution

Une « simple » commande suffit:

:%s/\([0-9][0-9]\) : \(.*\)/\1:\r  number: \1\r  description: \2\r/

Ça paraît un peu rude, mais c’est facile à décortiquer. Prenons la commande dans l’ordre.

  • % toutes les lignes du fichier
  • s/.../.../ la commande de substitution qui va être appliquée à chaque ligne
  • [0-9][0-9] deux chiffres ; je mémorise le numéro dans \1 en le mettant entre \( et \)
  • : deux points entre deux espace
  • .* tout le reste de la ligne, que je \(mémorise\) dans \2
  • maintenant le remplacement : je récupère le numéro avec \1, que j’insère suivi de : et d’un saut de ligne
  • insertion de number: puis le numéro
  • insertion de description: puis le texte récupéré

Facile, non ?