# Ruby sa Maguyva: mga code graph para sa Rails at Ruby app

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

Sinusuportahan ng Maguyva ang Ruby gamit ang AST, mga symbol at graph, para ma-trace ng mga AI agent ang mga class, module, singleton method at constructor sa mga Rails at Ruby codebase.

## Snapshot ng support

- Antas: Support para sa AST at mga simbolo
- Programming
- Mga extension: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Tunay na AST parsing para sa syntax-aware search at structural context.
- Pinapagana ng mga named symbol ang semantic lookup at cross-reference. Available ang graph navigation kapag naka-enable ang pagkuha ng mga ugnayan.
- Nag-aambag ang wikang ito ng mga simbolo at ugnayan sa graph-aware search; nag-iiba ang mga sinusuportahang uri ng edge ayon sa mga native construct nito.
- Available ang AST parsing at symbol extraction.

## Pinakabagay

- Mga Rails monolith kung saan nagtatawagan ang mga model, service object, job at concern sa maraming directory.
- Mga Ruby gem at service na may malalim na module namespace at mga shared base class.
- Mga team na gustong i-scope ang isang pagbabago kasama ang AI agent bago hawakan ang isang model o service na inaasahan ng kalahati ng app.

## Mga workflow ng agent

- Hanapin ang bawat tumatawag sa isang service object o model method bago magbago ang behavior nito.
- I-trace kung saan ginagawa ang isang class gamit ang `.new` at kung aling mga method ang tumatakbo pagkatapos.
- I-map ang mga class na nagmamana mula sa isang base class o nag-i-include ng isang module bago mag-refactor.

## Bakit pinapahirapan ng mga Ruby repository ang mababaw na AI tool

Malaki ang pag-asa ng Ruby sa convention at metaprogramming. Ginagawa ang mga method ng `attr_accessor`, binubuksan muli ang mga class sa ibang file, at nilalagay ng mga namespace ang mga module sa iba't ibang level. Itinatago ng madaling basahing surface kung aling method talaga ang naaabot ng isang call, at ibinabalik ng magaspang na text search ang bawat `call` at bawat `perform` sa app.

Ibinibigay ng Maguyva sa agent ang mga class, module, method at mga tumatawag sa kanila bilang structure, para masundan nito ang isang pagbabago sa buong app sa halip na manghula.

## Ano ang kinukuha ng Maguyva mula sa Ruby

Sakop ng Maguyva ang mga `.rb`, `.rbw`, `.rake` at `.gemspec` file, pati ang `Gemfile` at `Rakefile`. Kinukuha ang mga instance method at singleton method (`def self.call`), at minamarkahang static ang mga singleton method. Binibilang na accessor method ang mga `attr_reader`, `attr_writer` at `attr_accessor` declaration, at kina-qualify ang mga symbol sa module at class namespace nila.

Itinuturing na instantiation ang `ClassName.new` at `Namespace::ClassName.new`, at sinusundan ng receiver typing ang mga local assignment at `@instance_variables`, kaya nare-resolve sa class nito ang call sa isang na-assign na object. Itinatala rin ng graph ang inheritance, module include, override, mga `raise` at `rescue` edge, at read at write.

Nifi-filter mula sa mga relationship ang mga metaprogramming call (`define_method`, `send`, `method_missing`, `class_eval` at mga katulad nito), ang mga Sorbet `T::` type helper, at mga karaniwang Enumerable call (`each`, `collect`, `reject` at mga katulad nito), para lumitaw ang application code.

## Mga halimbawang agent prompt

- "Sino ang tumatawag sa `Billing::ChargeCustomer.call`, at mula sa aling mga job at controller?" (`find_symbol`, tapos `dependency_search` na incoming)
- "Aling mga model ang nagmamana mula sa `ApplicationRecord` at nag-i-include ng `Auditable`?" (`dependency_search`)
- "I-trace kung ano ang nangyayari pagkatapos markahang bayad na ang isang order." (`get_task_context`)

## Mga kilalang limitasyon

- Sa Ruby, ordinaryong method call lang ang `require` at `load`, kaya walang pinipili ang `imports` preset sa `structural_search`. Gamitin ang `text_pattern_search` para ilista ang mga ito.
- Hindi kinukuha bilang symbol ang mga method na ginawa sa runtime gamit ang `define_method` o hina-handle ng `method_missing`, at nifi-filter ang mga call na iyon bilang metaprogramming noise.
- Walang decorator syntax ang Ruby, kaya minarkahang hindi applicable ang mga decorator relationship.

## Mga susunod na hakbang

Mag-connect ng repository gamit ang [quickstart](/fil/docs/quickstart), tapos tingnan ang support matrix sa [compatibility page](/fil/docs/compatibility). Para sa iba pang dynamic-language na repository, ikumpara sa [gabay sa Python](/fil/languages/python).

## Mga detalye ng engine

- Sakop ng Ruby support ang `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` at `Rakefile`. Minarkahang static ang mga singleton method, at binibilang na accessor method ang mga `attr_*` declaration.
- Itinuturing na instantiation ang `ClassName.new`, at sinusundan ng receiver typing ang mga local assignment at instance variable.
- Nifi-filter mula sa mga relationship ang mga metaprogramming call tulad ng `define_method` at `send`, ang mga Sorbet `T::` helper, at mga karaniwang Enumerable call.

## Mga kapaki-pakinabang na MCP entry point

- `find_symbol`: Gamitin para sa isang namespaced na class, module o method tulad ng `Billing::ChargeCustomer.call`.
- `dependency_search`: Bago magbago, gumamit ng incoming traversal sa isang model o service object para makita ang mga tumatawag at subclass.
- `text_pattern_search`: Gamitin para sa mga `require` path, route string at mga dynamic na naka-define na method na hindi nakikita ng graph.
