Inhaltsverzeichnis.

00:10 – Generieren Sie ein Modell mit Run Anything.
01:30 – Code-Autovervollständigung.
02:35 – Go to definition.
04:06 – Kurzdokumentation.
04:36 – Postfix-Codevervollständigung.
05:22 – RuboCop-Integration & Intention-Aktionen (Quick-Fixes).
08:20 – Letzte/kürzlich bearbeitete Dateien anzeigen.
09:04 – RegExp-Checker.
09:58 – Dateistruktur-Popup.
10:39 – Codeformatierung & Codestil-Optionen.
12:10 – Go-To-Related-Symbol (zugehörige Rails-Entität).
12:40 – Navigieren Sie im Editor zwischen den Methoden.
12:51 – Refactoring: Extract Method.
14:15 – Refactoring: Rename.
15:50 – Mehrere Cursor.

Generieren Sie ein Modell mit Run Anything.

Jetzt erstellen wir ein neues Modell und fügen ihm einige Inhalte hinzu, um Ihnen die verschiedenen Codebearbeitungsmöglichkeiten von RubyMine zu zeigen. Zu Beginn drücke ich zweimal die Strg-Taste, um die Aktion Run Anything zu öffnen. Diese Aktion kann verwendet werden, um beliebige Konfigurationen, Skripte, Befehle, Rake-Aufgabe, Rails-Generatoren und sogar Konsolenbefehle auszuführen.

Ich kann einfach anfangen, indem ich etwas wie “rails g model” eintippe, oder stattdessen einfach “Model” einfüge, und RubyMine wird verstehen, dass ich nach einem Modellgenerator suche und ihn in der Vervollständigungsliste vorschlagen.

Ich drücke Enter und sehe den UI-Wrapper für den Modellgenerator. Derselbe, den Sie für den Controller, die Migration und andere Generatoren entdecken werden.

Hier kann ich den Namen meines Modells angeben, der Post sein wird, und seine Felder: content: text (jetzt, wie Sie sehen können, bietet RubyMine Code-Datenvervollständigung für Feldtypen). Die anderen Felder werden “picture: string” sein. Ich kann auch weitere Optionen angeben. Ich überspringe das und drücke OK.

Die IDE führt den Generator aus, öffnet das Toolfenster Run, zeigt mir das Ergebnis meines Befehls und erlaubt mir, in jeder erstellten Datei zu navigieren. Standardmäßig werden auch die Migrationsdatei und das Post-Modell im Editor geöffnet.

Ich schließe das Run-Toolfenster und bin nun bereit, meinem neu erstellten Modell einige Inhalte hinzuzufügen. Fügen wir nun ein paar Assoziationen hinzu. Zunächst einmal werden wir unseren Post über die Assoziation “belongs_to” zum Benutzer*in gehören lassen.

Code-Autovervollständigung.

Da RubyMine Ihre Anwendung bei jedem Start indiziert, stellt es Ihnen später eine Reihe von Code-Insight-Funktionen zur Verfügung, wie die Code-Autovervollständigung für Klassen, Methoden und andere Entitäten, die in Ihrer Anwendung oder in Ruby, Rails und anderen Gems deklariert sind.

So erhalten Sie also die Autovervollständigung für “belongs_to” insbesondere. Wir vervollständigen es automatisch. RubyMine ist auch schlau genug, um zu verstehen, dass wir hier nach einem Modell suchen. Tatsächlich suchen wir nach dem Benutzermodell, also vervollständigen wir es ebenfalls automatisch.

Die Beispiel-App verwendet das Gem carrierwave zum Hochladen von Bildern. Und um Bilder mit unserem Modell zu verknüpfen, müssen wir eine benutzerdefinierte Methode aus diesem Gem namens “mount_uploader” verwenden. Und wie Sie sehen können, da dieses Gem für unsere Anwendung installiert ist, schlägt RubyMine vor, auch diese Methode automatisch zu vervollständigen.

