pry_logo (1)

Ein REPL – Read, Eval, Print, Loop, ist eine interaktive Shell für eine Programmiersprache, um Ausdrücke in der Sprache auszuwerten. REPLs sind eine großartige Möglichkeit, eine Sprache, ihre Syntax und APIs zu lernen.

Die meisten Programmiersprachen haben eine eigene REPL oder ein von der Community entwickeltes Tool, das für denselben Zweck geschrieben wurde. Für Ruby ist es IRB – Interactive Ruby Shell, mit der Sie in Sekundenschnelle mit Ruby spielen und mit seinen Funktionen experimentieren können.

IRB wird mit Ruby mitgeliefert und kann über die Befehlszeile mit dem Befehl irb gestartet werden. Es bietet Befehlshistorie, Zeilenbearbeitung und Ausführen von Ruby-Programmen von innen heraus. Wir werden heute jedoch nicht über IRB sprechen. Stattdessen möchte ich mich auf eine Alternative konzentrieren, genannt Pry, und was es auf den Tisch bringt. Wir werden einige raffinierte Funktionen sehen, die Pry heute bietet.

Installation

Bevor wir mit pry anfangen können, müssen wir es natürlich installieren. Pry ist ein Ruby-Edelstein, daher ist die Installation dieselbe wie die Installation eines Ruby-Edelsteins. Geben Sie einfach Folgendes ein:

gem install pry pry-doc

Wir haben pry-doc hinzugefügt, um auf die Ruby Core-Dokumentation zuzugreifen. Um pry zu starten, geben Sie einfach pry ein, nachdem das Juwel installiert wurde.

Sie können es auch zu einem Teil der Abhängigkeiten Ihrer Anwendung machen, indem Sie gem "pry" zur Gemfile Ihrer Anwendung hinzufügen. Die Installation von Pry aus der Anwendung heraus hat ihre eigenen Vorteile. Tatsächlich gibt es ein pry-rails Juwel, das die Rails-Konsole durch Pry ersetzt.

Wir werden heute nicht auf das Rails-Juwel eingehen, aber ich werde mich auf einige der besten Funktionen von Pry konzentrieren und Ihnen erlauben, mehr auf eigene Faust zu erkunden.

Erkundung der Dokumentation & Quelle

Eine der nützlichsten Funktionen in Pry ist die Möglichkeit, die Dokumentation und den Quellcode innerhalb der Shell zu erkunden. Pry macht es möglich, indem es während der Laufzeit aus dem Quellcode abgerufen wird. Der Befehl zum Anzeigen der Dokumentation lautet show-doc akzeptiert einen Methodennamen. show-doc funktioniert problemlos mit Ri- und YARD-Dokumentation und unterstützt auch Syntaxhervorhebung und Formatierung. Lass uns anfangen damit zu spielen.

Wenn ich show-doc gefolgt vom Methodennamen in der Pry-Konsole eingebe, wird die Dokumentation der Methode direkt auf der Konsole zurückgegeben:

pry(main)> show-doc Array#mapFrom: array.c (C Method):Owner: ArrayVisibility: publicSignature: map()Number of lines: 12Invokes the given block once for each element of self.Creates a new array containing the values returned by the block.See also Enumerable#collect.If no block is given, an Enumerator is returned instead. a = a.collect { |x| x + "!" } #=> a.map.with_index { |x, i| x * i } #=> a #=> 

Das Ergebnis ist ziemlich selbsterklärend, es gibt die Quelle der Dokumentation, ihre Signatur, die Anzahl der Zeilen und eine Beschreibung der bereitgestellten Methode zurück. Sie werden feststellen, dass dies eine C-Methode ist, da ich MRT verwende. Sie werden froh sein zu wissen, dass die Kernbefehle von Pry mit jedem der Interpreter funktionieren, einschließlich JRuby und Rubinius.

Die Methode ist also Teil des Sprachkerns und in C geschrieben, wie wir aus dem Ergebnis entnehmen konnten. Wir können eins nach oben gehen und die Quelle dieser Methode direkt aus dem Inneren von pry anzeigen. Geben Sie einfach show-source gefolgt vom Methodennamen ein:

