Archive for the ‘Rails’ Category

Note to self: Rails 2.3-Helper Object#try

Mittwoch, Juni 9th, 2010

Oh je, beinahe 1 Jahr kein Update mehr auf diesem Blog. Aber das ist wohl eine andere Geschichte.

Hier ein kurzes Posting, hauptsächlich für mich selbt. Ich hatte diesen hilfreichen Helper schon einmal entdeckt, aber konnte mich dann nicht mehr an den Namen erinnern.

In Ruby ist es ja ein beliebtes Idiom mittels dem “||”-Operator nil-Werte abzufangen, z.B. @name || “default”.

Dieser Ausdruck liefernt entweder @name oder den String “default”, sollte @name == nil sein.

In Rails möchte man in Views häufig Model-Attribute ausgeben, welche ja als Methoden verfügbar sind. Kann das Model aber auch mal nil sein, kommt man mit dem ||-Idiom nicht weit. Rails 2.3 hat dazu Object#try als Monkey-Patch eingeführt:

@user.try(:name) || "(no name)"

hat den gleichen Effekt wie


@user ? @user.name || "(no name)" : "(no name)"

Sehr praktisch!

(Related: http://ozmm.org/posts/try.html)

RubyGems: –no-ri und –no-rdoc als Vorgabe

Mittwoch, März 18th, 2009

Beim Installieren neuer Gems erstellt RubyGems automatisch RDoc und Ri-Dateien. RDoc erzeugt eine Dokumentation aus den im Quelltext enthaltenen Kommentaren über Klassen- und Methodensignaturen.

Ob das in Zeiten von Flatrates und Google sinnvoll ist, muss jeder selbst entscheiden. Vorteilhaft ist der schnellere Zugriff (unter Ubuntu befinden sich die Dateien in /usr/lib/ruby/gems/1.8/doc), nachteilig das (einmalige) lange Parsing bei der Installation.

RDoc-Erzeugung ausschalten

Die Erzeugung der lokalen Dokumentation kann mit den zusätzlichen Paramtern –no-ri und –no-rdoc für den gem-Befehl unterbunden werden. Häufig begegne ich diesen Parametern auch in Installations-Anleitungen für Gems. Daraus schließe ich mal, das ich nicht der einzige bin, den die Standardeinstellung nicht zufriedenstellt, schließlich beansprucht die RDoc-Erzeugung oft 95% der gesamten Installationszeit.

Lästig also, wenn man –no-rdoc und –no-ri mal wieder vergisst, wenn man gerade das Rails-Framework updaten möchte. Ebenso lästig, dass man –no-rdoc und –no-ri überhaupt eintippen muss!

Keine RDoc-Erzeugung als Standard setzen

Es gibt jedoch Abhilfe: gem liest Parameter automatisch aus der Datei $HOME/.gemrc ein

legt man also die Datei .gemrc in seinem Heimatverzeichnis an, und fügt dort die Zeile

gem: –no-ri –no-rdoc

hinzu, werden diese beiden Parameter jeweils automatisch benutzt. Selbst wer die die lokale Dokumentation auf seinem Entwicklungsrechner haben möchte, sollte diese Datei zumindest auf seinem Server anlegen.

Diese Information habe ich in der RubyGems-Dokumentation gefunden, wo noch mehr Optionen aufgeführt sind.

Bonus-Tipp:

APIdoc.com ist eine aufgebohrte Alternative zur offiziellen Dokumentation von Rails. APIdoc.com stellt nicht nur einfachen Zugriff auf ältere Versionen her sondern ermöglicht auch Kommentare (wie z.B. in der PHP-Doku). Neben Rails sind ist dort auch die Dokumentation für Ruby selbst und RSpec zu finden.

Application-Template mit Benutzerregistrierung, L18n, Basis-CSS uvm.

Sonntag, März 8th, 2009

Alexander Lang hat auf seinem Blog eine praktische Application Template veröffentlicht. Eine Application Template ist ein neues Feature in Rails 2.3, das - wie der Name schon sagt - ein paar Routineaufgaben vorwegnimmt, die beim Anlegen einer neuen Rails-Anwendung anfallen.

Die Template von Alex erzeugt eine Rails-Anwendung mit Benutzerregistrierung/Login, deutscher Übersetzung für ActiveRecord-Meldungen, Capistrano-Deployment, jQuery als Prototype-Ersatz, RSpec als Test-Framwork und ein paar weiteren Dingen.

Am interessantesten fand ich das CSS-Framwork Blueprint und die Benutzerregistrierung über Authlogic. Von beiden Projekten habe ich in der Template zum ersten mal gehört.

Mein erster Kontakt mit CSS-Frameworks war auf dem Barcamp Berlin, wo Dirk Jesse einen Vortrag über YAML hielt. YAML selbst hat mich aber wegen seiner Fülle an Dateien und Ordnern immer abgeschreckt. Blueprint ist dort wesentlich sparsamer und kommt nebenbei noch mit einem in Ruby geschriebenen CSS-Kompressionsskript daher.

Authlogic wird als Plugin zur Benutzerverwaltung eingesetzt und tritt in die Fußstapfen von restful_authentication. Ich war das letzte Jahr eigentlich durchgängig mit dem Spekunauten-Projekt beschäftigt, wo restful_authentication verwendet wird. Daher habe ich mich natürlich auch nicht nach aktuelleren Lösungen umgeschaut und Authlogic ist an mir vorübergegangen, werde es mir deshalb auf jedenfall anschauen.

Mit jQuery, RSpec und den anderen Goodies habe ich selbst noch keine praktischen Erfahrungen gesammelt und kann dazu wenig sagen.

Was mir noch fehlt ist das ausgezeichnete exception_notification-Plugin und Vorbereitung für ein SVN-Repository (Alex verwendet Git). Dazu werde ich dann wohl selbst eine Template anlegen, wozu Alex seine Leser auch ausdrücklich auffordert.

Achso, die Template gibt es hier zum Download (wer kein Rails 2.3 verwendet kann sich trotzdem den Quelltext anschauen und findet dort beispielsweise das XHTML-Layout für Blueprint).

Benutzen kann man das ganze einfach mit

rails my_new_app -m http://gist.github.com/75038.