Die Code-Autovervollständigung ist nicht die einzige Code-Insight-Funktion von RubyMine. Eine der wichtigsten Funktionen von RubyMine ist die Möglichkeit, zur Definition einer beliebigen Entität zu navigieren, die innerhalb oder außerhalb der Anwendung deklariert wurde. Wir können zum Beispiel schnell zur Definition des Benutzermodells navigieren. Dazu fahren wir mit dem Mauszeiger über den Namen des Modells und drücken die Strg- oder Befehlstaste, je nach Betriebssystem, und klicken darauf.

Okay, jetzt sind wir in dem Modell und können auch hier eine Assoziation hinzufügen. Auf ähnliche Weise können wir zur Definition der Assoziation “belongs_to” navigieren. Jetzt sind wir also beim Active-Record-Gem, der Datei associations.rb. Lassen Sie mich Ihnen das im Project-Toolfenster zeigen.

Wir befinden uns also außerhalb unserer Anwendung und der externen Bibliotheken, Gem-Active-Record, der Datei associations.rb. Und ebenso können wir zu dieser Methode navigieren, die das Gem carrierwave ist, oder die Datei activerecord.rb, und so weiter und so fort.

Fügen wir nun eine Methode hinzu, die die Größe unseres Bildes überprüft und einen Fehler ausgibt, wenn das Bild zu groß ist. Wir nennen sie picture_size: “bild.größe > 5.megabytes”. Nun scheint es, dass ich hier zwei ähnlich aussehende Methoden habe. Wenn ich mir nicht sicher bin, welche soll ich verwenden? Anstatt nach jeder dieser Methoden zu googeln oder in der Dokumentation nachzuschauen, kann ich F1 drücken und die Kurzdokumentation für jede dieser Methoden direkt in der IDE sehen.

Also, die Methode megabytes gibt die Anzahl der Bytes zurück, die den angegebenen Megabytes entsprechen, und das ist die Methode, nach der ich suche. Und die zweite ist nur ein Alias für die erste, ich kann also jede dieser Methoden verwenden.

Postfix-Codevervollständigung.

Jetzt scheint es auch, dass ich vergessen habe, daraus eine if-Anweisung zu machen, aber anstatt im Code zurückzugehen, füge ich einfach einen Punkt (.) ein und gebe if ein, was mir erlaubt, diese Zeile mit einer if-Anweisung wie folgt zu umschließen: “if picture.size> 5.megabytes”. Diese Funktion wird “Postfix-Codevervollständigung” genannt und ermöglicht es Ihnen, Ihre Anweisungen zu ergänzen, zu ändern oder zu invertieren, ohne in den Code zurückzugehen.

Sie können die Liste aller Postfix-Codevorlagen in den Einstellungen sehen, sowohl mit JavaScript als auch mit Ruby. Sie können auch herausfinden, wie sie aussehen, und die gewünschten aktivieren und deaktivieren.

RuboCop-Integration & Intention-Aktionen (Quick-Fixes).

Okay, lassen Sie uns nun die Methode beenden. Aktivieren wir nun RuboCop wieder, um zu sehen, ob wir irgendwelche Code-Stil-Verletzungen in unserer Datei haben. Anscheinend haben wir ein paar Probleme. Um eine Fehlerbeschreibung in jeder Zeile zu sehen, können Sie in den rechten Teil des Editors gehen und zu jeder Markierung navigieren. Sie können auch den Mauszeiger über den markierten Text bewegen und dort die Fehlerbeschreibung sehen.

Schließlich, wenn Sie die Maus nicht benutzen wollen, können Sie einfach F2 drücken, um zu jedem nächsten Fehler in der Datei zu gehen, und dann einfach Cmd+F1 oder Strg+F1 drücken, um die Fehlerbeschreibung zu sehen.

In diesem speziellen Fall besteht das Problem darin, dass ich Strings in doppelten Anführungszeichen statt in einfachen Anführungszeichen verwende. Und um das mit RuboCop zu beheben, kann ich Alt+Enter drücken und alle RuboCop-Verstöße in der Datei korrigieren oder sie nach Verstoßtyp oder nach Cop-Abteilung korrigieren. Wir reparieren alle RuboCop-Verstöße in dieser Datei.

