# Ruby-tuki Maguyva-palvelussa: koodigraafit Rails- ja Ruby-sovelluksille

Canonical source: https://maguyva.ai/fi/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 tukee Rubya AST-jäsennyksellä, symboleilla ja graafilla, jotta tekoälyagentit voivat seurata luokkia, moduuleja, singleton-metodeja ja konstruktorikutsuja Rails- ja Ruby-koodikannoissa.

## Tukikatsaus

- Taso: AST- ja symbolituki
- Ohjelmointi
- Päätteet: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Oikea AST-jäsennys syntaksitietoiseen hakuun ja rakenteelliseen kontekstiin.
- Nimetyt symbolit syöttävät semanttista hakua ja ristiviittauksia. Graafinavigointi on käytettävissä, kun suhteiden poiminta on käytössä.
- Tämä kieli tuo symboleja ja suhteita graafia hyödyntävään hakuun; tuetut reunatyypit vaihtelevat kielen omien rakenteiden mukaan.
- Sekä AST-jäsennys että symbolien poiminta ovat käytettävissä.

## Parhaiten sopii

- Rails-monoliitit, joissa mallit, palveluoliot, taustatyöt ja concernit kutsuvat toisiaan monen hakemiston yli.
- Gemit ja Ruby-palvelut, joissa on syviä moduulinimiavaruuksia ja jaettuja kantaluokkia.
- Tiimit, jotka haluavat rajata muutoksen tekoälyagentin avulla ennen kuin koskevat malliin tai palveluun, josta puolet sovelluksesta riippuu.

## Agenttien työnkulut

- Löytää kaikki palveluolion tai mallin metodin kutsujat ennen kuin niiden toimintaa muutetaan.
- Jäljittää, missä luokasta luodaan ilmentymä `.new`-kutsulla ja mitkä metodit suoritetaan seuraavaksi.
- Kartoittaa ennen refaktorointia, mitkä luokat perivät kantaluokan tai sisällyttävät moduulin.

## Miksi Ruby-repositoriot ovat vaikeita pinnallisille tekoälytyökaluille

Ruby nojaa vahvasti konventioihin ja metaohjelmointiin. Metodeja syntyy `attr_accessor`-esittelyistä, luokat avataan uudelleen muissa tiedostoissa, ja nimiavaruudet sisäkkäistävät moduuleja monta tasoa. Luettava pinta kätkee, mihin metodiin kutsu todella päätyy, ja karkea tekstihaku palauttaa sovelluksen jokaisen `call`- ja `perform`-kutsun.

Maguyva antaa agentille luokat, moduulit, metodit ja niiden kutsujat rakenteena, jotta se voi seurata muutosta sovelluksen läpi arvailematta.

## Mitä Maguyva poimii Rubysta

Maguyva kattaa tiedostot `.rb`, `.rbw`, `.rake` ja `.gemspec` sekä tiedostot `Gemfile` ja `Rakefile`. Ilmentymämetodit ja singleton-metodit (`def self.call`) poimitaan, ja singleton-metodit merkitään staattisiksi. Esittelyt `attr_reader`, `attr_writer` ja `attr_accessor` lasketaan saantimetodeiksi, ja symbolit tarkennetaan moduulin ja luokan nimiavaruudella.

`ClassName.new` ja `Namespace::ClassName.new` lasketaan ilmentymän luonniksi, ja vastaanottajan tyypitys seuraa paikallisia sijoituksia ja muuttujia `@instance_variables`, joten sijoitettuun olioon kohdistuvan kutsun voi ratkaista sen luokkaan. Graafi tallentaa myös periytymisen, moduulien sisällyttämisen, ylikirjoitukset, `raise`- ja `rescue`-kaaret sekä luvut ja kirjoitukset.

Metaohjelmoinnin kutsut (`define_method`, `send`, `method_missing`, `class_eval` ja vastaavat), Sorbetin `T::`-tyyppiapurit ja yleiset Enumerable-kutsut (`each`, `collect`, `reject` ja vastaavat) suodatetaan pois suhteista, jotta sovelluskoodi erottuu.

## Esimerkkikehotteita agenteille

- "Kuka kutsuu metodia `Billing::ChargeCustomer.call`, ja mistä taustatöistä ja kontrollereista?" (`find_symbol`, sitten `dependency_search` incoming)
- "Mitkä mallit perivät luokan `ApplicationRecord` ja sisällyttävät moduulin `Auditable`?" (`dependency_search`)
- "Jäljitä, mitä tapahtuu, kun tilaus on merkitty maksetuksi." (`get_task_context`)

## Tunnetut rajoitukset

- Rubyssa `require` ja `load` ovat tavallisia metodikutsuja, joten työkalun `structural_search` esiasetus `imports` ei valitse mitään. Käytä niiden listaamiseen työkalua `text_pattern_search`.
- Ajon aikana `define_method`-kutsulla luotuja tai `method_missing`-metodin käsittelemiä metodeja ei poimita symboleina, ja nämä kutsut suodatetaan metaohjelmoinnin kohinana.
- Rubyssa ei ole dekoraattorisyntaksia, joten dekoraattorisuhteet on merkitty soveltumattomiksi.

## Seuraavat vaiheet

Yhdistä repositorio [pikaoppaan](/fi/docs/quickstart) avulla ja tarkista sitten tukimatriisi [yhteensopivuussivulta](/fi/docs/compatibility). Muiden dynaamisten kielten repositorioiden osalta vertaa [Python-oppaaseen](/fi/languages/python).

## Moottorin yksityiskohdat

- Ruby-tuki kattaa tiedostot `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` ja `Rakefile`. Singleton-metodit merkitään staattisiksi, ja `attr_*`-esittelyt lasketaan saantimetodeiksi.
- `ClassName.new` lasketaan ilmentymän luonniksi, ja vastaanottajan tyypitys seuraa paikallisia sijoituksia ja ilmentymämuuttujia.
- Metaohjelmoinnin kutsut kuten `define_method` ja `send`, Sorbetin `T::`-apurit ja yleiset Enumerable-kutsut suodatetaan pois suhteista.

## Hyödylliset MCP-liittymäkohdat

- `find_symbol`: Käytä sitä nimiavaruuden sisältävälle luokalle, moduulille tai metodille, kuten `Billing::ChargeCustomer.call`.
- `dependency_search`: Käytä ennen muutosta incoming-läpikäyntiä malliin tai palveluolioon nähdäksesi kutsujat ja aliluokat.
- `text_pattern_search`: Käytä sitä `require`-polkuihin, reittimerkkijonoihin ja dynaamisesti määriteltyihin metodeihin, joita graafi ei näe.
