Unsere letzten Open-Source-Beiträge

Wir sind nicht nur große Open-Source-Nutzer, sondern auch gerne mal -Geber. Die Bandbreite der Beiträge ist groß, wir haben fremde und eigene Projekte im Angebot.

GaEvents

Unser Rails-Plugin kapselt das event tracking von Google Analytics und ermöglicht es, Events in allen Teilen der Anwendung leicht auszulösen.

Mittlerweile gibt es einen TestAdapter , mit dessen Hilfe es einfach geworden ist, in Akzeptanztests geworfene events zu verifizieren.

zsh-function-and-aliases

Wir haben hier viele unserer ZSH-Aliase vereinheitlicht und dokumentiert. Sie helfen vor allem bei der täglichen Arbeit mit Git, feature branches, Bitbucket-Code-Reviews und RuboCop.

AWS SDK

Auch in sehr verbreiteten Bibliotheken können sich durchaus Fehler einschleichen. Selbst Mitarbeiter bei so großen Firmen wie Amazon lassen mal Tests ein bisschen schleifen.

Das Gem aws-sdk konnte doch glatt keine Binärdaten mehr in DynamoDB ablegen. Vorbildlich war natürlich die Reaktion der AWSler auf unseren Fehlerreport: Wenige Tage später gab es einen fix samt spec und eine neue Gem-Version, um den fix leicht nutzen zu können.

Premailer

In HTML-Mails sollten CSS-Stile für größtmögliche Kompatiblität inline annotiert werden, das ist aber nur sehr schwer wartbar. Premailer fügt nackten HTML-Daten Styling inline hinzu, verwendet als Quelle aber externe CSS-Daten.

Wir hatten bereits früher Premailer-spezifische CSS-Attribute erweitert, um das Styling von Tabellen möglichst komplett per CSS umsetzen zu können.

Diese vendor prefixes erweitern wir gerade noch einmal bezüglich Text- und Bildausrichtung. Auch diese Änderung werden wir versuchen, via pull request in das Hauptprojekt zurückzuführen.

Dasheets

Mit Dasheets lassen sich Cheatsheets für Dash erzeugen, die Motivation hinter dem Projekt und eine kleine Einführung hatte ich bereits hier im Blog vorgestellt.

Die Idee hat dem Dash-Autor offensichtlich so gefallen, dass er gleich den Fork cheatset erstellt hat und dort weiterentwickelt. Klasse.

Nww-Devtools und Nww-Devtools-Rails

In unseren Ruby- und Rails-Projekten verwenden wir immer wieder den gleichen Satz an Gems, primär für erweiterte Debugging-Möglichkeiten.

Statt also Tools wie Pry oder RuboCop-Nww und viele weitere immer wieder händisch einzupflegen, zu installieren und zu bumpen, realisieren wir das mit der Angabe eines einzigen Gems, das uns noch dazu auch spezifische Konfigurationsarbeiten abnimmt.

W3C Validators Gem

Um potentielle Fehlerquellen auszuschließen, versuchen wir immer möglichst validen HTML- und CSS-Code zu erstellen. Vertrauen ist gut, Kontrolle ist besser - solche Validierungen führt man doch nicht besser händisch aus, sondern automatisch. Auf Basis dieses Gems lassen sich leicht ein paar RSpec-Matcher erstellen und in Feature-Specs integrieren.

Wir haben in unserem fork das Gem auf den aktuell gehosteten W3C-Dienst und aktuelle Ruby-Versionen angepasst, außerdem haben wir uns über vendor extensions beim CSS-Validieren Gedanken gemacht.

Poltergeist

Poltergeist ist ein PhantomJS-Treiber für Capybara, dieses wiederum dient zum automatisierten Testen von Webanwendungen. Vereinfacht gesprochen erlauben diese Bibliotheken, einen echten Browser für Tests fernzusteuern.

In unserem fork bzw. branch haben wir einen PhantomJS-Bug bezüglich Load Storage umgangen und das header handling dahingehend erweitert, dass gesetzte header nicht zwingend auch für auf redirects folgende requests gelten müssen.

Wir benötigen diesen Hack, um Nix-wie-weg.de möglichst ganzheitlich testen zu können. Wir setzen in diesem Portal auf eine Kombination aus per HTTP und HTTPS ausgelieferten Seiten, das aufwendigere routing und weitere Hürden habe ich bereits in einem früheren Blogartikel beschrieben.

Capybara stellt keinen HTTPS-Server zur Verfügung, deswegen annotieren wir eigentliche SSL-Requests mit einem header X-Forwarded-SSL: on. Dabei gibt es Grenzfälle, wenn redirects ins Spiel kommen und das Protokoll währenddessen wechselt. Wir haben eine Möglichkeit geschaffen, um header zwar für den nächsten request zu setzen, eben aber nicht auf den 2. request des redirects auszudehnen:

page.driver.add_header('X-Forwarded-SSL', 'on',
                       permanent: false, for_followed_redirect: false)

Auch hier werden wir uns darum bemühen, diese Änderungen in irgendeiner Form wieder in das Hauptprojekt zurückfließen lassen zu können.