Perfekt. Dieses Problem verschwindet, aber wir haben noch ein paar Probleme übrig. Zunächst einmal haben wir hier eine mehrzeilige Anweisung statt einer einzeiligen. Leider bietet RuboCop dafür keinen Quick-Fix, RubyMine aber schon.

Um darauf zuzugreifen, drücken wir wieder Alt+Enter. Und wie Sie sehen, können wir die Anweisung in einen Modifikator umwandeln, was bedeutet, dass wir diese if-Anweisung zu einer einzeiligen Anweisung machen können. Drücken wir Enter, und wie Sie sehen können, verschwindet dieser Fehler.

Dennoch haben wir ein paar irritierende Probleme laut RuboCop. Zum einen ist diese Zeile nun zu lang. Ein weiteres Problem ist, dass wir keinen Dokumentationskommentar für unsere Klasse haben. Um diese Probleme zu beseitigen, legen wir eine zusätzliche RuboCop-Konfigurationsdatei an.

Dazu gehen wir in das Stammverzeichnis unseres Projekts und erstellen eine RuboCop-Konfigurationsdatei, .rubocop.yml. RubyMine fragt uns nun, ob wir die neue Datei zu Git hinzufügen wollen. Wir drücken erst einmal auf “Yes”, aber wir werden die VCS-Funktionen etwas später entdecken.

Fügen wir weitere Regeln hinzu, um die lästigen Probleme loszuwerden. Kehren wir zum Modell zurück. Ich speichere die Datei manuell, um die Änderungen schneller anzuwenden, und wie Sie sehen können, respektiert RubyMine die RuboCop-Konfigurationsdatei, so dass diese Fehler verschwinden.

Schauen wir mal, was RubyMine sonst noch für uns tun kann. Wahrscheinlich ist Ihnen übrigens aufgefallen, dass ich es irgendwie geschafft habe, alle Dateien zu schließen, aber nicht diejenige, die gerade im Editor geöffnet ist. Um das zu tun, fahren Sie mit dem Mauszeiger über die Registerkarte, halten Sie die Alt-Taste gedrückt und klicken Sie auf die Schaltfläche Close. Und jetzt sind Sie alle Dateien losgeworden, nur nicht diejenige, die gerade im Editor geöffnet ist. Aber ich schließe diese Datei jetzt auch, weil ich sie nicht mehr brauche. Und ich schließe auch das Project-Toolfenster.

Letzte/kürzlich bearbeitete Dateien anzeigen.

Jetzt möchte ich zu meinem Benutzermodell navigieren. Dazu kann ich ein weiteres praktisches Popup-Fenster verwenden, das Recent Files heißt. Das ist Cmd+E oder Strg+E, abhängig von Ihrem Betriebssystem. Damit können Sie zu den zuletzt geöffneten Dateien navigieren. Wie zu erwarten, funktioniert die Suche auch hier, so dass ich etwas Ähnliches tun kann, aber das Ergebnis ist ein ähnliches Popup, das Recently Edited Files heißt. Wie Sie sich erinnern, haben wir unser Benutzermodell zuvor bearbeitet, da wir dort eine Assoziation hinzugefügt haben. Wir können es also von hier aus öffnen.

RegExp-Checker.

Lassen Sie uns zunächst ein paar Dinge überarbeiten. Hier haben wir einige RuboCop-Probleme, die wir loswerden können. Und hier ist ein weiterer guter Fall für die Verwendung von Intention-Aktionen in RubyMine. Wir haben hier einen regulären Ausdruck, der prüft, ob ein*e Benutzer*in eine gültige E-Mail-Adresse angibt. Um diesen regulären Ausdruck zu prüfen, können wir wieder Alt+Enter drücken und Check RegExp wählen und einige Beispiele angeben. Dieser hier stimmt nicht überein. Dieser stimmt auch nicht überein. Wie wäre es mit etwas wie name@email.com? Okay. Der hier passt. Perfekt. So funktioniert es also.

