# Ruby στο Maguyva: γράφοι κώδικα για Rails και εφαρμογές Ruby

Canonical source: https://maguyva.ai/el/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 να παρακολουθούν κλάσεις, αρθρώματα, singleton μεθόδους και κατασκευαστές σε βάσεις κώδικα Rails και Ruby.

## Στιγμιότυπο υποστήριξης

- Επίπεδο: Υποστήριξη AST και συμβόλων
- Προγραμματισμός
- Επεκτάσεις: .gemfile, .gemspec, .rake, .rakefile, .rb, .rbw
- Πραγματική ανάλυση AST για αναζήτηση με επίγνωση σύνταξης και δομικό πλαίσιο.
- Τα επώνυμα σύμβολα τροφοδοτούν τη σημασιολογική αναζήτηση και τη διασταύρωση αναφορών. Η πλοήγηση στον γράφο είναι διαθέσιμη όταν είναι ενεργοποιημένη η εξαγωγή σχέσεων.
- Αυτή η γλώσσα συνεισφέρει σύμβολα και σχέσεις στην αναζήτηση με επίγνωση του γράφου· οι υποστηριζόμενοι τύποι ακμών διαφέρουν ανάλογα με τις εγγενείς δομές της.
- Διατίθενται τόσο ανάλυση AST όσο και εξαγωγή συμβόλων.

## Ιδανική χρήση

- Μονόλιθοι Rails όπου μοντέλα, αντικείμενα υπηρεσιών, εργασίες και concerns καλούν το ένα το άλλο σε πολλούς καταλόγους.
- Gems και υπηρεσίες Ruby με αρθρώματα σε βαθιά ένθετους χώρους ονομάτων και κοινές βασικές κλάσεις.
- Ομάδες που θέλουν να οριοθετήσουν μια αλλαγή με έναν πράκτορα AI πριν αγγίξουν ένα model ή μια υπηρεσία από την οποία εξαρτάται η μισή εφαρμογή.

## Ροές εργασίας πρακτόρων

- Εύρεση όλων όσων καλούν ένα service object ή μια μέθοδο model πριν αλλάξει η συμπεριφορά τους.
- Εντοπισμός του σημείου όπου μια κλάση δημιουργείται με `.new` και των μεθόδων που εκτελούνται στη συνέχεια.
- Χαρτογράφηση των κλάσεων που κληρονομούν από μια βασική κλάση ή συμπεριλαμβάνουν ένα module πριν από μια αναδιαμόρφωση.

## Γιατί τα αποθετήρια Ruby δυσκολεύουν τα επιφανειακά εργαλεία AI

Η 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` μετρούν ως μέθοδοι πρόσβασης και τα σύμβολα προσδιορίζονται από το namespace του αρθρώματος και της κλάσης τους.

Τα `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` incoming)
- «Ποια μοντέλα κληρονομούν από το `ApplicationRecord` και συμπεριλαμβάνουν το `Auditable`;» (`dependency_search`)
- «Παρακολούθησε τι συμβαίνει αφού μια παραγγελία σημειωθεί ως πληρωμένη.» (`get_task_context`)

## Γνωστοί περιορισμοί

- Στη Ruby, τα `require` και `load` είναι απλές κλήσεις μεθόδων, οπότε η προεπιλογή `imports` στο `structural_search` δεν επιλέγει τίποτα. Για να τα απαριθμήσετε, χρησιμοποιήστε το `text_pattern_search`.
- Οι μέθοδοι που δημιουργούνται κατά την εκτέλεση με `define_method` ή που χειρίζεται το `method_missing` δεν εξάγονται ως σύμβολα, και αυτές οι κλήσεις φιλτράρονται ως θόρυβος μεταπρογραμματισμού.
- Η Ruby δεν έχει σύνταξη διακοσμητών, οπότε οι σχέσεις διακοσμητών σημειώνονται ως μη εφαρμόσιμες.

## Επόμενα βήματα

Συνδέστε ένα αποθετήριο με τον [γρήγορο οδηγό εκκίνησης](/el/docs/quickstart) και έπειτα δείτε τον πίνακα υποστήριξης στη [σελίδα συμβατότητας](/el/docs/compatibility). Για άλλα αποθετήρια σε δυναμικές γλώσσες, συγκρίνετε με τον [οδηγό για την Python](/el/languages/python).

## Λεπτομέρειες μηχανής

- Η υποστήριξη Ruby καλύπτει `.rb`, `.rbw`, `.rake`, `.gemspec`, `Gemfile` και `Rakefile`. Οι singleton μέθοδοι σημειώνονται ως static και οι δηλώσεις `attr_*` μετρούν ως μέθοδοι πρόσβασης.
- Το `ClassName.new` μετρά ως δημιουργία στιγμιοτύπου και η τυποποίηση δεκτών ακολουθεί τις τοπικές αναθέσεις και τις μεταβλητές στιγμιοτύπου.
- Οι κλήσεις μεταπρογραμματισμού όπως `define_method` και `send`, οι βοηθοί `T::` του Sorbet και οι συνηθισμένες κλήσεις Enumerable φιλτράρονται από τις σχέσεις.

## Χρήσιμα σημεία εισόδου MCP

- `find_symbol`: Χρησιμοποιήστε το για μια κλάση, ένα άρθρωμα ή μια μέθοδο με namespace, όπως `Billing::ChargeCustomer.call`.
- `dependency_search`: Πριν από μια αλλαγή, χρησιμοποιήστε διάσχιση incoming σε ένα model ή service object για να δείτε καλούντες και υποκλάσεις.
- `text_pattern_search`: Χρησιμοποιήστε το για διαδρομές `require`, συμβολοσειρές διαδρομών και δυναμικά ορισμένες μεθόδους που ο γράφος δεν βλέπει.
