Browsing the archives for the Programmierspaß category

Eine kurze Vorschau auf Rails 3

David Heinemeier Hansson hat in seiner Keynote zur RailsConf 2009 fünf Jahre Rails Revue passieren lassen und erste Einblicke in Rails 3 gewährt, welches wider früherer Ankündigungen noch nicht als offizielle Alpha-Version bereit steht.

Er betont, wie sich die Entwicklung von Rails inzwischen stabilisiert habe; auch nach der Einführung größerer Features und Idiome wie RESTfulness würde man heute Rails-Anwendungen im Großen und Ganzen noch genau so entwickeln wie vor einigen Jahren.

Dies solle sich auch mit Rails 3 nicht ändern, und das, obwohl nun einige heilige Kühe zur Schlachtbank getrieben werden. Die aus meiner persönlichen Signifikantesten sind:

JavaScript wird unobtrusive: Rails 3 wird nicht mehr AJAX-getriebene Links und Formulare mit in HTML eingesprenkeltem JavaScript realisieren, sondern das HTML über die in HTML 5 definierten data-Attributen mit Metadaten versehen. Ein AJAX-Link würde dann z.B. wie folgt aussehen:

1
<a href="/posts/5" data-remote="true" data-method="delete">Delete</a>

Die JavaScript-Funktionalitäten würden dann über ein einmal laufendes Script aktiviert werden, das die mit solchen Metadaten versehene Elemente findet und mit entsprechenden Behaviours versieht. Neben dem sehr viel saubereren Markup bietet dies den weiteren großen Vorteil, dass sich damit der Output der Rails-Helpers von der JavaScript-Bibliothek löst; endlich kann man also z.B. jQuery statt des bisherigen Rails-Defaults Prototype einsetzen, ohne sämtliche Helper-Funktionen umbiegen zu müssen.

Ausgegebene View-Variablen werden automatisch escaped: technisch betrachtet handelt es sich hierbei um eine Kleinigkeit, allerdings war dies ein Thema nicht enden wollender Diskussionen. Ab Rails 3 werden Variablen, die in Views ausgegeben werden, automatisch escaped (d.h. eventuell in ihnen vorhandenes HTML wird umgewandelt, so dass es vom Browser angezeigt, aber nicht verarbeitet wird — der Angriffsvektor Nummer 1 in Webanwendungen aller Art).

Bisher musste dies manuell (durch den Aufruf der Helper-Methode h) geschehen. Dies geschieht nun automatisch; um einen String ohne Escaping auszugeben, muss nun der Helper raw aufgerufen werden. Selbst geschriebene Helper können ihren Rückgabewert durch die neue String-Methode html_safe! als sicher deklarieren, so dass ActionView dort nicht unerwünscht doppelt escaped.

Abgesehen von diesen beiden großen und ein paar hier nicht besprochenen kleineren Änderungen wird Rails 3 noch einen ganzen Haufen interner Refactorings mit sich bringen, die sich vor allem im Sachen Performance bemerkbar machen sollten. Ein Release ist noch für diesen Sommer geplant.

No Comments Posted in Programmierspaß
Tagged
I18nifizierte Rails-Views

Neu in Edge Rails:

1
2
3
4
5
6
7
Add localized templates
 
  # Default locale
  app/views/messages/index.html.erb
 
  # I18n.locale is set to :da (Danish)
  app/views/messages/index.da.html.erb

Wird auch langsam Zeit!

1 Comment Posted in Programmierspaß
Tagged
Ein kleiner Helper für Seitentitel

Wie wär’s mit einem kleinen Helper zum Setzen des Seitentitels, der sowohl einen String als auch einen Block (mit HTML, das dann rausgesanitized wird) entgegen nimmt?

1
2
3
4
5
6
7
def set_page_title(title = nil, &block)
  if block_given?
    html = capture(&block)
    concat(html)
  end
  content_for(:title, title || strip_tags(html))
end

In einer HAML-View setzt man den Titel der Seite dann so:

1
- set_page_title "Neuer User"

Oder mit einem Block, der auch ausgegeben wird (aber im Titel werden alle HTML-Tags entfernt):

1
2
3
4
- set_page_title do
  %h1
    %strong Ein neuer User.
    Wie spannend!