Hier können wir auch den Klassennamen durch self ersetzen und auch diesen ternären Operator hier loswerden, der für mehrzeilige Anweisungen verwendet werden sollte. Machen wir also eine if/end-Anweisung daraus.

Dateistruktur-Popup.

Wir haben hier also ein etwas dickes Modell, und um schneller zwischen seinen Methoden zu navigieren, könnten wir das File Structure-Popup verwenden. Mit diesem Popup können Sie zwischen verschiedenen Methoden in einer Datei navigieren. Die Suche funktioniert hier auch. So können wir versuchen, einige unserer privaten Methoden auf diese Weise aufzurufen.

Wie Sie sehen können, haben wir einen zusätzlichen Einzug für unsere privaten Methoden. Standardmäßig betrachtet RuboCop dies als einen Verstoß gegen den Codestil, also habe ich meine Konfigurationsdatei bearbeitet, um diesen Verstoß loszuwerden. Der Grund dafür ist, dass viele Entwickler*innen es tatsächlich bevorzugen, ihre privaten und geschützten Methoden extra einzurücken.

Codeformatierung & Codestil-Optionen.

Was den Codestil angeht, so bietet RubyMine eine eingebaute Codeformatierung, der Ihren Code gemäß dem Ruby-Styleguide und gemäß einiger Optionen, die Sie in den Einstellungen anpassen können, umformatiert.

Um Ihren Code neu zu formatieren, können Sie zu Code| Reformat Code gehen oder ein Tastenkürzel verwenden. Und wie Sie sehen können, hat RubyMine unsere privaten Methoden neu formatiert und mit den restlichen Methoden in Einklang gebracht.

Übrigens, wenn Sie nur diese eine Methode auswählen und erneut die Aktion Reformat drücken, formatiert RubyMine nur diese eine Auswahl neu.

Der Grund dafür, dass RubyMine unsere privaten Methoden einrückt, ist, dass dies laut den Einstellungen jetzt so sein soll. Wenn Sie also zu den Einstellungen gehen, suchen Sie nach dem Code Style. Wir brauchen einen für die Sprache Ruby. Das Ergebnis ist jedoch eine Reihe von Codestil-Optionen für verschiedene Sprachen und Technologien. Aber hier im Ruby-Abschnitt können wir, wie Sie sehen können, wählen, ob wir unsere privaten und geschützten Methoden zusätzlich einrücken wollen. Der Preview-Bereich zeigt Ihnen auch, was geändert wird.

Es gibt auch noch andere Optionen für den Codestil, zum Beispiel können Sie Leerzeichen um Hash-Rockets, geschweifte Klammern in Blöcken, Hashes und andere hinzufügen.

Klicken wir auf Apply und OK. Wir formatieren unseren Code noch einmal neu, und wie Sie sehen können, fügt RubyMine jetzt einen zusätzlichen Einzug für unsere privaten Methoden hinzu. So funktioniert also die Codeformatierung in RubyMine.

Go-To-Related-Symbol (zugehörige Rails-Entität).

Werfen wir nun einen Blick auf andere benutzerbezogene Funktionen. Dazu können wir auf Navigate | Related Symbol... gehen, was ein Popup öffnet, das alle benutzerbezogenen Entitäten anzeigt. Benutzer*innen haben also einen Controller, einen Helfer, eine Reihe von Ansichten und Tests. Lassen Sie uns zum Controller navigieren.

Navigieren Sie im Editor zwischen den Methoden.

Anscheinend haben wir hier, wie üblich, eine Reihe von RuboCop-Problemen. Beheben wir alle auf einmal beheben. Wir haben hier eine Reihe von Rails-Aktionen. Übrigens, um zwischen den verschiedenen Actions und Methoden zu navigieren, verwenden Sie je nach Betriebssystem Strg+⇧ und Strg+⇩ oder Alt+⇧ und Alt+⇩.

Refactoring: Extract Method.

