# Ruby dalam Maguyva: graf kod untuk Rails dan aplikasi Ruby

Canonical source: https://maguyva.ai/ms/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 menyokong Ruby dengan AST, simbol dan graf, supaya ejen AI boleh menjejak kelas, modul, kaedah singleton dan pembina dalam pangkalan kod Rails dan Ruby.

## Gambaran sokongan

- Peringkat: Sokongan AST dan simbol
- Pengaturcaraan
- Sambungan fail: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Penghuraian AST sebenar untuk carian sedar-sintaks dan konteks struktur.
- Simbol bernama menyokong carian semantik dan rujukan silang. Navigasi graf tersedia apabila pengekstrakan hubungan didayakan.
- Bahasa ini menyumbang simbol dan hubungan kepada carian berasaskan graf; jenis edge yang disokong berbeza mengikut binaan aslinya.
- Penghuraian AST dan pengekstrakan simbol kedua-duanya tersedia.

## Paling sesuai

- Monolit Rails tempat model, service object, job dan concern saling memanggil merentas banyak direktori.
- Gem dan perkhidmatan Ruby dengan ruang nama modul yang mendalam dan kelas asas kongsi.
- Pasukan yang mahu menetapkan skop perubahan bersama ejen AI sebelum menyentuh model atau perkhidmatan yang menjadi sandaran separuh aplikasi.

## Aliran kerja ejen

- Mencari setiap pemanggil service object atau kaedah model sebelum tingkah lakunya berubah.
- Menjejak tempat sesuatu kelas dicipta dengan `.new` dan kaedah yang berjalan selepas itu.
- Memetakan kelas yang mewarisi daripada kelas asas atau menyertakan sesuatu modul sebelum pemfaktoran semula.

## Mengapa repositori Ruby menyukarkan alat AI yang cetek

Ruby sangat bergantung pada konvensyen dan pengaturcaraan meta. Kaedah dijana oleh `attr_accessor`, kelas dibuka semula dalam fail lain, dan ruang nama menyarangkan modul hingga beberapa tahap. Permukaan yang mudah dibaca menyembunyikan kaedah mana yang sebenarnya dicapai oleh sesuatu panggilan, dan carian teks yang kasar mengembalikan setiap `call` dan setiap `perform` dalam aplikasi.

Maguyva memberikan kelas, modul, kaedah dan pemanggilnya kepada ejen sebagai struktur, supaya ia dapat mengikuti perubahan di seluruh aplikasi dan bukannya meneka.

## Apa yang diekstrak oleh Maguyva daripada Ruby

Maguyva meliputi fail `.rb`, `.rbw`, `.rake` dan `.gemspec`, serta `Gemfile` dan `Rakefile`. Kaedah instance dan kaedah singleton (`def self.call`) diekstrak, dengan kaedah singleton ditanda sebagai static. Pengisytiharan `attr_reader`, `attr_writer` dan `attr_accessor` dikira sebagai kaedah capaian, dan simbol dilayakkan dengan ruang nama modul dan kelasnya.

`ClassName.new` dan `Namespace::ClassName.new` dikira sebagai penginstansian, dan penentuan jenis penerima mengikut umpukan setempat dan `@instance_variables`, jadi panggilan pada objek yang diumpukkan boleh diselesaikan kepada kelasnya. Graf juga merekodkan pewarisan, penyertaan modul, penggantian, tepi `raise` dan `rescue`, serta bacaan dan tulisan.

Panggilan pengaturcaraan meta (`define_method`, `send`, `method_missing`, `class_eval` dan seumpamanya), pembantu jenis `T::` daripada Sorbet, dan panggilan Enumerable biasa (`each`, `collect`, `reject` dan seumpamanya) ditapis daripada hubungan, supaya kod aplikasi lebih menonjol.

## Contoh gesaan ejen

- "Siapa yang memanggil `Billing::ChargeCustomer.call`, dan daripada job serta pengawal mana?" (`find_symbol`, kemudian `dependency_search` arah masuk)
- "Model mana yang mewarisi daripada `ApplicationRecord` dan menyertakan `Auditable`?" (`dependency_search`)
- "Jejaki apa yang berlaku selepas sesuatu pesanan ditanda sebagai telah dibayar." (`get_task_context`)

## Had yang diketahui

- Dalam Ruby, `require` dan `load` ialah panggilan kaedah biasa, jadi pratetap `imports` dalam `structural_search` tidak memilih apa-apa. Gunakan `text_pattern_search` untuk menyenaraikannya.
- Kaedah yang dicipta semasa masa jalan dengan `define_method` atau dikendalikan oleh `method_missing` tidak diekstrak sebagai simbol, dan panggilan tersebut ditapis sebagai hingar pengaturcaraan meta.
- Ruby tiada sintaks decorator, jadi hubungan decorator ditanda sebagai tidak berkenaan.

## Langkah seterusnya

Sambungkan repositori dengan [panduan permulaan pantas](/ms/docs/quickstart), kemudian semak matriks sokongan di [halaman keserasian](/ms/docs/compatibility). Untuk repositori bahasa dinamik yang lain, bandingkan dengan [panduan Python](/ms/languages/python).

## Butiran enjin

- Sokongan Ruby meliputi `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` dan `Rakefile`. Kaedah singleton ditanda static, dan pengisytiharan `attr_*` dikira sebagai kaedah capaian.
- `ClassName.new` dikira sebagai penginstansian, dan penentuan jenis penerima mengikut umpukan setempat dan pemboleh ubah instance.
- Panggilan pengaturcaraan meta seperti `define_method` dan `send`, pembantu `T::` daripada Sorbet dan panggilan Enumerable biasa ditapis daripada hubungan.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk kelas, modul atau kaedah beruang nama, seperti `Billing::ChargeCustomer.call`.
- `dependency_search`: Sebelum perubahan, gunakan penjelajahan arah masuk pada model atau service object untuk melihat pemanggil dan subkelas.
- `text_pattern_search`: Gunakan untuk laluan `require`, rentetan laluan web dan kaedah yang ditakrifkan secara dinamik yang tidak dapat dilihat oleh graf.
