# Ruby v Maguyva: grafy kódu pro Rails a aplikace v Ruby

Canonical source: https://maguyva.ai/cs/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 podporuje Ruby s AST, symboly a grafem, takže AI agenti sledují třídy, moduly, singletonové metody a konstruktory v kódových základnách Rails a Ruby.

## Přehled podpory

- Úroveň: Podpora AST a symbolů
- Programování
- Přípony: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Skutečné parsování AST pro vyhledávání citlivé na syntaxi a strukturální kontext.
- Pojmenované symboly napájejí sémantické vyhledávání a křížové odkazy. Navigace v grafu je k dispozici, když je povolena extrakce vztahů.
- Tento jazyk přispívá symboly a vztahy do vyhledávání využívajícího graf; podporované typy hran se liší podle jeho nativních konstrukcí.
- K dispozici je parsování AST i extrakce symbolů.

## Nejlépe se hodí pro

- Monolity v Rails, kde se modely, servisní objekty, úlohy a concerns volají napříč mnoha adresáři.
- Gemy a služby v Ruby s hlubokými jmennými prostory modulů a sdílenými základními třídami.
- Týmy, které chtějí s AI agentem ohraničit změnu dřív, než sáhnou na model nebo službu, na které závisí půlka aplikace.

## Workflow agentů

- Najít všechny volající servisního objektu nebo metody modelu, než se změní jejich chování.
- Dohledat, kde se třída vytváří přes `.new` a které metody se pak spouštějí.
- Před refaktoringem zmapovat, které třídy dědí ze základní třídy nebo vkládají modul.

## Proč jsou repozitáře v Ruby pro povrchní AI nástroje obtížné

Ruby silně spoléhá na konvence a metaprogramování. Metody generuje `attr_accessor`, třídy se znovu otevírají v jiných souborech a jmenné prostory vnořují moduly do několika úrovní. Čitelný povrch skrývá, ke které metodě volání skutečně dojde, a hrubé textové vyhledávání vrátí každé `call` a `perform` v aplikaci.

Maguyva dá agentovi třídy, moduly, metody a jejich volající jako strukturu, aby mohl změnu sledovat celou aplikací a nemusel hádat.

## Co Maguyva v Ruby extrahuje

Maguyva pokrývá soubory `.rb`, `.rbw`, `.rake` a `.gemspec` a také `Gemfile` a `Rakefile`. Extrahují se metody instancí a singletonové metody (`def self.call`), přičemž singletonové metody se označí jako statické. Deklarace `attr_reader`, `attr_writer` a `attr_accessor` se počítají jako přístupové metody a symboly se kvalifikují jmenným prostorem modulu a třídy.

`ClassName.new` a `Namespace::ClassName.new` se počítají jako vytvoření instance a typování příjemců sleduje lokální přiřazení a `@instance_variables`, takže volání na přiřazeném objektu lze vyřešit na jeho třídu. Graf zaznamenává také dědičnost, vkládání modulů, přepisy, hrany `raise` a `rescue` a čtení a zápisy.

Volání metaprogramování (`define_method`, `send`, `method_missing`, `class_eval` a podobné), typové pomocníky `T::` ze Sorbetu a běžná volání Enumerable (`each`, `collect`, `reject` a podobné) se z vazeb odfiltrují, aby vynikl kód aplikace.

## Ukázkové prompty pro agenty

- „Kdo volá `Billing::ChargeCustomer.call` a ze kterých úloh a kontrolérů?“ (`find_symbol`, pak `dependency_search` incoming)
- „Které modely dědí z `ApplicationRecord` a vkládají `Auditable`?“ (`dependency_search`)
- „Sleduj, co se stane poté, co je objednávka označena jako zaplacená.“ (`get_task_context`)

## Známá omezení

- V Ruby jsou `require` a `load` běžná volání metod, takže preset `imports` v `structural_search` nic nevybere. K jejich výpisu použijte `text_pattern_search`.
- Metody vytvořené za běhu přes `define_method` nebo obsluhované přes `method_missing` se neextrahují jako symboly a tato volání se odfiltrují jako šum metaprogramování.
- Ruby nemá syntaxi dekorátorů, proto jsou vazby dekorátorů označeny jako nepoužitelné.

## Další kroky

Připojte repozitář podle [rychlého startu](/cs/docs/quickstart) a pak si prohlédněte matici podpory na [stránce kompatibility](/cs/docs/compatibility). U dalších repozitářů v dynamických jazycích porovnejte s [průvodcem jazykem Python](/cs/languages/python).

## Podrobnosti enginu

- Podpora Ruby pokrývá `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` a `Rakefile`. Singletonové metody se označují jako statické a deklarace `attr_*` se počítají jako přístupové metody.
- `ClassName.new` se počítá jako vytvoření instance a typování příjemců sleduje lokální přiřazení a proměnné instance.
- Volání metaprogramování jako `define_method` a `send`, pomocníci `T::` ze Sorbetu a běžná volání Enumerable se z vazeb odfiltrují.

## Užitečné vstupní body MCP

- `find_symbol`: Použijte pro třídu, modul nebo metodu se jmenným prostorem, například `Billing::ChargeCustomer.call`.
- `dependency_search`: Před změnou použijte procházení incoming na modelu nebo servisním objektu a uvidíte volající i podtřídy.
- `text_pattern_search`: Použijte pro cesty `require`, řetězce rout a dynamicky definované metody, které graf nevidí.