Es sieht oft so aus, dass wir das Gleiche für verschiedene Aktionen tun. Wir finden eine*n Benutzer*in in der Datenbank anhand der ID und weisen einer Instanzvariablen user zu. Warum refaktorieren wir stattdessen nicht einfach dieses Stück Code in eine eigene Methode?

Dazu gehen wir in das Menü Refactor und wählen das Popup Refactor. Wie Sie sehen können, bietet RubyMine eine Reihe von verschiedenen Refactorings. Sie können zum Beispiel Variablen, Konstanten und Felder extrahieren. Alle diese Aktionen haben ihre eigenen Tastenkürzel. Wir entscheiden uns für das Refactoring Extract Method. Klicken wir es an.

Wir können die neue Methode zu einer privaten, einer öffentlichen oder einer geschützten Methode machen. Machen wir sie privat. Außerdem geben wir ihr einen Namen: get_user. Klicken Sie auf OK.

RubyMine findet alle Aktionen, die das gleiche Stück Code verwenden, das wir gerade in eine eigene Methode umgewandelt haben. Wenn wir auf “Ja” klicken, können wir die neue Methode für jede Aktion einzeln oder für alle auf einmal anwenden.

Unsere neue Methode befindet sich also direkt im privaten Bereich. Hier ist sie. Alle Rails-Aktionen verwenden die neue Methode anstelle des vorherigen Codefragments. Allerdings haben wir hier noch ein kleines Problem. Anscheinend sollten wir Reader-Methoden nicht mit get voranstellen, da dies einen Codestil-Verstoß ist, also müssen wir sie in etwas anderes umbenennen.

Refactoring: Rename.

Das müssen wir nicht manuell machen, da RubyMine auch dafür ein Refactoring hat, das Rename heißt. Wenn wir also Umschalt+F6 drücken, können wir diese Methode in etwas anderes umbenennen, zum Beispiel in take_user. Drücken Sie Refactor. RubyMine findet alle Verwendungen und wenn wir auf do refactor drücken, wird die Methode mit all ihren Verwendungen umbenannt.

Und wie Sie sehen können, heißt diese Methode jetzt in allen Rail-Aktionen take_user.

Schließlich wollen wir wahrscheinlich nicht die gleiche Methode in mehreren Aktionen verwenden. Es ist also offensichtlich eine Duplizierung, also müssen wir sie nur zu einem Filter machen, einem Before-Filter.

Gehen wir hier nach oben und duplizieren wir diese Zeile so, Cmd+D oder Strg+D, je nach Ihrem Betriebssystem. Wir machen diese Methode zu einem Before-Filter. Jetzt ist die Codevervollständigung für take_user verfügbar, wie Sie sehen können.

Jetzt erinnere ich mich nicht mehr an alle Aktionen, die diese Methode verwenden, also kann ich alle Verwendungen manuell wiederfinden. Um das zu tun, drücke ich Alt+F7. Wie Sie also sehen können, verwenden folgende Aktionen diese Methode: edit, followers, following, show, und update. Perfekt. Fügen wir sie hinzu.

Mehrere Cursors.

Zum Schluss können wir nun alle Vorkommen von take_user loswerden, da wir sie nicht mehr brauchen, da wir nun einen Before-Filter haben. Das müssen wir aber nicht manuell machen. Wir brauchen nur ein Vorkommen von take_user zu markieren und dann je nach Betriebssystem Strg+G oder Alt+J zu drücken.

Und dann drücken Sie das Tastenkürzel immer wieder, um alle Vorkommen von take_user in der Datei auszuwählen. Es scheint jedoch, dass wir auch die Definition der Methode take_user ausgewählt haben, die wir wahrscheinlich nicht löschen wollen. Also müssen wir sie abwählen.

Dazu verwenden wir das gleiche Tastenkürzel, drücken aber zusätzlich die Umschalttaste. Jetzt müssen wir nur noch Cmd+Backspace drücken, um alle nicht benötigten Aufrufe der take_user-Methode loszuwerden.

Zum Schluss drücken wir die Escape-Taste, um aus mehreren Cursorn auszubrechen.