# Ruby di Maguyva: graf kode untuk Rails dan aplikasi Ruby

Canonical source: https://maguyva.ai/id/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 mendukung Ruby dengan AST, simbol, dan graf, sehingga agen AI dapat menelusuri kelas, modul, metode singleton, dan konstruktor dalam basis kode Rails dan Ruby.

## Snapshot dukungan

- Tier: Dukungan AST dan simbol
- Pemrograman
- Ekstensi: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Parsing AST sungguhan untuk pencarian sadar-syntax dan konteks struktural.
- Simbol bernama menggerakkan pencarian semantik dan cross-reference. Navigasi graf tersedia saat ekstraksi relasi diaktifkan.
- Bahasa ini menyumbangkan simbol dan relasi ke pencarian berbasis graf; jenis edge yang didukung bervariasi sesuai konstruk bawaan bahasa tersebut.
- Parsing AST dan ekstraksi simbol sama-sama tersedia.

## Paling cocok untuk

- Monolit Rails tempat model, service object, job, dan concern saling memanggil di banyak direktori.
- Gem dan layanan Ruby dengan namespace modul yang dalam dan kelas dasar bersama.
- Tim yang ingin membatasi cakupan perubahan bersama agen AI sebelum menyentuh model atau layanan yang menjadi sandaran separuh aplikasi.

## Workflow agent

- Menemukan setiap pemanggil service object atau metode model sebelum perilakunya berubah.
- Menelusuri tempat sebuah kelas dibuat dengan `.new` dan metode yang berjalan sesudahnya.
- Memetakan kelas yang mewarisi dari kelas dasar atau meng-include sebuah modul sebelum refactor.

## Mengapa repositori Ruby menyulitkan alat AI yang dangkal

Ruby sangat bergantung pada konvensi dan metaprogramming. Metode dihasilkan oleh `attr_accessor`, kelas dibuka ulang di berkas lain, dan namespace menyarangkan modul hingga beberapa tingkat. Permukaan yang mudah dibaca menyembunyikan metode mana yang sebenarnya dicapai sebuah panggilan, dan pencarian teks kasar mengembalikan setiap `call` dan setiap `perform` di aplikasi.

Maguyva memberi agen kelas, modul, metode, dan pemanggilnya sebagai struktur, sehingga ia dapat mengikuti sebuah perubahan di seluruh aplikasi alih-alih menebak.

## Apa yang diekstrak Maguyva dari Ruby

Maguyva mencakup berkas `.rb`, `.rbw`, `.rake`, dan `.gemspec`, serta `Gemfile` dan `Rakefile`. Metode instance dan metode singleton (`def self.call`) diekstrak, dengan metode singleton ditandai sebagai static. Deklarasi `attr_reader`, `attr_writer`, dan `attr_accessor` dihitung sebagai metode akses, dan simbol dikualifikasi dengan namespace modul dan kelasnya.

`ClassName.new` dan `Namespace::ClassName.new` dihitung sebagai instansiasi, dan penentuan tipe receiver mengikuti penugasan lokal dan `@instance_variables`, sehingga panggilan pada objek yang ditugaskan dapat diselesaikan ke kelasnya. Graf juga mencatat pewarisan, include modul, override, edge `raise` dan `rescue`, serta pembacaan dan penulisan.

Panggilan metaprogramming (`define_method`, `send`, `method_missing`, `class_eval`, dan sejenisnya), helper tipe `T::` dari Sorbet, serta panggilan Enumerable umum (`each`, `collect`, `reject`, dan sejenisnya) difilter dari relasi, agar kode aplikasi menonjol.

## Contoh prompt agen

- "Siapa yang memanggil `Billing::ChargeCustomer.call`, dan dari job serta controller mana?" (`find_symbol`, lalu `dependency_search` arah masuk)
- "Model mana yang mewarisi dari `ApplicationRecord` dan meng-include `Auditable`?" (`dependency_search`)
- "Telusuri apa yang terjadi setelah sebuah pesanan ditandai lunas." (`get_task_context`)

## Batasan yang diketahui

- Di Ruby, `require` dan `load` adalah panggilan metode biasa, sehingga preset `imports` di `structural_search` tidak memilih apa pun. Gunakan `text_pattern_search` untuk mendaftarnya.
- Metode yang dibuat saat runtime dengan `define_method` atau ditangani oleh `method_missing` tidak diekstrak sebagai simbol, dan panggilan tersebut difilter sebagai derau metaprogramming.
- Ruby tidak memiliki sintaks decorator, sehingga relasi decorator ditandai tidak berlaku.

## Langkah berikutnya

Hubungkan repositori dengan [panduan memulai cepat](/id/docs/quickstart), lalu periksa matriks dukungan di [halaman kompatibilitas](/id/docs/compatibility). Untuk repositori bahasa dinamis lainnya, bandingkan dengan [panduan Python](/id/languages/python).

## Detail engine

- Dukungan Ruby mencakup `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile`, dan `Rakefile`. Metode singleton ditandai static, dan deklarasi `attr_*` dihitung sebagai metode akses.
- `ClassName.new` dihitung sebagai instansiasi, dan penentuan tipe receiver mengikuti penugasan lokal dan variabel instance.
- Panggilan metaprogramming seperti `define_method` dan `send`, helper `T::` dari Sorbet, serta panggilan Enumerable umum difilter dari relasi.

## Titik masuk MCP yang berguna

- `find_symbol`: Gunakan untuk kelas, modul, atau metode ber-namespace, seperti `Billing::ChargeCustomer.call`.
- `dependency_search`: Sebelum perubahan, gunakan penelusuran arah masuk pada model atau service object untuk melihat pemanggil dan subkelas.
- `text_pattern_search`: Gunakan untuk path `require`, string rute, dan metode yang didefinisikan secara dinamis yang tidak terlihat oleh graf.
