Articles
Une liste d’articles sur le développement Web, Ruby on Rails, et plus.
Les Form Objects, l'abstraction manquante dans Rails
Cessez de mettre le bon code au mauvais endroit !
Il est facile de s’emballer en utilisant le scaffolding de Rails, mais dans certains cas un simple objet Ruby (un PORO) suffit amplement. Et les Form Objects sont particulièrement efficaces pour alléger les modèles et les contrôleurs, tout en regroupant des fonctionnalités qui vont ensemble dans des objets faciles à tester.
Tester améliore le design du code
Jeudi dernier, j’ai assisté à l’atelier en ligne « Good Enough Testing » (juste ce qu’il faut de tests), animé par Lucian Ghinda, qui rédige l’infolettre Short Ruby. Je suis content d’avoir vu l’inscription peu après sa publication, car l’atelier s’est rempli en moins d’une journée !
J’ai pris le temps de combiner les connaissances acquises lors de l’atelier avec ce que j’ai appris au fil des années, dans des blogs et des livres.
Les contextes de validation dans Rails
Les validateurs Rails sont expressifs et puissants, tout en étant faciles à utiliser et à étendre.
Une fonctionnalité intéressante est que les validateurs peuvent s’exécuter uniquement lorsqu’une condition est remplie (en utilisant if:
et unless:
), ou dans des contextes sélectionnés, en utilisant on:
.
Mais saviez-vous que vous pouvez également définir des contextes personnalisés ? Voici comment le faire, et pourquoi cela pourrait être utile.
Utiliser Bundler dans un script ruby sans rien afficher dans le terminal
Il est possible d’utiliser Bundler pour installer des gemmes dans un script ruby, et c’est super pratique ! Voici comment empêcher Bundler d’afficher quoi que ce soit pendant l’installation des gemmes, et une solution pour un problème qui peut se produire quand on utilise cette option.
Trucs et astuces Rspec
Tester une application est indispensable mais les tests sont souvent lents, ce qui fait perdre le fil et rend la correction des bugs plus longue et complexe. Voici quelques astuces pour ne faire tourner que les tests utiles et arrêter de perdre du temps à regarder des lignes de points verts défiler à l’écran…
Exécuter des commandes en utilisant une version Ruby différente à l'aide de rbenv
Lors de la création d’un script pour tester les mises à niveau de la version Ruby dans un système utilisant rbenv
, j’ai remarqué qu’exécuter bundle install
à partir d’un script Ruby utilise la version du script au lieu de celle définie dans le répertoire.
Renvoyer une image par défaut avec ActiveStorage stocké sur disque
Pour une application utilisant le stockage DiskService
d’ActiveStorage
, j’ai eu besoin de copier des données de la base de production dans ma base de développement.
Je ne voulais pas récupérer les fichiers stockés, j’ai donc fait en sorte d’afficher une image ActiveStorage
par défaut au lieu d’une erreur 404.
Configurer Fontawesome dans un site web basé sur Bridgetown
La documentation Bridgetown est claire et lisible mais elle n’indique pas toutes les étapes nécessaires pour intégrer FontAwesome, voici donc comment j’ai procédé lorsque je suis passé sur ce générateur de site statique.
Un concern réutilisable pour filtrer les modèles dans Ruby on Rails
Je voulais implémenter un système de filtrage générique pour des modèles dans Ruby on Rails, en procédant un peu différemment de ce que Justin Weiss et Fabio Pitino proposent.
Stocker et accéder à des paramètres JSONB dans PostgreSQL et Rails
PostgreSQL 9.4 et supérieures permettent de stocker des données JSON nativement, et Rails simplifie l’utilisation de ce format.
Générer des URLs sémantiques avec Rails 6, FriendlyId et CanCanCan
Pour une application utilisant Ruby on Rails 6, je devais générer des URLs sémantiques basées pour un modèle. Je voulais également que l’URL soit mise à jour en cas de modification, et rediriger l’ancienne version de l’URL si besoin. Contrainte supplémentaire, ce projet utilise la gemme CanCanCan pour la gestion des droits.
Voici le code que j’ai mis en place pour générer et mettre à jour des URLs sémantiques compatibles avec le chargement automatique de CanCanCan.