# Ruby i Maguyva: kodegrafer for Rails- og Ruby-apper

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

## Støtteoversikt

- Nivå: AST- og symbolstøtte
- Programmering
- Filendelser: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Ekte AST-analyse for syntaksbevisst søk og strukturell kontekst.
- Navngitte symboler mater semantisk oppslag og kryssreferanser. Grafnavigasjon er tilgjengelig når relasjonsuttrekk er aktivert.
- Dette språket bidrar med symboler og relasjoner til grafbasert søk; støttede kanttyper varierer med språkets egne konstruksjoner.
- Både AST-analyse og symboluttrekk er tilgjengelige.

## Best egnet

- Rails-monolitter der modeller, tjenesteobjekter, jobber og concerns kaller hverandre på tvers av mange kataloger.
- Gems og Ruby-tjenester med dype modulnavnerom og delte basisklasser.
- Team som vil avgrense en endring med en AI-agent før de rører en modell eller tjeneste som halve appen er avhengig av.

## Agent-arbeidsflyter

- Finne alle som kaller et tjenesteobjekt eller en modellmetode før atferden endres.
- Spore hvor en klasse instansieres med `.new`, og hvilke metoder som kjører etterpå.
- Kartlegge hvilke klasser som arver fra en basisklasse eller inkluderer en modul før en refaktorering.

## Hvorfor Ruby-repositorier er vanskelige for overfladiske AI-verktøy

Ruby lener seg tungt på konvensjoner og metaprogrammering. Metoder genereres av `attr_accessor`, klasser åpnes på nytt i andre filer, og navnerom nøster flere moduler i dybden. Den lesbare overflaten skjuler hvilken metode et kall faktisk treffer, og et grovt tekstsøk returnerer hver `call` og `perform` i appen.

Maguyva gir agenten klasser, moduler, metoder og kallerne deres som struktur, slik at den kan følge en endring gjennom appen i stedet for å gjette.

## Hva Maguyva henter ut i Ruby

Maguyva dekker `.rb`-, `.rbw`-, `.rake`- og `.gemspec`-filer samt `Gemfile` og `Rakefile`. Instansmetoder og singleton-metoder (`def self.call`) hentes ut, og singleton-metoder merkes som statiske. Deklarasjoner med `attr_reader`, `attr_writer` og `attr_accessor` teller som accessor-metoder, og symboler kvalifiseres med modul- og klassenavnerommet sitt.

`ClassName.new` og `Namespace::ClassName.new` teller som instansiering, og mottakertypingen følger lokale tilordninger og `@instance_variables`, så et kall på et tilordnet objekt kan løses til klassen. Grafen registrerer også arv, modulinkludering, overstyringer, `raise`- og `rescue`-kanter samt lesinger og skrivinger.

Metaprogrammeringskall (`define_method`, `send`, `method_missing`, `class_eval` og lignende), Sorbets `T::`-typehjelpere og vanlige enumerable-kall (`each`, `collect`, `reject` og lignende) filtreres ut av relasjonene, slik at applikasjonskoden kommer tydelig frem.

## Eksempler på prompter for agenter

- «Hvem kaller `Billing::ChargeCustomer.call`, og fra hvilke jobber og kontrollere?» (`find_symbol`, deretter `dependency_search` incoming)
- «Hvilke modeller arver fra `ApplicationRecord` og inkluderer `Auditable`?» (`dependency_search`)
- «Spor hva som skjer etter at en ordre er merket som betalt.» (`get_task_context`)

## Kjente begrensninger

- `require` og `load` er vanlige metodekall i Ruby, så forhåndsinnstillingen `imports` i `structural_search` velger ingenting. Bruk `text_pattern_search` for å liste dem.
- Metoder som opprettes under kjøring med `define_method` eller håndteres av `method_missing`, hentes ikke ut som symboler, og disse kallene filtreres som metaprogrammeringsstøy.
- Ruby har ingen dekoratorsyntaks, så dekoratorrelasjoner er merket som ikke aktuelle.

## Neste steg

Koble til et repositorium med [hurtigstarten](/nb/docs/quickstart), og se deretter støttematrisen på [kompatibilitetssiden](/nb/docs/compatibility). For andre repositorier i dynamiske språk kan du sammenligne med [veiledningen for Python](/nb/languages/python).

## Motordetaljer

- Ruby-støtten dekker `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` og `Rakefile`. Singleton-metoder merkes som statiske, og `attr_*`-deklarasjoner teller som accessor-metoder.
- `ClassName.new` teller som instansiering, og mottakertypingen følger lokale tilordninger og instansvariabler.
- Metaprogrammeringskall som `define_method` og `send`, Sorbets `T::`-hjelpere og vanlige enumerable-kall filtreres ut av relasjonene.

## Nyttige MCP-inngangspunkter

- `find_symbol`: Bruk det for en klasse, en modul eller en metode med navnerom, som `Billing::ChargeCustomer.call`.
- `dependency_search`: Bruk incoming-traversering på en modell eller et tjenesteobjekt før en endring for å se kallere og subklasser.
- `text_pattern_search`: Bruk det for `require`-stier, rutestrenger og dynamisk definerte metoder som grafen ikke ser.
