Wie testet man elegant komplexere Code-Abschnitte, ohne gleich ein
vollständiges Programm zu schreiben? In diesem Beitrag erkläre ich, wie
sich pry
, eine interaktive Ruby Shell, mit dem Texteditor vim
verträgt.
Um Ideen für Programme oder einzelne Code-Schnipsel in Ruby
auszuprobieren, bietet sich irb
an, die Interaktive Ruby Shell. Dabei
handelt es sich um eine sogenannte REPL, also eine “read-evaluate-print
loop”. Diese Lesen-Auswerten-Schreiben-Schleife erlaubt es, interaktiv
Code einzugeben und die Ergebnisse unmittelbar auf der Kommandozeile in
Augenschein zu nehmen.
irb
ist ohne Frage der Klassiker unter den REPLs für Ruby, aber nicht
die einzige. Eine sehr mächtige Alternative ist
pry. pry
erlaubt es nicht nur, interaktiv
Ruby-Code einzugeben und auszuführen, sondern ermöglicht auch den
Zugriff auf die Shell, verfügt über Syntax Highlighting, erlaubt das
Aufrufen der Ruby-Dokumentation mit ri
und bietet eine
Verlaufsgeschichte der einzelnen Eingaben.
pry
bringt außerdem eine Funktion mit, über die irb
nur mithilfe
eines Umwegs verfügt: die Möglichkeit, aus dem REPL auf einen Editor
zuzugreifen.
Dank des Vim Cast Running Vim within
irb von Drew Neil
bin ich darauf aufmerksam geworden, dass sich ein Editor innerhalb von
irb
aufrufen lässt, indem man das gem interactive_editor
installiert
und in der .irbrc
einbindet.
Das ist insbesondere dann von Nutzen, wenn man längere Code-Abschnitte eingibt, dann aber einzelne Zeilen überarbeiten möchte, ohne den ganzen Rest erneut eintippen zu müssen. Anders gesagt, die Möglichkeit, aus einem REPL einen Editor aufzurufen, bietet eine Balance aus Interaktion mit dem Code und komfortablem Editieren.
Ein kurzer Blick in die
Dokumentation von
pry
zeigt: pry
bietet diese Funktion gleich von Hause aus.
Das REPL lässt sich mit gem install pry
installieren. Man ruft es aus
der Kommandozeile mit dem Befehl pry
auf. Anschließend kann mit dem
Coden losgelegt werden.
[1] pry(main)> (1..15).each do |i|
[1] pry(main)* if i%3 == 0 && i%5 == 0
[1] pry(main)* puts 'FizzBuzz'
[1] pry(main)* elsif i%3 == 0
[1] pry(main)* puts 'Fizz'
[1] pry(main)* elsif i%5 == 0
[1] pry(main)* puts 'Buzz'
[1] pry(main)* else
[1] pry(main)* puts i
[1] pry(main)* end
[1] pry(main)* end
1
2
Fizz
4
Buzz
Fizz
7
8
Fizz
Buzz
11
Fizz
13
14
FizzBuzz
=> 1..15
[2] pry(main)>
Hat man die REPL von der Kommandozeile aus mit dem Befehl pry
gestartet, lässt sich ein Editor mit edit
aufrufen. pry
greift dafür
auf die Shell-Variable $EDITOR
zurück, die in der jeweiligen Dotfile
der Shell definiert wird. Ist kein Editor angegeben, ruft pry
Nano auf.
Möchte man einen anderen Editor nutzen, lässt sich mithilfe des
Kommandos Pry.config.editor
der Lieblingseditor festlegen. Bei
mir verweist
beispielsweise $EDITOR
auf mvim
. Das heißt, immer wenn ein Programm
von der Kommandozeile einen Editor aufruft, startet
MacVim. Das Terminal aber
jedesmal zu verlassen, wenn ich aus pry
einen Editor aufrufe, scheint
mir unsinnig zu sein. Deswegen habe ich in der Datei ~/.pryrc
den
Befehl Pry.config.editor="vim"
eingetragen. Auf diese Weise wird statt
mvim
immer vim
gestartet, wenn ich mit edit
einen Editor aus pry
aufrufe.
Eigentlich schließen sich einander REPL und Editor aus. Ein REPL wie
irb
oder pry
dient nämlich dafür, gerade kein vollständiges Programm
zu schreiben, sondern nur Code-Schnipsel testweise laufen zulassen und
die Ausgabe gleich zu überprüfen. Einen Editor aufzurufen macht aber
dann Sinn, wenn es um etwas komplexere Ausschnitte geht, die getestet
werden sollen. Hierfür sind pry
und vim
ein perfektes Paar.