# Maguyva में Ruby: Rails और Ruby ऐप के लिए कोड ग्राफ़

Canonical source: https://maguyva.ai/hi/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, Ruby को AST, सिंबल और ग्राफ़ के साथ सपोर्ट करता है, ताकि AI एजेंट Rails और Ruby कोडबेस में क्लास, मॉड्यूल, singleton मेथड और कंस्ट्रक्टर ट्रेस कर सकें।

## सपोर्ट स्नैपशॉट

- टियर: AST और सिंबल सपोर्ट
- प्रोग्रामिंग
- एक्सटेंशन: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- सिंटैक्स-अवेयर सर्च और स्ट्रक्चरल कॉन्टेक्स्ट के लिए असली AST पार्सिंग।
- नामित सिंबल सिमेंटिक लुकअप और क्रॉस-रेफ़रेंस को फ़ीड करते हैं। रिलेशनशिप एक्सट्रैक्शन सक्षम होने पर ग्राफ़ नेविगेशन उपलब्ध होता है।
- यह भाषा ग्राफ़-अवेयर सर्च में सिंबल्स और रिलेशनशिप्स जोड़ती है; सपोर्टेड एज प्रकार इसके नेटिव कंस्ट्रक्ट्स के अनुसार बदलते हैं।
- AST पार्सिंग और सिंबल एक्सट्रैक्शन, दोनों उपलब्ध हैं।

## सबसे उपयुक्त

- Rails मोनोलिथ, जहाँ मॉडल, सर्विस ऑब्जेक्ट, जॉब और concerns कई डायरेक्टरी में एक-दूसरे को कॉल करते हैं।
- गहरे मॉड्यूल namespace और साझा बेस क्लास वाले Ruby gems और सेवाएँ।
- वे टीमें, जो ऐसे model या सेवा को छूने से पहले AI एजेंट के साथ बदलाव का दायरा तय करना चाहती हैं, जिस पर आधा ऐप निर्भर है।

## एजेंट वर्कफ़्लो

- किसी service object या model मेथड का व्यवहार बदलने से पहले उसके हर कॉलर को ढूँढना।
- कोई क्लास `.new` से कहाँ बनती है और उसके बाद कौन-से मेथड चलते हैं, इसे ट्रेस करना।
- रीफ़ैक्टरिंग से पहले किसी बेस क्लास से इनहेरिट करने वाली या किसी मॉड्यूल को include करने वाली क्लास का नक्शा बनाना।

## Ruby रिपॉज़िटरी सतही AI टूल के लिए कठिन क्यों हैं

Ruby कन्वेंशन और मेटाप्रोग्रामिंग पर बहुत निर्भर है। मेथड `attr_accessor` से बनते हैं, क्लास दूसरी फ़ाइलों में फिर से खुलती हैं, और namespace मॉड्यूल को कई स्तरों तक नेस्ट करते हैं। पढ़ने में आसान सतह यह छिपा देती है कि कोई कॉल असल में किस मेथड तक पहुँचता है, और मोटा टेक्स्ट सर्च ऐप का हर `call` और हर `perform` लौटा देता है।

Maguyva एजेंट को क्लास, मॉड्यूल, मेथड और उनके कॉलर संरचना के रूप में देता है, ताकि वह अंदाज़ा लगाने के बजाय बदलाव को पूरे ऐप में फ़ॉलो कर सके।

## Maguyva, Ruby से क्या निकालता है

Maguyva `.rb`, `.rbw`, `.rake` और `.gemspec` फ़ाइलों के साथ `Gemfile` और `Rakefile` को कवर करता है। इंस्टेंस मेथड और singleton मेथड (`def self.call`) निकाले जाते हैं, और singleton मेथड static के रूप में चिह्नित होते हैं। `attr_reader`, `attr_writer` और `attr_accessor` घोषणाएँ एक्सेसर मेथड गिनी जाती हैं, और सिंबल अपने मॉड्यूल और क्लास namespace से क्वालिफ़ाई होते हैं।

