Bon, ce n’est pas vraiment un opérateur, mais l’idiome est assez répandu et peut surprendre. Il est utilisé pour convertir nil en false, ce qui peut éviter des tests spécifiques comme if variable.nil?
Deux petits rappels :
- ! est l’opérateur de négation logique.
- Seuls false et nil ont la valeur booléenne FAUX. Tout le reste est vrai (y compris 0, la chaîne de caractère vide, etc.
Nous en déduisons la table de vérité suivante :
| variable |
!variable |
!!variable |
| * |
false |
true |
| false |
true |
false |
| nil |
true |
false |
* = n’importe quoi sauf nil ou false, donc de valeur booléenne true.
CQFD.
RSpec offre deux fonctions pour tester les routes. La première vérifie la génération de l’URL, étant donnés les contrôleurs, actions, etc. :
route_for(:controller => 'sessions', :action => 'new').should == "/login"
La seconde fait la vérification inverse ; la requête active-t-elle les bons paramètres ?
params_from(:get, '/login').should == {:controller => 'sessions', :action => 'new'}
Il n’y a pas de fonction spécifique pour tester les routes nommées (par exemple login_path). Ça ne présente pas de difficulté particulière, mais il y a une astuce : les routes nommées ne sont chargées qu’après le première requête. Un exemple :
describe "named routing" do
before(:each) do
# If you haven't already made a get/post request through the rails integration
# session infrastructure the named routes don't get loaded
get :new
end
it "should route login_path() correctly" do
login_path.should == "/login"
end
end
La version 1.3 de Ruby Gems est sortie. Ne vous précipitez pas :
- Un bug signalé sur Windows
- Un problème potentiel de mise à jour : RubyGems 1.1 and 1.2 have problems upgrading… En gros, la commande ordinaire
gem update --system ne marche pas.
L’annonce originale est ici.
Il est toujours possible de télécharger la version 1.3 et de l’installer manuellement.
21 septembre 2008 – 19:58
Installation de RSpec
./script/plugin install git://github.com/dchelimsky/rspec.git -r 1.1.4
./script/plugin install git://github.com/dchelimsky/rspec-rails.git -r 1.1.4
./script/generate rspec
Installation d’Autotest
Création d’un modèle avec son script de test RSpec
./script/generate rspec_model <nom_du_modèle>
Lancement d’Autotest
autotest # dans le répertoire de l'application
Autotest va exécuter le script spec/models/<nom_du_modèle>_spec.rb automatiquement une première fois, puis chaque fois que vous sauvez ce fichier après y avoir ajouté un test.
Pour des explications détaillées, voir l’article de Philippe Hanrigou, Getting started with Autotest – Continuous Testing [en anglais]. Vous pouvez aussi voir comment ça se passe dans cette courte vidéo.
20 septembre 2008 – 16:07
SQLite Manager est un client graphique pour SQLite. SQLite Manager est disponible comme extension Firefox (et autre Thunderbird, Seamonky, etc.) et tourne aussi sur XULRunner. L’installer sur XULRunner permet de le lancer de manière indépendante de Firefox.
Installation sur Mac OS X
- Télécharger XULRunner : xulrunner-1.9.en-US.mac-pkg.dmg
- Installer XULRunner
- Télécharger SQLite Manager pour XULRunner : SQLiteManager_XR_0.3.10.zip
- Installer SQLite Manager en ligne de commande (lancer Terminal)
/Library/Frameworks/XUL.framework/xulrunner-bin --install-app Downloads/SQLiteManager_XR_0.3.10.zip
Lancement de SQLite Manager
L’application est disponible dans Applications/Mrinal Kant/SQLite Manager.app.
15 septembre 2008 – 20:47
Il est fréquent que les applications aient besoin, pour fonctionner, de données initiales dans la base de données. Il y a plusieurs avis dans la communauté sur le moyen de charger ces données.
Aucune méthode préférentielle ne se dégage. En particulier, les méthodes proposant de créer les données de test avec le code de l’application sont inapplicables pour une importation sérieuse, tant par leur lourdeur que par la difficulté de maintenir les données de test au fur de l’évolution du code. J’ai choisi trois articles qui couvrent bien le sujet.
Luke Francl a écrit un article qui balaye les diverses possibilités Loading seed data.
Michael Bleigh propose, dans son article Seed Fu: Simple Seed Data for Rails, de créer les données grâce à des scripts Ruby placés dans le répertoire db/fixtures.
Enfin, Jeffrey Allan Hardy décrit dans Seed Data in Rails la méthode simple et aisée à mettre en œuvre que j’ai retenue. Il s’agit d’utiliser le puissant mécanisme des fixtures dans une tâche rake.
Les données sont saisies dans des fichiers YAML placés dans le nouveau répertoire db/fixtures. Une tâche rake est ajouté en créant le fichier db_seed.rake dans le répertoire lib/tasks.
namespace :db do
desc "Load seed fixtures (from db/fixtures) into the current environment's database."
task :seed => :environment do
require 'active_record/fixtures'
Dir.glob(RAILS_ROOT + '/db/fixtures/*.yml').each do |file|
Fixtures.create_fixtures('db/fixtures', File.basename(file, '.*'))
end
end
end
Et voilà ! Les données sont chargées avec la commande rake db:seed.
14 septembre 2008 – 23:45
Je suis en train de traduire les fichiers de régionalisation (l10n, de l’anglais localization) de l’application de démonstration de Clemens Kofler.
L’internationalisation de Rails sera intégrée dans la version 2.2 qui est prévue pour la fin de l’année
La version 2.1 (à ne pas confondre avec la 2.0.1) du logiciel de l’iPhone est sortie. Cette fois-ci, Apple ne se contente pas du cryptique corrections de bogues, mais donne des détails. Certaines corrections ou évolutions étaient attendues impatiemment, dont :
- Diminution des échecs d’émission d’appels et des coupures lors des communication (enfin !) ;
- Augmentation de l’autonomie de la batterie ;
- Augmentation considérable de la rapidité de sauvegarde ;
- Meilleures performances des SMS ;
Plus quelques autres bricoles que vous pourrez lire en installant cette nouvelle version 2.1 avec votre nouvelle version 8.0 d’iTunes : tout est neuf chez Apple.
12 septembre 2008 – 12:02
Jack Dempsey a créé une commande Ubiquity pour accéder directement à l’API Ruby sur APIdock. Vous pouvez l’installer en collant le code dans l’éditeur de commandes Ubiquity. ou en vous abonnant (le bouton apparaît en haut à droite du bandeau).
L’utilisation est simple : invoquer Ubiquity (alt-espace sur mon Mac), taper ruby <nom-de-fonction> puis <Enter> et la page s’ouvre dans un nouvel onglet.
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