Archive for the ‘Tricks’ 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.

View-Helper im Controller benutzen

Montag, November 17th, 2008

Ich habe die letzten Tage viel Zeit mit einem AJAX-Chat für die Spekunauten verbracht. Dort habe ich mich von .RJS-Templates verabschiedet und erzeuge den meisten View-Code direkt im Controller mit render_to_string.

Für Javascript-Funktionen benötigte ich aber auch oft javascript_escape (bei der Parameterübergabe) und andere Helper, die nur im View zur Verfügung stehen.

Es gibt verschiedene Lösungen, dass zu erreichen. Die unkomplizierteste die ich gefunden habe lautet @template.

Mit @template (ich habe dieses Feature aus einem Kommentar von 2005 gefunden, es scheint also noch aus 1.x-Tagen zu sein) kann man alle Funktionen innerhalb des Views aufrufen, also z.B. @template.escape_javascript!