# Ruby in Maguyva: codegrafen voor Rails- en Ruby-apps

Canonical source: https://maguyva.ai/nl/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 ondersteunt Ruby met AST, symbolen en graaf, zodat AI-agents klassen, modules, singletonmethoden en constructoraanroepen volgen in Rails en Ruby.

## Ondersteuningsoverzicht

- Tier: AST- en symboolondersteuning
- Programmeren
- Extensies: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Echte AST-parsing voor syntaxbewust zoeken en structurele context.
- Benoemde symbolen voeden semantische lookup en kruisverwijzingen. Graafnavigatie is beschikbaar wanneer relatie-extractie is ingeschakeld.
- Deze taal draagt symbolen en relaties bij aan graafbewust zoeken; ondersteunde kanttypen variëren met de eigen constructies van de taal.
- Zowel AST-parsing als symboolextractie zijn beschikbaar.

## Beste toepassing

- Rails-monolieten waarin models, service objects, jobs en concerns elkaar over veel mappen heen aanroepen.
- Gems en Ruby-services met diepe module-namespaces en gedeelde basisklassen.
- Teams die een wijziging met een AI-agent willen afbakenen voordat ze een model of service aanraken waar de halve app van afhangt.

## Agentworkflows

- Elke aanroeper van een service object of modelmethode vinden voordat het gedrag verandert.
- Nagaan waar een klasse met `.new` wordt geïnstantieerd en welke methoden daarna draaien.
- Vóór een refactoring in kaart brengen welke klassen van een basisklasse erven of een module includen.

## Waarom Ruby-repositories lastig zijn voor oppervlakkige AI-tools

Ruby leunt zwaar op conventies en metaprogrammering. Methoden worden gegenereerd door `attr_accessor`, klassen worden in andere bestanden heropend en namespaces nesten meerdere modules diep. Het leesbare oppervlak verbergt welke methode een aanroep echt bereikt, en botte tekstzoekopdrachten leveren elke `call` en `perform` in de app op.

Maguyva geeft een agent klassen, modules, methoden en hun aanroepers als structuur, zodat hij een wijziging door de app kan volgen in plaats van te gokken.

## Wat Maguyva in Ruby extraheert

Maguyva dekt `.rb`-, `.rbw`-, `.rake`- en `.gemspec`-bestanden, plus `Gemfile` en `Rakefile`. Instance-methoden en singletonmethoden (`def self.call`) worden geëxtraheerd, waarbij singletonmethoden als statisch worden gemarkeerd. Declaraties met `attr_reader`, `attr_writer` en `attr_accessor` tellen als accessormethoden, en symbolen worden gekwalificeerd met hun module- en klasse-namespace.

`ClassName.new` en `Namespace::ClassName.new` tellen als instantiëring, en receivertypering volgt lokale toewijzingen en `@instance_variables`, zodat een aanroep op een toegewezen object naar zijn klasse kan worden opgelost. De graaf legt ook overerving vast, module-inclusie, overrides, `raise`- en `rescue`-randen, en lees- en schrijfacties.

Metaprogrammeringsaanroepen (`define_method`, `send`, `method_missing`, `class_eval` en vergelijkbare), de `T::`-typehelpers van Sorbet en gangbare enumerable-aanroepen (`each`, `collect`, `reject` en vergelijkbare) worden uit de relaties gefilterd, zodat de applicatiecode opvalt.

## Voorbeeldprompts voor agents

- "Wie roept `Billing::ChargeCustomer.call` aan, en vanuit welke jobs en controllers?" (`find_symbol`, daarna `dependency_search` incoming)
- "Welke models erven van `ApplicationRecord` en includen `Auditable`?" (`dependency_search`)
- "Volg wat er gebeurt nadat een bestelling als betaald is gemarkeerd." (`get_task_context`)

## Bekende beperkingen

- `require` en `load` zijn in Ruby gewone methodeaanroepen, dus de preset `imports` in `structural_search` selecteert niets. Gebruik `text_pattern_search` om ze op te sommen.
- Methoden die tijdens runtime met `define_method` worden aangemaakt of door `method_missing` worden afgehandeld, worden niet als symbolen geëxtraheerd, en die aanroepen worden als metaprogrammeringsruis gefilterd.
- Ruby kent geen decoratorsyntaxis, dus decoratorrelaties zijn gemarkeerd als niet van toepassing.

## Volgende stappen

Koppel een repository via de [snelstart](/nl/docs/quickstart) en bekijk daarna de ondersteuningsmatrix op de [compatibiliteitspagina](/nl/docs/compatibility). Vergelijk voor andere repositories in dynamische talen met de [Python-gids](/nl/languages/python).

## Enginedetails

- Ruby-ondersteuning dekt `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` en `Rakefile`. Singletonmethoden worden als statisch gemarkeerd, en `attr_*`-declaraties tellen als accessormethoden.
- `ClassName.new` telt als instantiëring, en receivertypering volgt lokale toewijzingen en instance-variabelen.
- Metaprogrammeringsaanroepen zoals `define_method` en `send`, de `T::`-helpers van Sorbet en gangbare enumerable-aanroepen worden uit de relaties gefilterd.

## Nuttige MCP-instappunten

- `find_symbol`: Gebruik het voor een klasse, module of methode met namespace, zoals `Billing::ChargeCustomer.call`.
- `dependency_search`: Gebruik vóór een wijziging incoming-traversal op een model of service object om aanroepers en subklassen te zien.
- `text_pattern_search`: Gebruik het voor `require`-paden, routestrings en dynamisch gedefinieerde methoden die de graaf niet ziet.
