# Ruby i Maguyva: kodegrafer til Rails- og Ruby-apps

Canonical source: https://maguyva.ai/da/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 understøtter Ruby med AST, symboler og graf, så AI-agenter kan følge klasser, moduler, singleton-metoder og konstruktørkald i Rails- og Ruby-kodebaser.

## Øjebliksbillede af understøttelse

- Niveau: AST- og symbolunderstøttelse
- Programmering
- Filendelser: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Rigtig AST-parsing til syntaksbevidst søgning og strukturel kontekst.
- Navngivne symboler understøtter semantisk opslag og krydsreferencer. Grafnavigation er tilgængelig, når relationsudtræk er aktiveret.
- Dette sprog bidrager med symboler og relationer til grafbaseret søgning; de understøttede kanttyper varierer med sprogets egne konstruktioner.
- Både AST-parsing og symboludtræk er tilgængelige.

## Bedst egnet til

- Rails-monolitter, hvor modeller, serviceobjekter, jobs og concerns kalder hinanden på tværs af mange mapper.
- Gems og Ruby-tjenester med dybe modul-navnerum og delte basisklasser.
- Teams, der vil afgrænse en ændring med en AI-agent, før de rører en model eller tjeneste, som halvdelen af appen afhænger af.

## Agent-arbejdsgange

- Finde alle, der kalder et serviceobjekt eller en modelmetode, før adfærden ændres.
- Spore, hvor en klasse instansieres med `.new`, og hvilke metoder der kører bagefter.
- Kortlægge, hvilke klasser der arver fra en basisklasse eller inkluderer et modul, før en refaktorering.

## Hvorfor Ruby-repositories er svære for overfladiske AI-værktøjer

Ruby læner sig tungt op ad konventioner og metaprogrammering. Metoder genereres af `attr_accessor`, klasser genåbnes i andre filer, og navnerum indlejrer flere moduler. Den læsbare overflade skjuler, hvilken metode et kald faktisk rammer, og en grov tekstsøgning returnerer hvert `call` og `perform` i appen.

Maguyva giver agenten klasser, moduler, metoder og deres kaldere som struktur, så den kan følge en ændring gennem appen i stedet for at gætte.

## Hvad Maguyva udtrækker i Ruby

Maguyva dækker `.rb`-, `.rbw`-, `.rake`- og `.gemspec`-filer samt `Gemfile` og `Rakefile`. Instansmetoder og singleton-metoder (`def self.call`) udtrækkes, og singleton-metoder markeres som statiske. Erklæringer med `attr_reader`, `attr_writer` og `attr_accessor` tæller som accessor-metoder, og symboler kvalificeres med deres modul- og klassenavnerum.

`ClassName.new` og `Namespace::ClassName.new` tæller som instansiering, og modtagertypningen følger lokale tildelinger og `@instance_variables`, så et kald på et tildelt objekt kan opløses til dets klasse. Grafen registrerer også nedarvning, modulinklusion, overskrivninger, `raise`- og `rescue`-kanter samt læsninger og skrivninger.

Metaprogrammeringskald (`define_method`, `send`, `method_missing`, `class_eval` og lignende), Sorbets `T::`-typehjælpere og almindelige enumerable-kald (`each`, `collect`, `reject` og lignende) filtreres fra relationerne, så applikationskoden træder frem.

## Eksempler på prompts til agenter

- "Hvem kalder `Billing::ChargeCustomer.call`, og fra hvilke jobs og controllers?" (`find_symbol`, derefter `dependency_search` incoming)
- "Hvilke modeller arver fra `ApplicationRecord` og inkluderer `Auditable`?" (`dependency_search`)
- "Spor, hvad der sker, efter at en ordre er markeret som betalt." (`get_task_context`)

## Kendte begrænsninger

- `require` og `load` er almindelige metodekald i Ruby, så forudindstillingen `imports` i `structural_search` vælger intet. Brug `text_pattern_search` til at liste dem.
- Metoder, der oprettes ved kørsel med `define_method` eller håndteres af `method_missing`, udtrækkes ikke som symboler, og de kald filtreres som metaprogrammeringsstøj.
- Ruby har ingen dekoratorsyntaks, så dekoratorrelationer er markeret som ikke relevante.

## Næste skridt

Tilslut et repository med [hurtigstarten](/da/docs/quickstart), og se derefter understøttelsesmatricen på [kompatibilitetssiden](/da/docs/compatibility). For andre repositories i dynamiske sprog, sammenlign med [guiden til Python](/da/languages/python).

## Motordetaljer

- Ruby-understøttelsen dækker `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` og `Rakefile`. Singleton-metoder markeres som statiske, og `attr_*`-erklæringer tæller som accessor-metoder.
- `ClassName.new` tæller som instansiering, og modtagertypningen følger lokale tildelinger og instansvariabler.
- Metaprogrammeringskald som `define_method` og `send`, Sorbets `T::`-hjælpere og almindelige enumerable-kald filtreres fra relationerne.

## Nyttige MCP-indgange

- `find_symbol`: Brug det til en klasse, et modul eller en metode med navnerum, som `Billing::ChargeCustomer.call`.
- `dependency_search`: Brug incoming-gennemløb på en model eller et serviceobjekt før en ændring for at se kaldere og subklasser.
- `text_pattern_search`: Brug det til `require`-stier, rutestrenge og dynamisk definerede metoder, som grafen ikke ser.
