prism

Un framework web en Ruby basado únicamente en la biblioteca estándar - sin gems externas. Router, capa de controladores, ORM basado en archivos con migraciones, layouts y partials.

prism
TL;DR

Un framework web en Ruby construido exclusivamente sobre la biblioteca estándar. Sin gemas externas: un router hecho a mano, una capa de controladores, un ORM sobre ficheros con migraciones, layouts y partials. Todo lo que normalmente obtienes de Rails, escrito desde cero para entender cómo funciona de verdad.

Introducción

Rails es estupendo, pero tras años usándolo solamente, es fácil olvidar cómo funciona por debajo. prism es un paso deliberado un nivel más abajo: no hay ni una sola gema externa, así que cada pieza tuvo que entenderse lo bastante bien como para escribirla uno mismo. El enrutamiento, el dispatch hacia un controlador, el renderizado de una vista, la capa de datos.

El resultado es un pequeño framework que sirve realmente una aplicación y, al mismo tiempo, un mapa de lo que la competencia hace tras el telón. No es una maqueta de framework sino un todo funcional en el que cada capa está al alcance de la mano, porque la escribiste con tus propias manos.

Un router que desenreda la ruta él mismo

El corazón de todo framework web es la decisión de qué código atiende una petición dada. En prism esa decisión es explícita: declaras rutas y el router asocia método y ruta a un par controlador más acción, extrayendo por el camino los parámetros de los segmentos de la dirección. Aquí no hay magia, hay una tabla de reglas leída de arriba abajo.

Cuando escribes el dispatch tú mismo, deja de ser una caja negra. Ves exactamente dónde una ruta se convierte en una llamada a método, y ese es justo el conocimiento que te falta cuando el framework lo hace por ti.

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

Las capas de datos y vista sin pegamento oculto

En lugar de conectar Postgres, prism guarda los datos en ficheros y añade encima migraciones más consultas simples. Eso basta para mostrar todo el ciclo: defines un modelo, ejecutas una migración, guardas un registro y lo vuelves a leer en un controlador. La base de datos sale del campo de visión, y lo que queda encima es la pura forma de cómo un ORM mapea los registros a objetos.

Limitarse a ficheros no es una carencia sino una decisión. Gracias a ella la capa de datos cabe entera en la cabeza y no esconde ningún paso tras un driver de base de datos que de todos modos no se ve.

Renderizar una vista parece trivial hasta que intentas ensamblarla a partir de capas. prism tiene layouts en los que se inyecta el contenido de la acción, y partials que componen las piezas repetidas. Exactamente el mismo mecanismo que en los grandes frameworks ocurre de forma invisible es aquí una función explícita que escribiste tú mismo.

➜
Consejo

Cuando todo está escrito a mano, depurar significa leer tu propio código, no adivinar qué hace el framework. Ese es el principal beneficio del ejercicio: la capa cuyo comportamiento tenías que inferir simplemente desaparece.

Un mapa de lo que Rails esconde tras el telón

La mayor ganancia de prism no es el framework en sí sino lo que queda en la cabeza después de escribirlo. Router, controladores y ORM juntos caben en unos cientos de líneas de Ruby legible, y cada una de esas líneas corresponde a alguna pieza que Rails hace tras el telón. Después de este ejercicio un gran framework deja de ser magia y se convierte en un conjunto de decisiones que entiendes.

De dónde normalmente, y de dónde en prism

ElementoNormalmente de serieEn prism
EnrutamientoRailsrouter hecho a mano desde cero
Capa de datosActiveRecordORM sobre ficheros con migraciones
VistasActionViewlayouts y partials a mano
Dependenciasdocenas de gemascero, solo la stdlib

Más proyectos

Más trabajos de la misma categoría - mira cómo abordamos retos parecidos.

¿Tiene un proyecto similar?

Escríbenos - el presupuesto es gratuito y llega en una hora.