Test fixture pour le plugin acts_as_authenticated

É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

Ressources sur les Test fixtures

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.

Le carrefour du Zen et du test

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.

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 ?

Impossible navigation

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.

Un nouvelle manière de surfer : Ubiquity

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]

Capistrano 2.5 est sorti

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

Terminé à 90%

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 documentation de Ruby on Rails accessible offline

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 :

gem server

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…

TDD en trois fiches

Brian Di Croce a résumé le TDD en trois fiches dont voici la première.

Card #1. Uncle Bob’s Three Laws