`ClassName.new` और `Namespace::ClassName.new` इंस्टैंशिएशन गिने जाते हैं, और रिसीवर टाइपिंग लोकल असाइनमेंट और `@instance_variables` को फ़ॉलो करती है, ताकि किसी असाइन किए गए ऑब्जेक्ट पर हुआ कॉल उसकी क्लास तक रिज़ॉल्व हो सके। ग्राफ़ इनहेरिटेंस, मॉड्यूल include, ओवरराइड, `raise` और `rescue` एज, और रीड और राइट भी दर्ज करता है।

मेटाप्रोग्रामिंग कॉल (`define_method`, `send`, `method_missing`, `class_eval` और इसी तरह के), Sorbet के `T::` type हेल्पर, और आम Enumerable कॉल (`each`, `collect`, `reject` और इसी तरह के) संबंधों से फ़िल्टर किए जाते हैं, ताकि ऐप्लिकेशन कोड अलग दिखे।

## एजेंट प्रॉम्प्ट के उदाहरण

- "`Billing::ChargeCustomer.call` को कौन कॉल करता है, और किन जॉब और कंट्रोलर से?" (`find_symbol`, फिर incoming दिशा में `dependency_search`)
- "कौन-से मॉडल `ApplicationRecord` से इनहेरिट करते हैं और `Auditable` को include करते हैं?" (`dependency_search`)
- "ऑर्डर को भुगतान हो चुका के रूप में चिह्नित करने के बाद क्या होता है, इसे ट्रेस करो।" (`get_task_context`)

## ज्ञात सीमाएँ

- Ruby में `require` और `load` साधारण मेथड कॉल हैं, इसलिए `structural_search` में `imports` प्रीसेट कुछ नहीं चुनता। इनकी सूची के लिए `text_pattern_search` इस्तेमाल करें।
- रनटाइम पर `define_method` से बने या `method_missing` द्वारा संभाले गए मेथड सिंबल के रूप में नहीं निकाले जाते, और ये कॉल मेटाप्रोग्रामिंग शोर के रूप में फ़िल्टर किए जाते हैं।
- Ruby में डेकोरेटर सिंटैक्स नहीं है, इसलिए डेकोरेटर संबंध लागू नहीं के रूप में चिह्नित हैं।

## अगले कदम

[क्विकस्टार्ट](/hi/docs/quickstart) से रिपॉज़िटरी जोड़ें, फिर सपोर्ट मैट्रिक्स [कम्पैटिबिलिटी पेज](/hi/docs/compatibility) पर देखें। दूसरी डायनेमिक भाषाओं के रिपॉज़िटरी के लिए [Python गाइड](/hi/languages/python) से तुलना करें।

## इंजन विवरण

- Ruby सपोर्ट `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` और `Rakefile` को कवर करता है। Singleton मेथड static के रूप में चिह्नित होते हैं, और `attr_*` घोषणाएँ एक्सेसर मेथड गिनी जाती हैं।
- `ClassName.new` इंस्टैंशिएशन गिना जाता है, और रिसीवर टाइपिंग लोकल असाइनमेंट और इंस्टेंस वेरिएबल को फ़ॉलो करती है।
- `define_method` और `send` जैसे मेटाप्रोग्रामिंग कॉल, Sorbet के `T::` हेल्पर और आम Enumerable कॉल संबंधों से फ़िल्टर किए जाते हैं।

## उपयोगी MCP एंट्री पॉइंट

- `find_symbol`: `Billing::ChargeCustomer.call` जैसे नेमस्पेस वाले क्लास, मॉड्यूल या मेथड के लिए इस्तेमाल करें।
- `dependency_search`: बदलाव से पहले कॉलर और सबक्लास देखने के लिए किसी model या service ऑब्जेक्ट पर incoming ट्रैवर्सल इस्तेमाल करें।
- `text_pattern_search`: `require` पाथ, रूट स्ट्रिंग और डायनेमिक रूप से परिभाषित मेथड के लिए इस्तेमाल करें, जिन्हें ग्राफ़ नहीं देख सकता।