Den Seitentitel kann man dann per yield :title ausgeben (idealerweise irgendwo im <title>-Tag.

Warum wird der Seitentitel überhaupt in einer View gesetzt? Weil er meiner Meinung nach die Angelegenheit eben dieser ist, und nicht des Controllers. So!

Update: mein Kollege Pascal wies mich völlig zurecht darauf hin, dass man den fertigen Titel konsequenter Weise per content_for und yield statt einer Instanzvariable übergeben sollte. Habe den Code entsprechend angepasst.

1 Comment Posted in Programmierspaß
Tagged
E-Mail-Verifizierung in Rails

In meiner neuen Anwendung will ich auf den langweiligen Aktivierungs-Link-Krams verzichten, der per Mail verschickt wird — neue User sind sofort eingeloggt und aktiviert. Sie erhalten trotzdem einen Link per E-Mail, der die Adresse verifizieren soll — dies aber nur, damit ich E-Mail-Benachrichtigungen nicht an die falschen User oder nicht existierende Adressen schicke. Carlo hat ein Gem gefunden, das mir bei der Überprüfung des letzten Punkts hilft:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
class User < ActiveRecord::Base
 
  validates_uniqueness_of :email, :case_sensitive => false
  validate :valid_email?
 
private
 
  def valid_email?
    address = EmailVeracity::Address.new(email)
 
    unless address.valid?
      errors.add(:email, address.errors.join(", "))
    end
  end
 
end

Das ganze heißt email-veracity und liegt hier [github].

Carlo stürzt sich gerade in die wundervolle Welt von Rails und bloggt auf rooohby über all die kleinen und großen Dinge, die er lernt.

No Comments Posted in Programmierspaß
Tagged ,
Hacking aufeinander.de 3.0

Jetzt ist das Teil schon über ein Jahr offline — höchste Zeit, dass ich mal wieder Zeit in mein kleines Dauerprojekt aufeinander.de investiere! Habe über die letzten Wochen ein bisschen gehackt und werde das hoffentlich noch bis zu einem Punkt fortsetzen, an dem ich das Teil auch online stellen kann. Jetzt, wo ich mein Blog reaktiviert habe, kann ich ja mal etwas über die Entwicklung schreiben. w00t!

github und Pivotal Tracker

Endlich komme ich dazu, das großartige github.com für ein eigenes Projekt zu benutzen — wenn ich auch aktuell der einzige Entwickler bin. Außerdem hat mir mein Kollege Ali den Pivotal Tracker empfohlen, einen Issue- bzw. Story-Tracker für SCRUM-basierte Projekte. Und woah, das Teil rockt! Sowohl von Funktionalität als auch UI her super, und dazu auch noch kostenlos. Kann ich uneingeschränkt empfehlen.

Rails 2.2

Das neue aufeinander.de ist mein erstes Projekt mit Rails 2.2, und damit auch das erste, in dem ich die neue Internationalisierungs-API ausprobieren kann. Die mal echt super geworden ist! Neue Locales in die Anwendung zu integrieren könnte einfacher nicht sein — endlich muss man nicht mehr neidisch auf andere Frameworks schauen oder auf in den meisten Fällen arg durchwachsene Third-Party-Plugins zurück greifen.

(Hat schonmal jemand in den Quellcode von Ruby-GetText geschaut? Meine Herren, pfui…)

Für die Views kommen wieder einmal HAML und SASS zum Einsatz, und ich freue mich schon auf das vor kurzem für Rails 2.2 angepasste FlexImage.

Für die automatisierten Tests verzichte ich dieses Mal auf die üblichen Verdächtigen (shoulda, test/spec, rspec) und bleibe bei Test::Unit mit den von Rails mitgebrachten Helferlein. Statt Fixtures setze ich machinist (zusammen mit faker und random_data) zum Generieren von Testdaten ein (dazu schreibe ich später noch etwas), irgendwann wird sich wahrscheinlich auch noch mocha hinzu gesellen.

Und weiter geht’s!

Genug technisches Gefasel. Mal schauen, wann ich etwas online stellen kann. Werde hoffentlich über die nächsten Wochen hier und da etwas Zeit finden, ein bisschen zu hacken, vielleicht ja auch bei den total superen Happy Hacking-Sessions mit den werten Kollegen. Drückt die Daumen!

7 Comments Posted in Meine Projekte, Programmierspaß
Tagged , , , , ,