URL:
https://linuxfr.org/news/sortie-de-ruby-on-rails-7-0
Title: Sortie de Ruby on Rails 7.0
Authors: Thomas J.
Benoît Sibaud et palm123
Date: 2021-12-23T12:07:31+01:00
License: CC By-SA
Tags: ruby_on_rails, rails, ruby, framework et cadriciel
Score: 7
La version 7.0 du cadriciel Ruby on Rails a fait son apparition le 15 décembre 2021.
Pour rappel, Rails est un framework web complet développé en Ruby qui encourage la lisibilité du code, tout en privilégiant les conventions à la configuration.
Il fait la part belle à l'architecture [Modèle-Vue-Contrôleur (MVC)](
https://fr.wikipedia.org/wiki/Mod%C3%A8le-vue-contr%C3%B4leur) et s’appuie sur un certain nombre de sous-ensembles :
- **Active Model** qui permet de créer des objets Ruby suivant un [mapping objet-relationnel (ORM)](
https://fr.wikipedia.org/wiki/Mapping_objet-relationnel)
- **Action View** qui est responsable de la génération des pages HTML
- **Action Controller** qui gère le cycle de vie des requêtes de l'application (cela inclut les sessions, les filtres, les cookies, le streaming de données et le traitement des exceptions)
- **Action Pack** qui traite les requêtes web tout en fournissant la couche de contrôle MVC
- **Active Record** qui permet aux modèles d'interagir avec la base de données de l'application
- **Action Cable** qui permet d'écrire des fonctionnalités temps réel grâce au protocole WebSocket
- **Action Mailbox** qui permet de recevoir des mails dans une application
- **Action Mailer** qui permet d'envoyer des mails depuis une application
- **Action Text** qui fournit tout qu'il faut pour gérer du contenu incluant du texte enrichi
- **Active Job** qui permet d'exécuter des travaux en arrière-plan selon différentes approches de mise en file d'attente
- **Active Storage** qui facilite le téléversement de fichiers vers un service de stockage dans les nuages, la transformation et l'extraction de métadonnées
- **Active Support** qui fournit un certain nombre d'extensions au langage Ruby
Vous avez forcement croisé un site utilisant ce cadriciel : GitHub, Twitch, Airbnb, Kickstarter ou encore LinuxFr.org !
----
[Site web](
https://rubyonrails.org/)
[Guide](
https://guides.rubyonrails.org/)
[Construire et déployer un blog en 34 minutes](
https://d1snj8sshb5u7m.cloudfront.net/Rails7.mp4)
[Code source de ce blog](
https://github.com/tjustino/rails7_demo)
----
Une toute nouvelle approche du JavaScript
=========================================
Allant à l'encontre de la mode des [applications web monopage](
https://fr.wikipedia.org/wiki/Application_web_monopage) et du _tout [Node.js](
https://fr.wikipedia.org/wiki/Node.js)_, cette version de Rails offre plusieurs possibilités :
- construire des applications dynamiques en minimisant l'utilisation du JavaScript et en favorisant le HTML au lieu du JSON. Cette approche est possible grâce à la nouvelle bibliothèque [Hotwire](
https://hotwired.dev/)
- l'import de modules JavaScript au travers des fichiers versionnés, directement à partir du navigateur grâce à [Import maps](
https://github.com/WICG/import-maps)
- il est maintenant possible d'utiliser n'importe quel bundler JavaScript, comme [esbuild](
https://esbuild.github.io/), [rollup.js](
https://www.rollupjs.org) ou le plus classique [Webpack](
https://webpack.js.org/), grâce à la nouvelle gem [jsbundling-rails](
https://github.com/rails/jsbundling-rails)
- suivant la même approche pour le CSS, la gem [cssbundling-rails](
https://github.com/rails/cssbundling-rails) permet dorénavant de compiler facilement sa feuille de style en intégrant [Tailwind CSS](
https://tailwindcss.com/), [Sass](
https://sass-lang.com/dart-sass) ou encore [PostCSS](
https://postcss.org/)
Attributs chiffrés avec Active Record
=====================================
Il est maintenant possible de déclarer des attributs pour chiffrer certaines données au niveau du modèle :
```ruby
# app/models/article.rb
class Article < ApplicationRecord
encrypts :title
end
# Article.create! title: "Sortie de Ruby on Rails 7.0"
# INSERT INTO `articles` (`title`) VALUES ('{\"p\":\"n7J0/ol+a7DeaE[...]1/YjMHbHD4talgF9dt61A==\"}}')
```
Le chiffrement se fait de manière transparente avant l'enregistrement en base de données.
Chargement asynchrone des requêtes
==================================
Lorsqu'une action du contrôleur doit exécuter plusieurs requêtes, il est maintenant possible de le faire simultanément grâce à _Relation#load_async_.
Jusqu'à présent, exécuter trois requêtes durant 100 ms chacune nécessitait 300 ms. Maintenant, il est possible de le faire en parallèle.
Zeitwerk par défaut
===================
Le chargement automatique dans Rails a toujours été synonyme d'élégance.
L'ancienne approche, qui s'accompagnait d'une série de bizarreries et de fonctionnalités manquantes, a finalement été remplacée exclusivement par le [chargeur de code Zeitwerk](
https://github.com/fxn/zeitwerk#introduction).
Et la dette technique de LinuxFr.org dans tout ça ?
===============================================
On ne va pas se mentir : les montées de version majeure de Rails ne sont pas facile à appliquer si l'on souhaite utiliser les dernières fonctionnalités.
Au moment où j'écris, [la version propulsant ces quelques lignes](
https://github.com/linuxfrorg/linuxfr.org/blob/377636a1369226b77aec48bfea81179223f6dd77/Gemfile#L8) recevra des [correctifs de sécurité majeurs jusqu'au 1er juin 2022](
https://guides.rubyonrails.org/maintenance_policy.html#severe-security-issues).
Vous l'aurez compris : il nous reste encore 6 mois pour procrastiner tranquillement !