# Ruby en Maguyva: grafos de código para Rails y apps Ruby

Canonical source: https://maguyva.ai/es/languages/ruby

License: text under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/); code samples under [MIT-0](https://opensource.org/license/mit-0); the Maguyva name, logos, brand assets and other code are not covered. Details: [maguyva.ai/license](https://maguyva.ai/license).

Maguyva admite Ruby con AST, símbolos y grafo, para que los agentes de IA sigan clases, módulos, métodos singleton y constructores en bases de código Rails y Ruby.

## Resumen de soporte

- Nivel: Soporte de AST y símbolos
- Programación
- Extensiones: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Análisis AST real para búsqueda con reconocimiento de sintaxis y contexto estructural.
- Los símbolos con nombre alimentan la búsqueda semántica y las referencias cruzadas. La navegación por grafo está disponible cuando la extracción de relaciones está habilitada.
- Este lenguaje aporta símbolos y relaciones a la búsqueda basada en grafos; los tipos de arista disponibles varían según sus construcciones nativas.
- Están disponibles tanto el análisis AST como la extracción de símbolos.

## Mejor uso

- Monolitos Rails donde modelos, service objects, jobs y concerns se llaman entre muchos directorios.
- Gems y servicios Ruby con espacios de nombres de módulos profundos y clases base compartidas.
- Equipos que quieren acotar un cambio con un agente de IA antes de tocar un modelo o servicio del que depende media aplicación.

## Flujos de trabajo del agente

- Encontrar todos los llamadores de un service object o de un método de modelo antes de cambiar su comportamiento.
- Rastrear dónde se instancia una clase con `.new` y qué métodos se ejecutan después.
- Mapear qué clases heredan de una clase base o incluyen un módulo antes de una refactorización.

## Por qué los repositorios Ruby complican a las herramientas de IA superficiales

Ruby se apoya en convenciones y metaprogramación. Los métodos se generan con `attr_accessor`, las clases se reabren en otros archivos y los espacios de nombres anidan varios módulos. La superficie legible oculta a qué método llega realmente una llamada, y una búsqueda de texto tosca devuelve cada `call` y cada `perform` de la aplicación.

Maguyva entrega al agente clases, módulos, métodos y sus llamadores como estructura, para que siga un cambio por toda la aplicación en lugar de adivinar.

## Qué extrae Maguyva en Ruby

Maguyva cubre archivos `.rb`, `.rbw`, `.rake` y `.gemspec`, además de `Gemfile` y `Rakefile`. Se extraen métodos de instancia y métodos singleton (`def self.call`), y los métodos singleton se marcan como estáticos. Las declaraciones `attr_reader`, `attr_writer` y `attr_accessor` cuentan como métodos de acceso, y los símbolos se califican con su espacio de nombres de módulo y clase.

`ClassName.new` y `Namespace::ClassName.new` cuentan como instanciación, y la tipificación de receptores sigue las asignaciones locales y las `@instance_variables`, de modo que una llamada sobre un objeto asignado puede resolverse a su clase. El grafo también registra herencia, inclusión de módulos, sobrescrituras, aristas de `raise` y `rescue`, y lecturas y escrituras.

Las llamadas de metaprogramación (`define_method`, `send`, `method_missing`, `class_eval` y similares), los helpers de tipos `T::` de Sorbet y las llamadas enumerables comunes (`each`, `collect`, `reject` y similares) se filtran de las relaciones para que destaque el código de la aplicación.

## Ejemplos de prompts para agentes

- "¿Quién llama a `Billing::ChargeCustomer.call` y desde qué jobs y controladores?" (`find_symbol` y luego `dependency_search` incoming)
- "¿Qué modelos heredan de `ApplicationRecord` e incluyen `Auditable`?" (`dependency_search`)
- "Rastrea qué ocurre después de que un pedido se marca como pagado." (`get_task_context`)

## Limitaciones conocidas

- En Ruby, `require` y `load` son llamadas a métodos comunes, así que el preset `imports` de `structural_search` no selecciona nada. Usa `text_pattern_search` para listarlas.
- Los métodos creados en tiempo de ejecución con `define_method` o atendidos por `method_missing` no se extraen como símbolos, y esas llamadas se filtran como ruido de metaprogramación.
- Ruby no tiene sintaxis de decoradores, así que las relaciones de decorador están marcadas como no aplicables.

## Próximos pasos

Conecta un repositorio con el [inicio rápido](/es/docs/quickstart) y luego revisa la matriz de compatibilidad en la [página de compatibilidad](/es/docs/compatibility). Para otros repositorios en lenguajes dinámicos, compáralo con la [guía de Python](/es/languages/python).

## Detalles del motor

- La compatibilidad con Ruby cubre `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` y `Rakefile`. Los métodos singleton se marcan como estáticos y las declaraciones `attr_*` cuentan como métodos de acceso.
- `ClassName.new` cuenta como instanciación, y la tipificación de receptores sigue las asignaciones locales y las variables de instancia.
- Las llamadas de metaprogramación como `define_method` y `send`, los helpers `T::` de Sorbet y las llamadas enumerables comunes se filtran de las relaciones.

## Puntos de entrada MCP útiles

- `find_symbol`: Úsalo con una clase, módulo o método con espacio de nombres, como `Billing::ChargeCustomer.call`.
- `dependency_search`: Usa el recorrido incoming sobre un modelo o service object para ver llamadores y subclases antes de un cambio.
- `text_pattern_search`: Úsalo para rutas de `require`, cadenas de rutas y métodos definidos dinámicamente que el grafo no puede ver.
