# Ruby no Maguyva: grafos de código para Rails e apps Ruby

Canonical source: https://maguyva.ai/pt-br/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).

O Maguyva oferece suporte a Ruby com AST, símbolos e grafo, para que agentes de IA sigam classes, módulos, métodos singleton e construtores em bases Rails e Ruby.

## Panorama de suporte

- Nível: Suporte a AST e símbolos
- Programação
- Extensões: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Parsing real de AST para busca com consciência de sintaxe e contexto estrutural.
- Símbolos nomeados alimentam a busca semântica e as referências cruzadas. A navegação por grafo fica disponível quando a extração de relações está habilitada.
- Esta linguagem fornece símbolos e relações para a busca orientada por grafo; os tipos de aresta compatíveis variam de acordo com seus construtos nativos.
- A análise de AST e a extração de símbolos estão disponíveis.

## Uso ideal

- Monólitos Rails em que models, service objects, jobs e concerns se chamam através de muitos diretórios.
- Gems e serviços Ruby com namespaces de módulos profundos e classes base compartilhadas.
- Equipes que querem delimitar uma mudança com um agente de IA antes de mexer em um model ou serviço do qual metade do app depende.

## Fluxos de trabalho de agente

- Encontrar todos os chamadores de um service object ou método de model antes de mudar seu comportamento.
- Rastrear onde uma classe é instanciada com `.new` e quais métodos rodam em seguida.
- Mapear quais classes herdam de uma classe base ou incluem um módulo antes de uma refatoração.

## Por que repositórios Ruby complicam ferramentas de IA superficiais

Ruby se apoia em convenções e metaprogramação. Métodos são gerados por `attr_accessor`, classes são reabertas em outros arquivos, e namespaces aninham vários módulos. A superfície legível esconde qual método uma chamada realmente alcança, e uma busca textual bruta devolve cada `call` e cada `perform` do app.

O Maguyva entrega ao agente classes, módulos, métodos e seus chamadores como estrutura, para que ele siga uma mudança pelo app em vez de adivinhar.

## O que o Maguyva extrai em Ruby

O Maguyva cobre arquivos `.rb`, `.rbw`, `.rake` e `.gemspec`, além de `Gemfile` e `Rakefile`. Métodos de instância e métodos singleton (`def self.call`) são extraídos, e os métodos singleton são marcados como estáticos. Declarações `attr_reader`, `attr_writer` e `attr_accessor` contam como métodos de acesso, e os símbolos são qualificados pelo namespace de módulo e classe.

`ClassName.new` e `Namespace::ClassName.new` contam como instanciação, e a tipagem de receivers segue atribuições locais e `@instance_variables`, de modo que uma chamada em um objeto atribuído pode ser resolvida para a sua classe. O grafo também registra herança, inclusão de módulos, sobrescritas, arestas de `raise` e `rescue`, e leituras e escritas.

Chamadas de metaprogramação (`define_method`, `send`, `method_missing`, `class_eval` e semelhantes), os helpers de tipo `T::` do Sorbet e chamadas enumeráveis comuns (`each`, `collect`, `reject` e semelhantes) são filtrados das relações para que o código da aplicação se destaque.

## Exemplos de prompts para agentes

- "Quem chama `Billing::ChargeCustomer.call` e a partir de quais jobs e controllers?" (`find_symbol`, depois `dependency_search` incoming)
- "Quais models herdam de `ApplicationRecord` e incluem `Auditable`?" (`dependency_search`)
- "Rastreie o que acontece depois que um pedido é marcado como pago." (`get_task_context`)

## Limitações conhecidas

- Em Ruby, `require` e `load` são chamadas de método comuns, então o preset `imports` de `structural_search` não seleciona nada. Use `text_pattern_search` para listá-las.
- Métodos criados em tempo de execução com `define_method` ou tratados por `method_missing` não são extraídos como símbolos, e essas chamadas são filtradas como ruído de metaprogramação.
- Ruby não tem sintaxe de decorators, então relações de decorator estão marcadas como não aplicáveis.

## Próximos passos

Conecte um repositório pelo [início rápido](/pt-br/docs/quickstart) e depois confira a matriz de suporte na [página de compatibilidade](/pt-br/docs/compatibility). Para outros repositórios em linguagens dinâmicas, compare com o [guia de Python](/pt-br/languages/python).

## Detalhes do motor

- O suporte a Ruby cobre `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` e `Rakefile`. Métodos singleton são marcados como estáticos, e declarações `attr_*` contam como métodos de acesso.
- `ClassName.new` conta como instanciação, e a tipagem de receivers segue atribuições locais e variáveis de instância.
- Chamadas de metaprogramação como `define_method` e `send`, os helpers `T::` do Sorbet e chamadas enumeráveis comuns são filtrados das relações.

## Pontos de entrada MCP úteis

- `find_symbol`: Use com uma classe, módulo ou método com namespace, como `Billing::ChargeCustomer.call`.
- `dependency_search`: Use a travessia incoming em um model ou service object para ver chamadores e subclasses antes de uma mudança.
- `text_pattern_search`: Use para caminhos de `require`, strings de rotas e métodos definidos dinamicamente que o grafo não enxerga.
