# Ruby у Maguyva: графи коду для Rails і застосунків на Ruby

Canonical source: https://maguyva.ai/uk/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 підтримує Ruby з AST, символами та графом, щоб ШІ-агенти відстежували класи, модулі, синглтон-методи й конструктори в кодових базах Rails і Ruby.

## Знімок підтримки

- Рівень: Підтримка AST і символів
- Програмування
- Розширення: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Справжній розбір AST для пошуку з урахуванням синтаксису та структурного контексту.
- Іменовані символи забезпечують семантичний пошук і перехресні посилання. Навігація графом доступна, коли ввімкнено видобування зв’язків.
- Ця мова додає символи та зв’язки до пошуку з урахуванням графа; підтримувані типи ребер залежать від притаманних їй конструкцій.
- Доступні як розбір AST, так і видобування символів.

## Найкраще підходить

- Моноліти на Rails, де моделі, сервіс-об'єкти, завдання й concerns викликають одне одного з багатьох каталогів.
- Геми й сервіси на Ruby з глибокими просторами імен модулів і спільними базовими класами.
- Команди, які хочуть окреслити зміну за допомогою ШІ-агента, перш ніж торкатися моделі чи сервісу, від яких залежить половина застосунку.

## Робочі процеси агента

- Знайти всіх, хто викликає сервіс-об'єкт або метод моделі, перш ніж змінювати їхню поведінку.
- Простежити, де клас створюється через `.new` і які методи виконуються далі.
- Перед рефакторингом скласти карту класів, що успадковують базовий клас або підключають модуль.

## Чому репозиторії на Ruby складні для поверхових ШІ-інструментів

Ruby значною мірою спирається на домовленості й метапрограмування. Методи генеруються через `attr_accessor`, класи перевідкриваються в інших файлах, а простори імен вкладають модулі на кілька рівнів. Читабельна поверхня приховує, до якого методу насправді доходить виклик, а грубий текстовий пошук повертає кожен `call` і `perform` у застосунку.

Maguyva дає агентові класи, модулі, методи та тих, хто їх викликає, як структуру, щоб він простежував зміну по всьому застосунку, а не вгадував.

## Що Maguyva витягує з Ruby

Maguyva охоплює файли `.rb`, `.rbw`, `.rake` і `.gemspec`, а також `Gemfile` і `Rakefile`. Витягуються методи екземпляра й синглтон-методи (`def self.call`), причому синглтон-методи позначаються як статичні. Оголошення `attr_reader`, `attr_writer` і `attr_accessor` вважаються методами доступу, а символи кваліфікуються простором імен модуля та класу.

`ClassName.new` і `Namespace::ClassName.new` вважаються створенням екземплярів, а типізація отримувачів відстежує локальні присвоєння та `@instance_variables`, тож виклик на присвоєному об'єкті можна розв'язати в його клас. Граф також фіксує успадкування, підключення модулів, перевизначення, ребра `raise` і `rescue`, а також читання й записи.

Виклики метапрограмування (`define_method`, `send`, `method_missing`, `class_eval` тощо), типові помічники `T::` із Sorbet і поширені виклики Enumerable (`each`, `collect`, `reject` тощо) відфільтровуються зі зв'язків, щоб код застосунку було видно.

## Приклади промптів для агентів

- «Хто викликає `Billing::ChargeCustomer.call` і з яких завдань і контролерів?» (`find_symbol`, потім `dependency_search` incoming)
- «Які моделі успадковують `ApplicationRecord` і підключають `Auditable`?» (`dependency_search`)
- «Простеж, що відбувається після того, як замовлення позначено як оплачене.» (`get_task_context`)

## Відомі обмеження

- У Ruby `require` і `load` — звичайні виклики методів, тому пресет `imports` у `structural_search` нічого не вибирає. Щоб їх перелічити, використовуйте `text_pattern_search`.
- Методи, створені під час виконання через `define_method` або оброблювані `method_missing`, не витягуються як символи, а такі виклики відфільтровуються як шум метапрограмування.
- У Ruby немає синтаксису декораторів, тому зв'язки декораторів позначено як незастосовні.

## Наступні кроки

Під'єднайте репозиторій за [швидким стартом](/uk/docs/quickstart), потім перегляньте матрицю підтримки на [сторінці сумісності](/uk/docs/compatibility). Для інших репозиторіїв на динамічних мовах порівняйте з [посібником із мови Python](/uk/languages/python).

## Деталі рушія

- Підтримка Ruby охоплює `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` і `Rakefile`. Синглтон-методи позначаються як статичні, а оголошення `attr_*` вважаються методами доступу.
- `ClassName.new` вважається створенням екземпляра, а типізація отримувачів відстежує локальні присвоєння та змінні екземпляра.
- Виклики метапрограмування, як-от `define_method` і `send`, помічники `T::` із Sorbet і поширені виклики Enumerable відфільтровуються зі зв'язків.

## Корисні точки входу MCP

- `find_symbol`: Використовуйте для класу, модуля чи методу з простором імен, наприклад `Billing::ChargeCustomer.call`.
- `dependency_search`: Перед зміною використовуйте обхід incoming для моделі чи сервіс-об'єкта, щоб побачити тих, хто викликає, і підкласи.
- `text_pattern_search`: Використовуйте для шляхів `require`, рядків маршрутів і динамічно визначених методів, яких граф не бачить.
