Guard anpassen, ohne Programmierung

Um die im vorigen Artikel begonnene Vorstellung des nützlichen Helfers Guard zu Ende zu bringen, hier ein Tipp, wie man schnell ein Programm, einen Befehl einbaut, ohne gleich ein eigenes Plugin zu programmieren.

Die schon mal angeführte Liste der Plugins für Guard ist groß, und es gibt noch mehr Plugins die dort gar nicht erwähnt sind. Wer aber nicht viel Zeit mit Suchen und Ausprobieren verschwenden will, oder einfach kein passendes Modul findet, kann in einfachen Szenarien auch eine Abkürzung wählen — einfach das Shell-Modul verwenden. (Bei komplizierteren Sachen kann man immer noch ein eigenes Plugin erstellen. Wie man an der Menge von Plugins sehen kann, ist das recht einfach.)

Um diesen Ansatz zu demonstrieren, ein Beispiel für die Nutzung von Asciidoc. Mit Asciidoc kann man DocBook-Dokumente ohne Unterstützung eines XML-Editors erstellen, es ist ähnlich wie die populäre Markdown- oder Textile-Syntax zu verwenden. Man tippt also in einem beliebigen Text-Editor los und konvertiert zum Schluss die Textdatei in das DocBook-Format.

Um die Übersicht beim Schreiben zu behalten, wollte ich das Produkt mit docbook_status analysiert haben. Leider gab es kein passendes Plugin für Asciidoc. Daher die Idee einfach, das Shell-Modul zu verwenden, um die Transformation Asciidoc → DocBook automatisch anzustoßen. Das ist auch recht einfach, man übergibt dem Shell-Modul einfach die Kommandozeile, die man sonst von Hand eingeben würde:

<br />
guard 'shell' do<br />
   watch(/.+\.txt$/i) {|t| system 'asciidoc -bdocbook50 heft1.txt'}<br />
end<br />

Zeile 2 weist Guard also an, sämtliche Textdateien zu überwachen, und bei Änderungen Asciidoc aufzurufen, den Text in DocBook 5 umzuwandeln. Damit habe ich aber nur eine XML-Datei aus dem Text gemacht, und noch keine Analyse. Daher beinhaltet das Guardfile eine zweite Überwachung, diesmal mit dem schon vorgestellten Plugin guard-docbook-status.

<br />
guard 'docbook-status', :cli =&gt; ' --remarks heft1.xml' do<br />
   watch(/.+\.xml$/i)<br />
end<br />

Die erste Anweisung überwacht also Textdateien und produziert XML-Dateien. Die zweite schaut nach geänderten XML-Dateien und prüft die dann mit docbook_status. Schon wird die gewünschte Analyse ausgegeben, eine ganz normale Kettenreaktion.