# لغة Ruby في Maguyva: رسوم بيانية للشيفرة في Rails وتطبيقات Ruby

Canonical source: https://maguyva.ai/ar/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 والرموز والرسم البياني، ليتمكن وكلاء الذكاء الاصطناعي من تتبّع الفئات والوحدات وأساليب singleton والمُنشئات في قواعد شيفرة Rails وRuby.

## لمحة عن الدعم

- المستوى: دعم AST والرموز
- البرمجة
- الامتدادات: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- تحليل AST حقيقي لبحث واعٍ بالصياغة النحوية وسياق بنيوي.
- تُغذّي الرموز المسمّاة البحث الدلالي والمراجع المتقاطعة. ويتوفر التنقل عبر الرسم البياني عند تمكين استخراج العلاقات.
- تُسهم هذه اللغة بالرموز والعلاقات في البحث المراعي لبنية الرسم البياني؛ وتختلف أنواع الحواف المدعومة بحسب التراكيب الأصلية في اللغة.
- يتوفر كل من تحليل AST واستخلاص الرموز.

## الأنسب لـ

- تطبيقات Rails الأحادية حيث تستدعي النماذج وservice objects والمهام وconcerns بعضها بعضًا عبر أدلة كثيرة.
- حزم gem وخدمات Ruby ذات نطاقات أسماء وحدات عميقة وفئات أساسية مشتركة.
- الفرق التي تريد تحديد نطاق تغيير مع وكيل ذكاء اصطناعي قبل أن تمسّ نموذجًا أو خدمة يعتمد عليها نصف التطبيق.

## سير عمل الوكلاء

- العثور على كل من يستدعي service object أو أسلوب نموذج قبل تغيير سلوكه.
- تتبّع موضع إنشاء فئة عبر `.new` والأساليب التي تُنفَّذ بعد ذلك.
- رسم خريطة الفئات التي ترث من فئة أساسية أو تضمّن وحدة قبل إعادة الهيكلة.

## لماذا تُتعب مستودعات Ruby أدوات الذكاء الاصطناعي السطحية

تعتمد Ruby كثيرًا على الاصطلاحات والبرمجة الوصفية. تُولَّد الأساليب عبر `attr_accessor`، وتُعاد فتح الفئات في ملفات أخرى، وتتداخل الوحدات في نطاقات الأسماء على مستويات عدة. يُخفي السطح المقروء الأسلوبَ الذي ينتهي إليه الاستدعاء فعلًا، ويُرجع البحث النصي الخشن كل `call` وكل `perform` في التطبيق.

يمنح Maguyva الوكيل الفئات والوحدات والأساليب ومستدعيها على هيئة بنية، ليتتبّع التغيير عبر التطبيق بدل التخمين.

## ما الذي يستخرجه Maguyva من Ruby

يغطي Maguyva الملفات `.rb` و`.rbw` و`.rake` و`.gemspec`، إضافة إلى `Gemfile` و`Rakefile`. تُستخرج أساليب المثيلات وأساليب singleton (`def self.call`)، وتُعلَّم أساليب singleton بأنها static. وتُعدّ تصريحات `attr_reader` و`attr_writer` و`attr_accessor` أساليبَ وصول، وتُؤهَّل الرموز بنطاق اسم الوحدة والفئة.

يُعدّ `ClassName.new` و`Namespace::ClassName.new` إنشاءً لمثيلات، ويتتبّع تحديد نوع المستقبِل الإسنادات المحلية و`@instance_variables`، فيمكن أن يُحَلّ الاستدعاء على كائن مُسنَد إلى فئته. ويسجّل الرسم البياني أيضًا الوراثة وتضمين الوحدات والتجاوزات وحواف `raise` و`rescue` والقراءات والكتابات.

يُستبعد من العلاقات استدعاءات البرمجة الوصفية (`define_method` و`send` و`method_missing` و`class_eval` وما شابهها)، ومساعدات الأنواع `T::` في Sorbet، واستدعاءات Enumerable الشائعة (`each` و`collect` و`reject` وما شابهها)، لتبرز شيفرة التطبيق.

## أمثلة على مطالبات الوكلاء

- "من يستدعي `Billing::ChargeCustomer.call`، ومن أي مهام ووحدات تحكّم؟" (`find_symbol` ثم `dependency_search` في الاتجاه الوارد)
- "ما النماذج التي ترث من `ApplicationRecord` وتضمّن `Auditable`؟" (`dependency_search`)
- "تتبّع ما يحدث بعد تعليم طلب بأنه مدفوع." (`get_task_context`)

## القيود المعروفة

- في Ruby تكون `require` و`load` استدعاءات أساليب عادية، لذا لا يختار الإعداد المسبق `imports` في `structural_search` أي شيء. استخدم `text_pattern_search` لسردها.
- الأساليب المُنشأة وقت التشغيل عبر `define_method` أو التي يعالجها `method_missing` لا تُستخرج رموزًا، وتُستبعد هذه الاستدعاءات بوصفها ضجيج برمجة وصفية.
- لا تملك Ruby صياغة للمزخرفات، لذا تُعلَّم علاقات المزخرفات بأنها غير منطبقة.

## الخطوات التالية

اربط مستودعًا عبر [دليل البدء السريع](/ar/docs/quickstart)، ثم راجع مصفوفة الدعم في [صفحة التوافق](/ar/docs/compatibility). ولمستودعات اللغات الديناميكية الأخرى، قارن مع [دليل لغة Python](/ar/languages/python).

## تفاصيل المحرك

- يغطي دعم Ruby الملفات `.rb` و`.rbw` و`.rake` و`.gemspec` و`Gemfile` و`Rakefile`. تُعلَّم أساليب singleton بأنها static، وتُعدّ تصريحات `attr_*` أساليبَ وصول.
- يُعدّ `ClassName.new` إنشاءً لمثيل، ويتتبّع تحديد نوع المستقبِل الإسنادات المحلية ومتغيرات المثيل.
- يُستبعد من العلاقات استدعاءات البرمجة الوصفية مثل `define_method` و`send`، ومساعدات `T::` في Sorbet، واستدعاءات Enumerable الشائعة.

## نقاط دخول مفيدة عبر MCP

- `find_symbol`: استخدمه لفئة أو وحدة أو أسلوب ضمن نطاق أسماء، مثل `Billing::ChargeCustomer.call`.
- `dependency_search`: قبل أي تغيير، استخدم التتبّع في الاتجاه الوارد على نموذج أو service object لرؤية المستدعين والفئات الفرعية.
- `text_pattern_search`: استخدمه لمسارات `require` وسلاسل المسارات والأساليب المعرّفة ديناميكيًا التي لا يراها الرسم البياني.
