Ich stelle immer wieder fest, dass die Umstellung von Blog und anderen lokal archivierten Textdokumenten auf Jekyll eine gute Entscheidung gewesen ist. Klar, ich kann noch nicht so 100%ig absehen, wie gut diese Loesung wirklich skaliert (ich denke mal das wird sich zeigen, wenn ich es endlich einmal schaffe die kompletten zurueckliegenden 10+ Jahre Blog zu importieren), aber bisher bin ich von Flexibilitaet in Sachen Konfigurierbarkeit und Erweiterungen recht begeistert.

Da ich ja staendig probiere sich wiederholende Ablaeufe so weit es geht zu automatisieren, habe ich gestern die Fahrt von Darmstadt nach Mainz damit verbracht den Prozess zu optimieren, ueber welchen ich

  • Mails archiviere,
  • Blog-Eintraege und
  • Notizen anlege.

Da es letzten Endes immer darum geht eine neue Seite anzulegen – wenn auch mit unterschiedlichen Angaben im Header – bietet es sich an, ein paar Abfragen ueber die Kommandozeile zu generieren, mit deren Antworten dann die Datei an entsprechener Stelle angelegt wird. Zu einem gewissen Grade eingerichtet hatte ich mir dies schon eine Weile, allerdings lief dies ausschliesslich ueber das Rakefile, mit welchem auch Builds und dergleichen kontrolliert werden. Da ich aber schon eine Weile der Ansicht war, dass es da eine sauberere (und auch flexiblere) Loesung geben muss, habe ich gestern damit begonnen, den existieren Code in eine Klasse im _plugins Verzeichnis zu portieren.

    .
    |-- Rakefile
    `-- _plugins
        `-- NewPost.rb

Da das Rakefile nicht Teil des Generierungsprozesses von Jekyll ist, werden die in _plugins liegenden Scripten nicht automatisch eingebunden, aber dies laesst sich mit einem Ruby-typischen

    require './_plugins/NewPost.rb'

schnell beheben. Was ich damit habe ist, dass ich den Code recht flexibel erweitern kann, ohne dabei das Rakefile zu gross und komplex werden zu lassen.

Mit dieser Anpassung habe ich nun auch eine – wie ich finde – deutlich elegantere Loesung gefunden, wie ich Abweichungen/Ergaenzungen zum Default-Header verarbeiten kann: wie bei einem Page-Generation Plugin von Jekyll wird der zusaetziche Text einfach in eine (oder in diesem Falle zwei) Variable geschrieben und deren Inhalt dann an spaeterer Stelle eingefuegt. Auf diese Weise behalte ich eine gemeinsam genutzte Funktion fuer das Anlegen einer neuen Seite und kann alles andere in einen Pre-Processing Schritt stecken.

    open("#{@filename}", 'a' ) do |file|
        file.puts "---"
        file.puts "title:      \"#{@title}\""
        file.puts "date:       \"#{@post_date}\""
        file.puts "created_at: \"#{@created_at}\""
        file.puts "layout:     #{@layout}"
        file.puts "author:     \"#{@author}\""
        file.puts "category:   #{@category}"
        file.puts "tags:       [#{@category}]"
        if extra_content['header']
            file.puts "#{extra_content['header']}"
        end
        file.puts "---\n"

        if extra_content['content']
            file.puts "#{extra_content['content']}"
        end
    end

Der nette Nebeneffekt an dieser Loesung: ich kann in zunehmendem allgemeine Funktionalitaet – wie z.B. das Korregieren von Dateinamen – durch eine einzige Funktion laufen lassen, was ein entscheidender Schritt dahin ist, a) Code einzusparen und b) Daten konsistent zu halten.