Saltar al contenido
Logotipo de Trainontech Trainontech

Lenguajes y Fundamentos de Programación · LNG-211

Ruby avanzado: metaprogramación y DSL

Reflexión, method_missing y DSL internas para escribir Ruby que escribe Ruby.

Próximamente Avanzado 7 módulos · 34 clases

Formato asíncrono Desarrollo Ruby

Lo que aprenderás

  • Inspeccionar objetos en tiempo de ejecución con methods, instance_variables y ObjectSpace
  • Definir métodos dinámicamente con define_method y attr_accessor generados a medida
  • Interceptar llamadas inexistentes combinando method_missing y respond_to_missing? sin romper la introspección
  • Abrir clases y módulos con refinements para evitar el parcheo global de monkey patching
  • Construir una DSL interna con instance_eval, bloques y receptores implícitos
  • Enganchar el ciclo de vida de las clases mediante included, inherited y method_added
  • Medir el coste de la metaprogramación y decidir cuándo no usarla

Contenido del curso

7 módulos · 34 clases en vídeo · práctica guiada en cada módulo

Módulo 1 · El modelo de objetos de Ruby 5 clases
  • Presentación del curso y entorno con Ruby 3 y Bundler
  • Todo es un objeto: clases, instancias y self
  • La cadena de búsqueda de métodos paso a paso
  • Singleton classes y métodos de clase
  • Ancestors, prepend e include vistos en la consola
Módulo 2 · Introspección y reflexión 5 clases
  • Preguntar a un objeto con methods, instance_variables y send
  • Consultar la jerarquía con ancestors y instance_method
  • Recorrer el proceso con ObjectSpace
  • Acceso a lo privado: cuándo send es legítimo
  • Ejercicio: un inspector de objetos por consola
Módulo 3 · Definición dinámica de métodos 5 clases
  • define_method y clausuras que capturan estado
  • Generar accesores a medida para un mapeo de datos
  • method_missing y su pareja respond_to_missing?
  • Delegación con Forwardable y con proxies propios
  • Ejercicio: un envoltorio dinámico de API REST
Módulo 4 · Ganchos del ciclo de vida 5 clases
  • included, extended y prepended en módulos
  • inherited para registrar subclases automáticamente
  • method_added y auditoría de definiciones
  • Un sistema de plugins con registro automático
  • Errores típicos al usar hooks y cómo depurarlos
Módulo 5 · Ámbitos de evaluación 5 clases
  • instance_eval frente a class_eval
  • Bloques, binding y el objeto receptor
  • Refinements como alternativa al monkey patching
  • eval con cadenas: riesgos y casos justificados
  • Comparativa de rendimiento entre enfoques
Módulo 6 · Diseño de DSL internas 4 clases
  • Anatomía de una DSL: verbos, contexto y estado
  • Construir el receptor implícito de una DSL de configuración
  • Mensajes de error legibles cuando la DSL se usa mal
  • Documentar una DSL para quien no la escribió
Módulo 7 · Proyecto de cierre 5 clases
  • Especificación de una gema de validaciones declarativas
  • Implementar el DSL de reglas con define_method
  • Pruebas con RSpec y casos límite
  • Empaquetar la gema y publicar la documentación
  • Revisión final: cuándo habría bastado con código normal

Requisitos

  • Ruby a nivel sólido: clases, módulos, bloques, procs y lambdas
  • Haber escrito alguna gema o aplicación Ruby de cierto tamaño
  • Entorno local con Ruby 3.x y Bundler instalados

Descripción

En un proyecto Ruby maduro llega el momento en que el código repite estructuras casi idénticas: validaciones, mapeos de campos, envoltorios de API. Copiar y pegar se vuelve insostenible, y la respuesta que da el propio lenguaje es la metaprogramación. El problema es que se usa a ciegas, copiando trucos vistos en Rails sin entender el modelo de objetos que hay debajo.

El curso reconstruye ese modelo desde la cadena de búsqueda de métodos y las singleton classes, y a partir de ahí introduce cada técnica resolviendo un caso concreto. Se programa un mapeador de atributos generado en tiempo de ejecución, un registro de plugins basado en hooks de herencia y una DSL de configuración con bloques. Cada pieza se acompaña de sus pruebas y de la discusión sobre legibilidad.

Al terminar se puede leer el código de gemas como ActiveRecord o RSpec sin que parezca magia, y decidir con criterio dónde una DSL interna simplifica de verdad la vida del equipo. Es la base natural para especializarse en desarrollo de gemas, en extensiones de Rails o en herramientas internas de automatización.

¿Para quién es este curso?

  • Desarrolladores Ruby con años de Rails que quieren entender qué ocurre bajo los helpers del marco
  • Autores de gemas internas que necesitan ofrecer una API declarativa a otros equipos
  • Personas que mantienen código heredado lleno de metaprogramación y deben depurarlo con seguridad
Próximamente

Curso en hoja de ruta. Se prioriza según la demanda recogida y los proyectos en cartera.

Código
LNG-211
Nivel
Avanzado
Público
Desarrollo
Entorno
Ruby

Este curso incluye

  • 34 clases en vídeo bajo demanda
  • Práctica en entornos web y simuladores, sin instalar nada
  • Tutorización en el campus
  • Acceso desde móvil, tableta y ordenador
  • Actualizaciones cuando cambia la versión de la herramienta
  • Certificado de finalización

Sigue aprendiendo

Cursos relacionados

PY-106Lenguajes y Fundamentos de Programación

Concurrencia: multihilo y multiproceso

Paralelizar adquisición de datos y tareas de E/S sin introducir errores difíciles de reproducir.

Python

Avanzado 33 clases

PY-107Lenguajes y Fundamentos de Programación

Testing y TDD en Python

Pruebas unitarias, fixtures y desarrollo dirigido por pruebas en proyectos técnicos reales.

Python

Avanzado 34 clases

PY-131Lenguajes y Fundamentos de Programación

Webscraping con agentes de IA en local

Agentes que navegan y extraen datos sin depender de servicios en la nube.

PythonOllama

Avanzado 34 clases