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, tapos tingnan ang support matrix sa compatibility page. Para sa iba pang dynamic-language na repository, ikumpara sa gabay sa Python.