pry(main)> show-source Array#mapFrom: array.c (C Method):Owner: ArrayVisibility: publicNumber of lines: 13static VALUErb_ary_collect(VALUE ary){ long i; VALUE collect; RETURN_SIZED_ENUMERATOR(ary, 0, 0, ary_enum_length); collect = rb_ary_new2(RARRAY_LEN(ary)); for (i = 0; i < RARRAY_LEN(ary); i++) { rb_ary_push(collect, rb_yield(RARRAY_AREF(ary, i))); } return collect;}

Da ist es. Der Quellcode des Array#map!

Wir können show-method oder show-source für jede verfügbare Methode verwenden. Probieren Sie einige Methoden aus, die Sie verwendet haben.

Haken

Das nächste Feature, das wir heute sehen werden, sind Haken. Hooks sind nichts anderes als aufrufbare Methoden, die einem Ereignis in Pry zugeordnet sind. Immer wenn ein Ereignis in Pry auftritt, wird ein damit verbundener Hook ausgeführt. Pry hat bereits einige Ereignisse, in die wir uns „einhaken“ können, wie :before_session:before_eval und andere. Lassen Sie uns einen Hook für eines dieser bereits vorhandenen Ereignisse sehen und erstellen:

 pry(main)> Pry.hooks.add_hook(:after_read, "uphook") do |text, pry| pry(main)* puts text.upcase pry(main)* end

Hier erstellen wir einen Hook, der ausgeführt wird, nachdem jede Anweisung von der Shell gelesen wurde und die Zeichenfolge zurückgibt und in Großbuchstaben umwandelt. Um es zu testen, müssen wir eine neue Pry-Sitzung starten, um den Hook zu laden:

 pry(main)> Pry.start# New Session is started here pry(main)> "abc""ABC"=> "abc"

Wie Sie sehen können, wird die eingegebene Zeichenfolge groß geschrieben. Dies ist ein einfacher Anwendungsfall von Haken, aber Sie können viel mehr daraus machen. Die Pry-Erweiterungen verwenden diese häufig, um ihre großartigen Funktionen bereitzustellen. Darüber hinaus können Sie sogar Ihre eigenen Events und anschließend Ihre eigenen Hooks erstellen! Lesen Sie hier mehr über das Erstellen eigener benutzerdefinierter Ereignisse

Statusnavigation

Pry bietet eine wunderbare Möglichkeit, Objekte zu durchsuchen, Kontexte zu wechseln und Ebenen wie in einem Dateisystem zu ändern. Sehen wir uns ein Beispiel an.

Zuerst lernen wir einen Befehl namens cd kennen. cd <OBJECT_NAME> ändert den Kontext der Shell in das Zielobjekt und Sie können die verfügbaren Methoden für dieses Objekt überprüfen oder eine Ebene tiefer gehen:

pry(main)> class Fruitpry(main)* endpry(main)> class Apple < Fruitpry(main)* endpry(main)> self=> mainpry(main)> cd Fruitpry(Fruit):1> self=> Fruitpry(Fruit):1> cd Applepry(Apple):2> self=> Apple

Wie Sie sehen können, verschiebt sich mit jedem cd in ein Objekt der Kontext der Shell zum Objekt, und Sie können so weit verschachteln, wie Sie möchten. Außerdem können Sie jederzeit mit dem Befehl nesting schnell sehen, wie weit Sie verschachtelt sind und Ihre Verschachtelungsliste.

pry(Apple):1> nestingNesting status:--0. main (Pry top level)1. Fruit2. Applepry(Apple):1> cd ..pry(Fruit):1> self=> Fruitpry(Fruit):1> cd -pry(Apple):2> self=> Apple

Ähnlich dem Unix-Befehl cd, um zum übergeordneten Objekt zu gelangen, geben Sie einfach cd .. und um zum vorherigen Objekt zu gelangen, das vor dem aktuellen Objekt besucht wurde, verwenden Sie cd -.

Es gibt andere nützliche Befehle, die die Statusnavigationsfunktionen von Pry ergänzen, wie ls – um die Liste der Methoden, Module und mehr anzuzeigen. Der Befehl find-method wird verwendet, um die Funktionalität einer Methode und ihre Funktionsweise zu ermitteln. Der vollständige Funktionsumfang der Statusnavigationsbefehle ist hier dokumentiert

Geschichte

