
Brut se veut un framework web simple mais complet pour Ruby. Il est différent des autres frameworks web pour Ruby. Brut n'a pas de contrôleurs, de verbes ou de ressources. Vous construisez des pages, des formulaires et des gestionnaires d'action unique. Vous écrivez du HTML, qui est généré sur le serveur. Vous pouvez écrire tout le JavaScript et le CSS que vous voulez.
Voici une page web qui vous indique l'heure qu'il est :
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 12 13 | class TimePage < AppPage def initialize(clock:) @clock = clock end def page_template header do h1 { "Welcome to the Time Page!" } TimeTag(timestamp: @clock.now) end end end |
Brut est construit autour d'une faible abstraction et d'une faible cérémonie, mais il n'est pas de bas niveau comme Sinatra. C'est un framework web. Vos applications Brut disposent d'une instrumentation intégrée basée sur OpenTelemetry, d'une couche d'accès aux données alimentée par Sequel et d'une automatisation des développeurs basée sur des applications en ligne de commande alimentées par OptionParser.
Brut peut être installé dès maintenant, et vous pouvez créer et exécuter une application en quelques minutes. Vous n'avez même pas besoin d'installer Ruby.
Code : | Sélectionner tout |
1 2 3 4 5 6 7 8 9 10 11 | > docker run \ -v "$PWD":"$PWD" \ -w "$PWD" \ -it \ thirdtank/mkbrut \ mkbrut my-new-app > cd my-new-app > dx/build && dx/start > dx/exec bin/setup > dx/exec bin/dev # => localhost:6502 is waiting |
Il y a un exemple complet d'application appelée ADRs.cloud que vous pouvez exécuter dès maintenant pour voir comment elle fonctionne.
Ce que vous obtenez
Brut dispose d'une documentation complète, dont voici quelques points forts :
La conception de base de Brut s'articule autour de classes qui sont instanciées en objets, sur lesquels des méthodes sont appelées.
- Il n'y a pas d'appels excessifs pour créer une masse de fonctions.
- Pas de hachage de quoi que ce soit. Vos paramètres de session, de flash et de formulaire sont tous des classes réelles et des types de données définis.
- Utilisation minimale de méthodes définies dynamiquement ou de method_missing. Presque toutes les méthodes sont documentées.
Brut tire parti de la plate-forme Web moderne.
- La validation des formulaires côté client et côté serveur est unifiée en une seule expérience utilisateur.
- BrutJS est une bibliothèque en constante évolution d'éléments personnalisés autonomes AKA web components pour améliorer progressivement votre HTML.
- Avec esbuild, vous pouvez écrire du CSS normal et l'avoir instantanément empaqueté, minifié et haché. Pas de PostCSS, pas de SASS.
Brut met en place de bonnes pratiques par défaut.
- Votre application aura une politique de sécurité du contenu raisonnable.
- Les colonnes de votre base de données ne sont pas nulles par défaut.
- Vos clés étrangères vont a) exister, b) être indexées, et c) ne pas être null par défaut.
- L'heure, disponible à travers l'horloge de Brut, est toujours sensible au fuseau horaire.
- La localisation existe et est aussi simple que possible. Nous espérons la rendre plus facile.
Brut utilise d'excellentes gemmes Ruby
- RSpec est la façon dont vous écrivez vos tests. Brut inclut des matchers personnalisés pour faciliter la concentration sur ce que votre code doit faire.
- Faker et FactoryBot mettront en place vos données de test et de développement
- Phlex génère votre HTML. Non, Brut ne supportera pas HAML.
Brut ne recrée pas la configuration avec YAML.
- I18n utilise la gem i18n, avec des traductions dans un Hash Ruby. Pas de YAML.
- La configuration dynamique est dans l'environnement, gérée en dev et test par la gem dotenv. Pas de YAML.
- OK, le fichier docker-compose.dx.yml de l'environnement dev est du YAML. Mais c'est tout.
- YAML, même pas une fois.
Brut ne crée pas d'abstractions là où il n'y en a pas besoin.
- Est-ce l'action index de la ressource widgets ou l'action show de la ressource widget-list ? est une question que vous n'aurez jamais à vous poser ou à poser à votre équipe. La page des widgets s'appelle WidgetsPage et est disponible à l'adresse /widgets.
- Ma classe Widgets accède à la table WIDGETS, mais elle possède également toute la logique de domaine d'un widget ! Non, ce n'est pas le cas. DB::Widget récupère vos données. Vous pouvez faire faire à Widget ce que vous voulez. Faites un WidgetService, c'est tout ce que vous voulez !
- Et si notre HTML avait des contrôleurs mais qu'ils n'étaient pas les mêmes que ceux de notre back-end ? Il n'y a pas de contrôleurs. Vous n'en voulez pas, vous n'avez pas à en créer.
- Qu'en est-il des monades, des types de données algébriques, du curry ou peut-être du fait que tout soit un Proc parce que call ? Vous n'avez pas besoin de comprendre quoi que ce soit à cette question. Mais si vous voulez que votre logique d'entreprise utilise des foncteurs, allez-y.
David Bryant Copeland, créateur de Brut RB, commente :
Pourqoui ?
Je sais, nous pouvons supprimer tous les éléments de base requis pour les applications Rails. Mais à quel point est-ce amusant ? A quel point aimez-vous configurer RSpec, encore une fois, dans votre nouvelle application Rails ? Êtes-vous fatigué de changer de « solution front end » toutes les quelques années ? Et n'êtes-vous pas tout simplement fatigué de débattre de l'emplacement de votre logique commerciale ou de savoir s'il est acceptable d'utiliser HTTP DELETE (via un paramètre _method dans un POST) pour archiver un widget ?
Je sais que c'est mon cas.
Je veux m'amuser à construire des applications web, ce qui signifie que je veux écrire du Ruby, utiliser du HTML et exploiter le navigateur. Savez-vous à quel point les navigateurs sont géniaux aujourd'hui ? De plus, Ruby 3.4 est assez génial. J'aimerais l'utiliser.
Ce que je ne veux pas, c'est une flexibilité infinie, des décisions architecturales constantes, ou des débats inutiles sur des choses qui n'ont pas d'importance.
Je veux juste m'amuser à construire des applications web.
Prochaines étapes
Je vais continuer à travailler sur la version 1.0 de Brut, en construisant des applications web et en appréciant le processus. J'espère qu'il en sera de même pour vous !
Je sais, nous pouvons supprimer tous les éléments de base requis pour les applications Rails. Mais à quel point est-ce amusant ? A quel point aimez-vous configurer RSpec, encore une fois, dans votre nouvelle application Rails ? Êtes-vous fatigué de changer de « solution front end » toutes les quelques années ? Et n'êtes-vous pas tout simplement fatigué de débattre de l'emplacement de votre logique commerciale ou de savoir s'il est acceptable d'utiliser HTTP DELETE (via un paramètre _method dans un POST) pour archiver un widget ?
Je sais que c'est mon cas.
Je veux m'amuser à construire des applications web, ce qui signifie que je veux écrire du Ruby, utiliser du HTML et exploiter le navigateur. Savez-vous à quel point les navigateurs sont géniaux aujourd'hui ? De plus, Ruby 3.4 est assez génial. J'aimerais l'utiliser.
Ce que je ne veux pas, c'est une flexibilité infinie, des décisions architecturales constantes, ou des débats inutiles sur des choses qui n'ont pas d'importance.
Je veux juste m'amuser à construire des applications web.
Prochaines étapes
Je vais continuer à travailler sur la version 1.0 de Brut, en construisant des applications web et en appréciant le processus. J'espère qu'il en sera de même pour vous !
Et vous ?


Voir aussi :


Vous avez lu gratuitement 65 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.