10 septembre 2008 – 18:36
Écrire des fixtures n’est généralement pas compliqué (je ne parle pas de maintenance ici). Les champs cryptés posent néanmoins un problème particulier, ne serait-ce que celui de trouver la bonne fonction de cryptage. Dans le cas du plugin acts_as_authenticated, voici la démarche à suivre.
Méthode
Nous voulons un salt raisonnable. Nous l’obtenons donc sur random.org. J’ai obtenu 1290 9d9c 16f8 5fad d3b5 a11f 2fb9 f358 que je recopie dans le champ salt (sans les espaces).
Pour encrypter le mot de passe SourceStuff, nous lançons la console et nous cryptons avec Digest::SHA1. Le résultat est bien sûr recopié dans le champ crypted_password.
xtian$ ./script/console
Loading development environment (Rails 2.1.0)
>> Digest::SHA1.hexdigest("--12909d9c16f85fadd3b5a11f2fb9f358--SourceStuff--")
=> "843a3ec693ba69e5f09ba4554f0d0799c979b93c"
Euh… bien sûr vous remplacez le salt et le mot de passe par les votres?. Dois-je le dire ?
Résultat
ErikSink:
login: eric
email: eric@softwarelegend.com
salt: 12909d9c16f85fadd3b5a11f2fb9f358
crypted_password: 843a3ec693ba69e5f09ba4554f0d0799c979b93c
Les informations
La base : le chapitre 7 du manuel, The Lo-Down on Fixtures et la référence.
Une bonne introduction aux fixtures dans Rails 2.0 : Fixtures in Rails 2.0
Si vous n’aimez pas les screencasts, la même info dans un blog : What’s New in Edge Rails: Fixtures Just Got a Whole Lot Easier
Les avis
Le titre de l’article se passe de commentaire : Why Fixtures Suck (And How We Can Fix Them). Un peu vieux, il date du mois d’août 2006
Daniel Manges propose de remplacer les fixtures par des factories. Paul Gross propose un raffinement de la méthode. À creuser.
Chris Wanstrath propose des Fixtures scenarios. Les commentaires qui suivent sont particulièrement intéressants.
Les outils
Fabien Jakimowicz vous propose des tâches rake qui construisent vos fixtures à partir d’une base de données dans son article Rails plugin: named fixtures exporter
Clefs étrangères et intégrité référentielle
Les clefs étrangères présentent une difficulté : il n’est plus possible d’insérer ni de supprimer les enregistrements dans la base dans un ordre quelconque. Per Olesen propose une technique pour résoudre ce problème dans son article Rails Fixtures Tips.
La voie de Testivus — la sagesse du test unitaire dans une ancienne startup.
Don’t get stuck on unit testing dogma
Embrace unit testing karma
Le même article en pdf.
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 ?
Je crois bien que la navigation dans le site photo de John Ross est la pire que j’ai jamais vue. Bien évidemment, le site étant entièrement en flash, il est impossible de référencer une photo.
Pourtant, le flash peut améliorer l’interface, j’en veux pour preuve, par exemple, le Flash Uploader de WordPress.
Mozilla Labs a lancé mardi dernier son projet Ubiquity. Il s’agit d’une nouvelle façon d’interagir avec internet, en particulier via le web et le mail.
Ubiquity prend la forme d’un plugin Firefox, disponible sur toutes les plateformes (il y a quelques limitations d’emploi sur Linux).
Comme Quicksilver, Ubiquity est difficile à décrire tant il versatile. Essayez-le.
Ubiquity [via 43folders]
Jamis Buck annonce la sortie de la version 2.5 de Capistrano. L’annonce décrit les évolutions, dont :
- parallel() helper (mise à jour de plusieurs serveurs en parallèle en fonction de leurs états respectifs)
- Chained gateways (autorise l’accès à travers plusieurs passerelles)
- “-s” and “-S” infer the types of their arguments (généralise l’option de ligne de commande)
- deploy:rollback and mongrel (résoud le crash de mongrel au redémarrage)
- Dry-run mode (exécution à blanc)
La mise à jour est classique :
xtian$ sudo gem update capistrano
Password:
Updating installed gems...
Bulk updating Gem source index for: http://gems.rubyforge.org
Attempting remote update of capistrano
Successfully installed capistrano-2.5.0
1 gem installed
Installing ri documentation for capistrano-2.5.0...
Installing RDoc documentation for capistrano-2.5.0...
Gems updated: capistrano
Vous connaissez probablement la plaisanterie sur la planification.
Les 90 premiers pour cents du travail prennent 90% du temps, les derniers 10% prennent 90% du temps.
Jff Atwood a écrit un article sur le sujet. Le cœur du problème tient en une phrase.
This software developer does not have a detailed list of all the things he needs to do. Which means, despite adamantly claiming that he is 99 percent done — he has no idea how long development will take! There’s simply no factual basis for any of his schedule claims.
Jeff conclut par une liste en 5 points pour prévenir le problème.
La première méthode qui vient à l’esprit pour disposer de la documentation de référence de Ruby on Rails quand on n’est pas connecté est d’aspirer le site web.
wget -r -w 1 http://api.rubyonrails.com
Mais ce n’est pas la peine si vous avez installé Rails avec gem : vous avez un serveur local à disposition. Lancez :
Puis pointez votre navigateur sur http://localhost:8808/. Ça marche, mais je trouve l’interface utilisateur pénible. (Quand je suis connecté, j’utilise gotAPI.) Il y a une alternative sur RailsBrain.com avec un ZIP à télécharger.
Pour une raison que je n’ai pas cherché à élucider, je n’ai pas réussi à décomprimer le fichier sous Vista. Je l’ai décomprimé sous Mac OS X puis copié sur mon portable…
Brian Di Croce a résumé le TDD en trois fiches dont voici la première.