Eine weitere hilfreiche Funktion von Pry ist die Verlaufsverfolgung. Wenn eine Pry-Sitzung gestartet wird, zeichnet Pry standardmäßig die von Ihnen verwendeten Befehle in einer Verlaufsdatei auf, die Sie später überprüfen, analysieren oder sogar wiedergeben können. Es gibt eine Reihe von Konfigurationsoptionen, die von Pry Out of the Box rund um die Verlaufsverfolgung bereitgestellt werden. Standardmäßig wird der Verlauf in der /.pryhistory -Datei gespeichert, aber Sie können ihn leicht ändern, indem Sie Folgendes zu Ihrer .pryrc -Datei hinzufügen:

Pry.config.history.file = "~/.filenamehere"

Außerdem wird der Verlauf bei jedem Start einer Pry-Sitzung aus der Verlaufsdatei geladen und bei Beendigung der Sitzung in der Datei gespeichert. Sie können dieses Verhalten jedoch mit der folgenden Konfiguration überschreiben:

# To Disable the autoloadPry.config.history.should_load = false# To enable the autosavePry.config.history.should_save = false

Neben der direkten Arbeit mit der History-Datei können Sie auch den praktischen hist -Befehl verwenden, der eine Reihe von Flags bereitstellt, die die Arbeit mit prys History zu einem Kinderspiel machen. Wenn Sie den Befehl hist eingeben, wird der gesamte gespeicherte Verlauf ausgegeben.

 pry(Rails):1> hist1: hist2: cd Rails3: ls4: cd Application5: ls6: show-method assets7: cd ..8: ls

Sie können jedoch die Flags verwenden, um den Verlauf weiter zu filtern und zu überprüfen. Im Folgenden sind einige der wenigen verfügbaren Flaggen aufgeführt.

Um alle Befehle aufzulisten, die das Wort cd enthalten, verwenden Sie --grep:

 pry(Rails):1> hist --grep cd2: cd Rails4: cd Application7: cd ..

Um die letzten 5 Befehle anzuzeigen, die Sie verwendet haben, verwenden Sie die Option --tail. Die Standardnummer, wenn der Wert nicht übergeben wird, ist 10:

 pry(Rails):1> hist --tail 5 6: show-method assets 7: cd .. 8: ls 9: hist10: hist --grep cd

Es gibt weitere Befehle, die in Prys hist Schnittstelle verfügbar sind, die hier dokumentiert sind. Aber ich möchte Ihnen ein letztes cooles Flag des Befehls hist zeigen – replay . Mit dem Flag replay können Sie die Befehle aus dem Verlauf ausführen, entweder einen einzelnen oder eine Reihe von Befehlen anhand ihrer Zeilennummern. Die Verwendung ist einfach hist --replay X..Y:

 pry(main)> hist --replay 2..5constants: API Application CommandsTasks Configuration Console ConsoleMethods Engine Html Info InfoController Initializable MailersController Paths Rack Railtie VERSION WelcomeControllerActiveSupport::Autoload#methods: autoload autoload_at autoload_under autoloads eager_autoload eager_load!Rails.methods: app_class app_class= application application= backtrace_cleaner cache cache= configuration env env= gem_version groups initialize! initialized? logger logger= public_path root versioninstance variables: @_at_path @_autoloads @_eager_autoload @_env @_under_path @app_class @application @cache @logger @parent_namelocals: _ __ _dir_ _ex_ _file_ _in_ _out_ _pry_...

Fazit

Damit sind wir zum Abschluss unseres Tutorials gekommen. Pry ist wirklich ein leistungsfähiger Ersatz für die Standard-IRB-Shell und funktioniert gut bei der Verbesserung Ihrer bestehenden Workflow. Wir haben nur über einige Funktionen von Pry gesprochen, aber es enthält noch viel mehr, einschließlich schrittweises Debuggen (mit dem Pry-Debugger-Juwel) und die Möglichkeit, Dateien innerhalb der REPL zu bearbeiten und neu zu laden. Wir haben bereits ein Tutorial, um mit Pry zu beginnen, Sie können es hier lesen und es gibt die umfassende Pry Wiki Dokumentationsseite, die hier gefunden werden kann.

Vielen Dank für das Lesen und ich hoffe, es hat Ihren Zwecken gedient.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.