prism

Un framework web en Ruby reposant uniquement sur la bibliothèque standard - sans gems externes. Routeur, couche de contrôleurs, ORM sur fichiers avec migrations, layouts et partials.

prism
TL;DR

Un framework web en Ruby construit uniquement sur la bibliothèque standard. Aucune gem externe : un routeur fait main, une couche de contrôleurs, un ORM sur fichiers avec des migrations, des layouts et des partials. Tout ce que Rails vous donne d'habitude, écrit de zéro pour comprendre comment cela fonctionne vraiment.

Introduction

Rails est excellent, mais après des années à seulement l'utiliser, on oublie facilement comment il fonctionne en dessous. prism est un pas délibéré d'un niveau plus bas : il n'y a pas une seule gem externe, donc chaque pièce a dû être comprise assez bien pour l'écrire soi-même. Le routage, le dispatch vers un contrôleur, le rendu d'une vue, la couche de données.

Le résultat est un petit framework qui sert réellement une application, et en même temps une carte de ce que la concurrence fait derrière le rideau. Ce n'est pas une maquette de framework mais un tout fonctionnel où chaque couche est à portée de main, parce que vous l'avez écrite de vos propres mains.

Un routeur qui démêle le chemin lui-même

Le cœur de tout framework web est la décision de savoir quel code traite une requête donnée. Dans prism cette décision est explicite : vous déclarez des routes et le routeur associe la méthode et le chemin à une paire contrôleur plus action, en extrayant au passage les paramètres des segments de l'adresse. Il n'y a pas de magie ici, il y a une table de règles lue de haut en bas.

Quand vous écrivez le dispatch vous-même, il cesse d'être une boîte noire. Vous voyez exactement où un chemin se transforme en appel de méthode, et c'est précisément le savoir qui vous manque quand le framework le fait à votre place.

routes.rb · ruby
Prism::Router.draw do
  get "/posts", to: "posts#index"
  get "/posts/:id", to: "posts#show"
  post "/posts", to: "posts#create"
end

Les couches de données et de vue sans colle cachée

Plutôt que de brancher Postgres, prism garde les données dans des fichiers et y ajoute des migrations plus des requêtes simples. Cela suffit à montrer toute la boucle : vous définissez un modèle, lancez une migration, enregistrez un enregistrement et le relisez dans un contrôleur. La base de données sort du champ de vision, et ce qui reste au-dessus est la forme pure de la manière dont un ORM associe les enregistrements aux objets.

Se limiter aux fichiers n'est pas un manque mais une décision. Grâce à elle la couche de données tient dans la tête en entier et ne cache aucune étape derrière un pilote de base de données qu'on ne voit de toute façon pas.

Le rendu d'une vue paraît trivial jusqu'à ce que vous essayiez de l'assembler à partir de couches. prism a des layouts dans lesquels le contenu de l'action est injecté, et des partials qui composent les morceaux répétés. Exactement le même mécanisme qui se déroule invisiblement dans les grands frameworks est ici une fonction explicite que vous avez écrite vous-même.

➜
Conseil

Quand tout est écrit à la main, déboguer signifie lire son propre code, pas deviner ce que fait le framework. C'est le principal bénéfice de l'exercice : la couche dont vous deviez inférer le comportement disparaît tout simplement.

Une carte de ce que Rails cache derrière le rideau

Le plus grand gain de prism n'est pas le framework lui-même mais ce qui reste dans la tête après l'avoir écrit. Le routeur, les contrôleurs et l'ORM tiennent ensemble en quelques centaines de lignes de Ruby lisible, et chacune de ces lignes correspond à un morceau que Rails fait derrière le rideau. Après cet exercice un grand framework cesse d'être magique et devient un ensemble de décisions que vous comprenez.

D'où d'habitude, et d'où dans prism

ÉlémentD'habitude tout faitDans prism
RoutageRailsrouteur fait main de zéro
Couche de donnéesActiveRecordORM sur fichiers avec migrations
VuesActionViewlayouts et partials à la main
Dépendancesdes dizaines de gemszéro, juste la stdlib

Plus de projets

D'autres réalisations de la même catégorie - découvrez comment nous abordons des défis similaires.

Vous avez un projet similaire ?

Contactez-nous - le devis est gratuit et arrive sous une heure.