# Ruby in Maguyva: grafi del codice per Rails e app Ruby

Canonical source: https://maguyva.ai/it/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 supporta Ruby con AST, simboli e grafo, così gli agenti IA seguono classi, moduli, metodi singleton e costruttori nelle basi di codice Rails e Ruby.

## Istantanea del supporto

- Livello: Supporto AST e simboli
- Programmazione
- Estensioni: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Analisi AST reale per ricerca sintattica e contesto strutturale.
- I simboli nominati alimentano la ricerca semantica e i riferimenti incrociati. La navigazione del grafo è disponibile quando è abilitata l’estrazione delle relazioni.
- Questo linguaggio contribuisce con simboli e relazioni alla ricerca basata sul grafo; i tipi di arco supportati variano in base ai suoi costrutti nativi.
- Sono disponibili sia l’analisi AST sia l’estrazione dei simboli.

## Il più adatto per

- Monoliti Rails in cui model, service object, job e concern si chiamano attraverso molte directory.
- Gem e servizi Ruby con namespace di moduli profondi e classi base condivise.
- Team che vogliono delimitare una modifica con un agente IA prima di toccare un model o un servizio da cui dipende mezza app.

## Workflow degli agenti

- Trovare tutti i chiamanti di un service object o di un metodo di model prima di cambiarne il comportamento.
- Tracciare dove una classe viene istanziata con `.new` e quali metodi vengono eseguiti dopo.
- Mappare quali classi ereditano da una classe base o includono un modulo prima di un refactoring.

## Perché i repository Ruby mettono in difficoltà gli strumenti di IA superficiali

Ruby si appoggia molto su convenzioni e metaprogrammazione. I metodi vengono generati da `attr_accessor`, le classi vengono riaperte in altri file e i namespace annidano moduli su più livelli. La superficie leggibile nasconde quale metodo raggiunge davvero una chiamata, e una ricerca testuale grezza restituisce ogni `call` e ogni `perform` dell'app.

Maguyva fornisce all'agente classi, moduli, metodi e i loro chiamanti come struttura, così può seguire una modifica attraverso l'app invece di tirare a indovinare.

## Cosa estrae Maguyva in Ruby

Maguyva copre i file `.rb`, `.rbw`, `.rake` e `.gemspec`, oltre a `Gemfile` e `Rakefile`. Vengono estratti metodi di istanza e metodi singleton (`def self.call`), con i metodi singleton contrassegnati come statici. Le dichiarazioni `attr_reader`, `attr_writer` e `attr_accessor` contano come metodi di accesso, e i simboli sono qualificati dal namespace di modulo e classe.

`ClassName.new` e `Namespace::ClassName.new` contano come istanziazione, e la tipizzazione dei receiver segue le assegnazioni locali e le `@instance_variables`, così una chiamata su un oggetto assegnato può essere risolta nella sua classe. Il grafo registra anche ereditarietà, inclusione di moduli, override, archi `raise` e `rescue`, e letture e scritture.

Le chiamate di metaprogrammazione (`define_method`, `send`, `method_missing`, `class_eval` e simili), gli helper di tipo `T::` di Sorbet e le chiamate enumerabili comuni (`each`, `collect`, `reject` e simili) vengono filtrati dalle relazioni, così il codice applicativo risalta.

## Esempi di prompt per agenti

- "Chi chiama `Billing::ChargeCustomer.call` e da quali job e controller?" (`find_symbol`, poi `dependency_search` incoming)
- "Quali model ereditano da `ApplicationRecord` e includono `Auditable`?" (`dependency_search`)
- "Traccia cosa succede dopo che un ordine viene segnato come pagato." (`get_task_context`)

## Limiti noti

- In Ruby `require` e `load` sono normali chiamate di metodo, quindi il preset `imports` di `structural_search` non seleziona nulla. Usa `text_pattern_search` per elencarle.
- I metodi creati a runtime con `define_method` o gestiti da `method_missing` non vengono estratti come simboli, e quelle chiamate vengono filtrate come rumore di metaprogrammazione.
- Ruby non ha una sintassi per i decoratori, quindi le relazioni di decoratore sono contrassegnate come non applicabili.

## Prossimi passi

Collega un repository con la [guida rapida](/it/docs/quickstart), poi consulta la matrice di supporto nella [pagina di compatibilità](/it/docs/compatibility). Per altri repository in linguaggi dinamici, confrontalo con la [guida a Python](/it/languages/python).

## Dettagli del motore

- Il supporto a Ruby copre `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` e `Rakefile`. I metodi singleton sono contrassegnati come statici e le dichiarazioni `attr_*` contano come metodi di accesso.
- `ClassName.new` conta come istanziazione, e la tipizzazione dei receiver segue le assegnazioni locali e le variabili di istanza.
- Le chiamate di metaprogrammazione come `define_method` e `send`, gli helper `T::` di Sorbet e le chiamate enumerabili comuni vengono filtrati dalle relazioni.

## Punti di ingresso MCP utili

- `find_symbol`: Usalo con una classe, un modulo o un metodo con namespace, come `Billing::ChargeCustomer.call`.
- `dependency_search`: Usa la navigazione incoming su un model o un service object per vedere chiamanti e sottoclassi prima di una modifica.
- `text_pattern_search`: Usalo per i percorsi di `require`, le stringhe delle route e i metodi definiti dinamicamente che il grafo non vede.
