# Ruby in Maguyva: Code-Graphen für Rails- und Ruby-Apps

Canonical source: https://maguyva.ai/de/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 unterstützt Ruby mit AST, Symbolen und Graph, damit KI-Agenten Klassen, Module, Singleton-Methoden und Konstruktoraufrufe in Rails- und Ruby-Codebasen verfolgen.

## Unterstützungsüberblick

- Stufe: AST- und Symbol-Support
- Programmierung
- Dateiendungen: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Echtes AST-Parsing für syntaxbewusste Suche und strukturellen Kontext.
- Benannte Symbole speisen semantisches Lookup und Cross-Referenzierung. Graph-Navigation ist verfügbar, wenn die Beziehungsextraktion aktiviert ist.
- Diese Sprache liefert Symbole und Beziehungen für die graphgestützte Suche; die unterstützten Kantentypen variieren je nach nativen Konstrukten der Sprache.
- AST-Parsing und Symbolextraktion sind beide verfügbar.

## Am besten geeignet

- Rails-Monolithen, in denen Models, Service-Objekte, Jobs und Concerns sich über viele Verzeichnisse hinweg aufrufen.
- Gems und Ruby-Dienste mit tief verschachtelten Modul-Namespaces und gemeinsamen Basisklassen.
- Teams, die mit KI-Agenten eine Änderung eingrenzen wollen, bevor sie ein Model oder einen Dienst anfassen, von dem die halbe App abhängt.

## Agentenabläufe

- Jeden Aufrufer eines Service-Objekts oder einer Model-Methode finden, bevor sich ihr Verhalten ändert.
- Nachverfolgen, wo eine Klasse mit `.new` instanziiert wird und welche Methoden danach laufen.
- Vor einem Refactoring erfassen, welche Klassen von einer Basisklasse erben oder ein Modul einbinden.

## Warum Ruby-Repositories oberflächlichen KI-Tools schwerfallen

Ruby setzt stark auf Konventionen und Metaprogrammierung. Methoden entstehen durch `attr_accessor`, Klassen werden in anderen Dateien wieder geöffnet, und Namespaces verschachteln mehrere Module tief. Die gut lesbare Oberfläche verbirgt, welche Methode ein Aufruf tatsächlich erreicht, und eine stumpfe Textsuche liefert jedes `call` und `perform` der App.

Maguyva gibt einem Agenten Klassen, Module, Methoden und ihre Aufrufer als Struktur, damit er eine Änderung durch die App verfolgen kann, statt zu raten.

## Was Maguyva in Ruby extrahiert

Maguyva deckt `.rb`-, `.rbw`-, `.rake`- und `.gemspec`-Dateien sowie `Gemfile` und `Rakefile` ab. Instanzmethoden und Singleton-Methoden (`def self.call`) werden extrahiert, wobei Singleton-Methoden als statisch markiert werden. `attr_reader`-, `attr_writer`- und `attr_accessor`-Deklarationen zählen als Accessor-Methoden, und Symbole werden mit ihrem Modul- und Klassen-Namespace qualifiziert.

`ClassName.new` und `Namespace::ClassName.new` zählen als Instanziierung, und die Receiver-Typisierung folgt lokalen Zuweisungen und `@instance_variables`, sodass ein Aufruf auf einem zugewiesenen Objekt zu seiner Klasse aufgelöst werden kann. Der Graph erfasst außerdem Vererbung, Modul-Einbindung, Overrides, `raise`- und `rescue`-Kanten sowie Lese- und Schreibzugriffe.

Metaprogrammierungs-Aufrufe (`define_method`, `send`, `method_missing`, `class_eval` und ähnliche), Sorbets `T::`-Typhelfer und gängige Enumerable-Aufrufe (`each`, `collect`, `reject` und ähnliche) werden aus den Beziehungen gefiltert, damit der Anwendungscode hervortritt.

## Beispiel-Prompts für Agenten

- „Wer ruft `Billing::ChargeCustomer.call` auf, und aus welchen Jobs und Controllern?“ (`find_symbol`, dann `dependency_search` incoming)
- „Welche Models erben von `ApplicationRecord` und binden `Auditable` ein?“ (`dependency_search`)
- „Verfolge, was passiert, nachdem eine Bestellung als bezahlt markiert wurde.“ (`get_task_context`)

## Bekannte Grenzen

- `require` und `load` sind in Ruby gewöhnliche Methodenaufrufe, daher wählt das Preset `imports` in `structural_search` nichts aus. Verwende `text_pattern_search`, um sie aufzulisten.
- Methoden, die zur Laufzeit mit `define_method` erzeugt oder von `method_missing` behandelt werden, werden nicht als Symbole extrahiert, und diese Aufrufe werden als Metaprogrammierungs-Rauschen gefiltert.
- Ruby hat keine Decorator-Syntax, daher sind Decorator-Beziehungen als nicht anwendbar markiert.

## Nächste Schritte

Verbinde ein Repository über den [Schnellstart](/de/docs/quickstart) und prüfe dann die Unterstützungsmatrix auf der [Kompatibilitätsseite](/de/docs/compatibility). Für andere Repositories in dynamischen Sprachen vergleiche mit dem [Python-Leitfaden](/de/languages/python).

## Engine-Einordnung

- Die Ruby-Unterstützung deckt `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` und `Rakefile` ab. Singleton-Methoden werden als statisch markiert, und `attr_*`-Deklarationen zählen als Accessor-Methoden.
- `ClassName.new` zählt als Instanziierung, und die Receiver-Typisierung folgt lokalen Zuweisungen und Instanzvariablen.
- Metaprogrammierungs-Aufrufe wie `define_method` und `send`, Sorbets `T::`-Helfer und gängige Enumerable-Aufrufe werden aus den Beziehungen gefiltert.

## Nützliche MCP-Einstiegspunkte

- `find_symbol`: Nutz es für eine Klasse, ein Modul oder eine Methode mit Namespace wie `Billing::ChargeCustomer.call`.
- `dependency_search`: Nutz vor einer Änderung die eingehende Traversierung auf einem Model oder Service-Objekt, um Aufrufer und Unterklassen zu sehen.
- `text_pattern_search`: Nutz es für `require`-Pfade, Routen-Strings und dynamisch definierte Methoden, die der Graph nicht sieht.
