# Ruby i Maguyva: kodgrafer för Rails- och Ruby-appar

Canonical source: https://maguyva.ai/sv/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 stöder Ruby med AST, symboler och graf, så att AI-agenter kan följa klasser, moduler, singletonmetoder och konstruktoranrop i Rails- och Ruby-kodbaser.

## Stödöversikt

- Nivå: Stöd för AST och symboler
- Programmering
- Filändelser: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Riktig AST-parsning för syntaxmedveten sökning och strukturell kontext.
- Namngivna symboler driver semantisk uppslagning och korsreferenser. Grafnavigering är tillgänglig när relationsextraktion är aktiverad.
- Det här språket bidrar med symboler och relationer till grafmedveten sökning; vilka kanttyper som stöds varierar med språkets inbyggda konstruktioner.
- Både AST-parsning och symbolextraktion är tillgängliga.

## Bäst lämpad för

- Rails-monoliter där modeller, serviceobjekt, jobb och concerns anropar varandra över många kataloger.
- Gems och Ruby-tjänster med djupa modulnamnrymder och delade basklasser.
- Team som vill avgränsa en ändring med en AI-agent innan de rör en modell eller tjänst som halva appen beror på.

## Agentarbetsflöden

- Hitta alla som anropar ett serviceobjekt eller en modellmetod innan beteendet ändras.
- Spåra var en klass instansieras med `.new` och vilka metoder som körs därefter.
- Kartlägga vilka klasser som ärver från en basklass eller inkluderar en modul före en refaktorering.

## Varför Ruby-repon är svåra för ytliga AI-verktyg

Ruby lutar sig tungt mot konventioner och metaprogrammering. Metoder genereras av `attr_accessor`, klasser öppnas igen i andra filer och namnrymder nästlar flera moduler djupt. Den läsbara ytan döljer vilken metod ett anrop faktiskt når, och en trubbig textsökning returnerar varje `call` och `perform` i appen.

Maguyva ger agenten klasser, moduler, metoder och deras anropare som struktur, så att den kan följa en ändring genom appen i stället för att gissa.

## Vad Maguyva extraherar i Ruby

Maguyva täcker `.rb`-, `.rbw`-, `.rake`- och `.gemspec`-filer samt `Gemfile` och `Rakefile`. Instansmetoder och singletonmetoder (`def self.call`) extraheras, och singletonmetoder markeras som statiska. Deklarationer med `attr_reader`, `attr_writer` och `attr_accessor` räknas som accessormetoder, och symboler kvalificeras med sin modul- och klassnamnrymd.

`ClassName.new` och `Namespace::ClassName.new` räknas som instansiering, och mottagartypningen följer lokala tilldelningar och `@instance_variables`, så ett anrop på ett tilldelat objekt kan lösas till sin klass. Grafen registrerar också arv, modulinkludering, överskrivningar, `raise`- och `rescue`-kanter samt läsningar och skrivningar.

Metaprogrammeringsanrop (`define_method`, `send`, `method_missing`, `class_eval` och liknande), Sorbets `T::`-typhjälpare och vanliga enumerable-anrop (`each`, `collect`, `reject` och liknande) filtreras bort ur relationerna så att applikationskoden syns.

## Exempel på prompter för agenter

- "Vem anropar `Billing::ChargeCustomer.call`, och från vilka jobb och controllers?" (`find_symbol`, sedan `dependency_search` incoming)
- "Vilka modeller ärver från `ApplicationRecord` och inkluderar `Auditable`?" (`dependency_search`)
- "Spåra vad som händer efter att en order markerats som betald." (`get_task_context`)

## Kända begränsningar

- `require` och `load` är vanliga metodanrop i Ruby, så förinställningen `imports` i `structural_search` väljer ingenting. Använd `text_pattern_search` för att lista dem.
- Metoder som skapas vid körning med `define_method` eller hanteras av `method_missing` extraheras inte som symboler, och de anropen filtreras som metaprogrammeringsbrus.
- Ruby saknar dekoratorsyntax, så dekoratorrelationer är markerade som ej tillämpliga.

## Nästa steg

Anslut ett repo med [snabbstarten](/sv/docs/quickstart) och kontrollera sedan stödmatrisen på [kompatibilitetssidan](/sv/docs/compatibility). För andra repon i dynamiska språk, jämför med [guiden för Python](/sv/languages/python).

## Motordetaljer

- Ruby-stödet täcker `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` och `Rakefile`. Singletonmetoder markeras som statiska, och `attr_*`-deklarationer räknas som accessormetoder.
- `ClassName.new` räknas som instansiering, och mottagartypningen följer lokala tilldelningar och instansvariabler.
- Metaprogrammeringsanrop som `define_method` och `send`, Sorbets `T::`-hjälpare och vanliga enumerable-anrop filtreras bort ur relationerna.

## Användbara MCP-ingångar

- `find_symbol`: Använd det för en klass, modul eller metod med namnrymd, som `Billing::ChargeCustomer.call`.
- `dependency_search`: Använd incoming-traversering på en modell eller ett serviceobjekt före en ändring för att se anropare och subklasser.
- `text_pattern_search`: Använd det för `require`-sökvägar, routesträngar och dynamiskt definierade metoder som grafen inte ser.
