# Ruby w Maguyva: grafy kodu dla Rails i aplikacji Ruby

Canonical source: https://maguyva.ai/pl/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 obsługuje Ruby przez AST, symbole i graf, dzięki czemu agenci AI śledzą klasy, moduły, metody singletonowe i konstruktory w bazach kodu Rails i Ruby.

## Migawka wsparcia

- Poziom: Obsługa AST i symboli
- Programowanie
- Rozszerzenia: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Prawdziwe parsowanie AST dla wyszukiwania świadomego składni i kontekstu strukturalnego.
- Nazwane symbole zasilają wyszukiwanie semantyczne i wzajemne odwołania. Nawigacja po grafie jest dostępna po włączeniu ekstrakcji relacji.
- Ten język dostarcza symbole i relacje do wyszukiwania uwzględniającego graf; obsługiwane typy krawędzi zależą od jego rodzimych konstrukcji.
- Dostępne są zarówno parsowanie AST, jak i ekstrakcja symboli.

## Najlepsze dopasowanie

- Monolity Rails, w których modele, obiekty usług, zadania i concerny wywołują się nawzajem w wielu katalogach.
- Gemy i usługi w Ruby z głęboko zagnieżdżonymi przestrzeniami nazw modułów i współdzielonymi klasami bazowymi.
- Zespoły, które chcą określić zakres zmiany z agentem AI, zanim dotkną modelu lub usługi, od której zależy pół aplikacji.

## Workflow agentów

- Znaleźć wszystkich wywołujących obiekt usługi lub metodę modelu przed zmianą ich zachowania.
- Prześledzić, gdzie klasa jest tworzona przez `.new` i które metody wykonują się potem.
- Zmapować, które klasy dziedziczą po klasie bazowej lub dołączają moduł, przed refaktoryzacją.

## Dlaczego repozytoria Ruby sprawiają kłopot powierzchownym narzędziom AI

Ruby mocno opiera się na konwencjach i metaprogramowaniu. Metody są generowane przez `attr_accessor`, klasy są ponownie otwierane w innych plikach, a przestrzenie nazw zagnieżdżają kilka poziomów modułów. Czytelna powierzchnia ukrywa, do której metody naprawdę trafia wywołanie, a toporne wyszukiwanie tekstowe zwraca każde `call` i każde `perform` w aplikacji.

Maguyva daje agentowi klasy, moduły, metody i ich wywołujących jako strukturę, aby śledził zmianę w całej aplikacji zamiast zgadywać.

## Co Maguyva wyodrębnia w Ruby

Maguyva obejmuje pliki `.rb`, `.rbw`, `.rake` i `.gemspec` oraz `Gemfile` i `Rakefile`. Wyodrębniane są metody instancji i metody singletonowe (`def self.call`), przy czym metody singletonowe są oznaczane jako statyczne. Deklaracje `attr_reader`, `attr_writer` i `attr_accessor` liczą się jako metody dostępowe, a symbole są kwalifikowane przestrzenią nazw modułu i klasy.

`ClassName.new` i `Namespace::ClassName.new` liczą się jako tworzenie instancji, a typowanie odbiorców śledzi lokalne przypisania i `@instance_variables`, dzięki czemu wywołanie na przypisanym obiekcie można rozwiązać do jego klasy. Graf zapisuje też dziedziczenie, dołączanie modułów, nadpisania, krawędzie `raise` i `rescue` oraz odczyty i zapisy.

Wywołania metaprogramowania (`define_method`, `send`, `method_missing`, `class_eval` i podobne), pomocnicze typy `T::` z Sorbeta oraz typowe wywołania enumerable (`each`, `collect`, `reject` i podobne) są filtrowane z relacji, aby wyróżnić kod aplikacji.

## Przykładowe prompty dla agentów

- „Kto wywołuje `Billing::ChargeCustomer.call` i z których zadań i kontrolerów?” (`find_symbol`, potem `dependency_search` incoming)
- „Które modele dziedziczą po `ApplicationRecord` i dołączają `Auditable`?” (`dependency_search`)
- „Prześledź, co się dzieje po oznaczeniu zamówienia jako opłacone.” (`get_task_context`)

## Znane ograniczenia

- W Ruby `require` i `load` to zwykłe wywołania metod, więc preset `imports` w `structural_search` niczego nie wybiera. Aby je wypisać, użyj `text_pattern_search`.
- Metody tworzone w czasie działania przez `define_method` lub obsługiwane przez `method_missing` nie są wyodrębniane jako symbole, a te wywołania są filtrowane jako szum metaprogramowania.
- Ruby nie ma składni dekoratorów, więc relacje dekoratorów są oznaczone jako nie dotyczy.

## Kolejne kroki

Podłącz repozytorium za pomocą [szybkiego startu](/pl/docs/quickstart), a potem sprawdź macierz obsługi na [stronie zgodności](/pl/docs/compatibility). W przypadku innych repozytoriów w językach dynamicznych porównaj z [przewodnikiem po języku Python](/pl/languages/python).

## Szczegóły silnika

- Obsługa Ruby obejmuje `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` i `Rakefile`. Metody singletonowe są oznaczane jako statyczne, a deklaracje `attr_*` liczą się jako metody dostępowe.
- `ClassName.new` liczy się jako tworzenie instancji, a typowanie odbiorców śledzi lokalne przypisania i zmienne instancji.
- Wywołania metaprogramowania, takie jak `define_method` i `send`, pomocnicze `T::` z Sorbeta oraz typowe wywołania enumerable są filtrowane z relacji.

## Przydatne punkty wejścia MCP

- `find_symbol`: Używaj go z klasą, modułem lub metodą z przestrzenią nazw, taką jak `Billing::ChargeCustomer.call`.
- `dependency_search`: Przed zmianą użyj przejścia incoming na modelu lub obiekcie usługi, aby zobaczyć wywołujących i podklasy.
- `text_pattern_search`: Używaj go do ścieżek `require`, ciągów tras i metod definiowanych dynamicznie, których graf nie widzi.
