diff --git a/README.de.rdoc b/README.de.rdoc
index 8d15d324..4c6ca6be 100644
--- a/README.de.rdoc
+++ b/README.de.rdoc
@@ -851,6 +851,11 @@ teilen:
set :session_secret, 'super secret'
+Zur weiteren Konfiguration kann man einen Hash mit Optionen in den +sessions+
+Einstellungen ablegen.
+
+ set :sessions, :domain => 'foo.com'
+
== Anhalten
@@ -955,6 +960,31 @@ Vergleichbar mit +body+ lassen sich auch Status-Code und Header setzen:
Genau wie bei +body+ liest ein Aufrufen von +headers+ oder +status+ ohne
Argumente den aktuellen Wert aus.
+=== Logger
+
+Im Geltungsbereich eines Request stellt die +logger+ Helfer-Methode eine
++Logger+ Instanz zur Verfügung:
+
+ get '/' do
+ logger.info "es passiert gerade etwas"
+ # ...
+ end
+
+Der Logger übernimmt dabei automatisch alle im Rack-Handler eingestellten Log-
+Vorgaben. Ist Loggen ausgeschaltet, gibt die Methode ein Leerobjekt zurück.
+In den Routen und Filtern muss man sich also nicht weiter darum kümmern.
+
+
+Beachte, dass das Loggen standardmäßig nur für Sinatra::Application
+voreingestellt ist. Wird über Sinatra::Base vererbt, muss es erst
+aktiviert werden:
+
+ class MyApp < Sinatra::Base
+ configure(:production, :development) do
+ enable :logging
+ end
+ end
+
== Mime-Types
@@ -1073,29 +1103,33 @@ zugegriffen werden:
# App läuft unter http://example.com/example
get '/foo' do
- request.body # Request-Body des Clients (siehe unten)
- request.scheme # "http"
- request.script_name # "/example"
- request.path_info # "/foo"
- request.port # 80
- request.request_method # "GET"
- request.query_string # ""
- request.content_length # Länge von request.body
- request.media_type # Media-Type von request.body
- request.host # "example.com"
- request.get? # true (ähnliche Methoden für andere Verben)
- request.form_data? # false
- request["SOME_HEADER"] # Wert des SOME_HEADER-Headers
- request.referrer # der Referrer des Clients oder '/'
- request.user_agent # User-Agent (genutzt von :agent-Bedingung)
- request.cookies # Hash der Cookies
- request.xhr? # Ist dies eine Ajax-Anfrage?
- request.url # "http://example.com/example/foo"
- request.path # "/example/foo"
- request.ip # Client-IP-Addresse
- request.secure? # false (wäre true bei SSL)
- request.forwarded? # true (wenn hinter Reverse-Proxy)
- requuest.env # env-Hash, den Rack durchreicht
+ t = %w[text/css text/html application/javascript]
+ request.accept # ['text/html', '*/*']
+ request.accept? 'text/xml' # true
+ request.preferred_type(t) # 'text/html'
+ request.body # Request-Body des Client (siehe unten)
+ request.scheme # "http"
+ request.script_name # "/example"
+ request.path_info # "/foo"
+ request.port # 80
+ request.request_method # "GET"
+ request.query_string # ""
+ request.content_length # Länge des request.body
+ request.media_type # Medientypus von request.body
+ request.host # "example.com"
+ request.get? # true (ähnliche Methoden für andere Verben)
+ request.form_data? # false
+ request["IRGENDEIN_HEADER"] # Wert von IRGENDEIN_HEADER header
+ request.referrer # Der Referrer des Clients oder '/'
+ request.user_agent # User-Agent (verwendet in der :agent Bedingung)
+ request.cookies # Hash des Browser-Cookies
+ request.xhr? # Ist das hier ein Ajax-Request?
+ request.url # "http://example.com/example/foo"
+ request.path # "/example/foo"
+ request.ip # IP-Adresse des Clients
+ request.secure? # false (true wenn SSL)
+ request.forwarded? # true (Wenn es hinter einem Reverse-Proxy verwendet wird)
+ request.env # vollständiger env-Hash von Rack übergeben
end
Manche Optionen, wie etwa script_name oder path_info, sind
@@ -1292,10 +1326,7 @@ Diese Einstellungen sind über +settings+ erreichbar:
[public] Das öffentliche Verzeichnis, aus dem Daten zur Verfügung
gestellt werden können.
-[reload_templates] Entscheidet, ob Templates zwischen Anfragen neu geladen
- werden sollen oder nicht. Unter Ruby 1.8.6 ist es im
- Entwicklungsmodus eingeschaltet (um einen Fehler in Ruby
- auszugleichen, der ein Speicherleck verursacht).
+[reload_templates] Im development-Modus aktiviert.
[root] Wurzelverzeichnis des Projekts.
@@ -1638,6 +1669,47 @@ andere Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein
get('/') { "Hallo #{session['user_name']}." }
end
+=== Dynamische Applikationserstellung
+
+Manche Situationen erfordern die Erstellung neuer Applikationen zur Laufzeit,
+ohne dass sie einer Konstanten zugeordnet werden. Dies lässt sich mit
+`Sinatra.new` erreichen:
+
+ require 'sinatra/base'
+ my_app = Sinatra.new { get('/') { "hallo" } }
+ my_app.run!
+
+
+Die Applikation kann mit Hilfe eines optionalen Parameters erstellt werden:
+
+ require 'sinatra/base'
+
+ controller = Sinatra.new do
+ enable :logging
+ helpers MyHelpers
+ end
+
+ map('/a') do
+ run Sinatra.new(controller) { get('/') { 'a' } }
+ end
+
+ map('/b') do
+ run Sinatra.new(controller) { get('/') { 'b' } }
+ end
+
+Das ist besonders dann interessant, wenn Sinatra-Erweiterungen getestet werden
+oder Sinatra in einer Bibliothek Verwendung findet.
+
+Ebenso lassen sich damit hervorragend Sinatra-Middlewares erstellen:
+
+ require 'sinatra/base'
+
+ use Sinatra do
+ get('/') { ... }
+ end
+
+ run RailsProject::Application
+
== Geltungsbereich und Bindung
@@ -1672,6 +1744,7 @@ Im Anwendungs-Scope befindet man sich:
* In Methoden, die von Erweiterungen definiert werden.
* Im Block, der an +helpers+ übergeben wird.
* In Procs und Blöcken, die an +set+ übergeben werden.
+* Der an Sinatra.new übergebene Block
Auf das Scope-Objekt (die Klasse) kann wie folgt zugegriffen werden:
@@ -1751,20 +1824,8 @@ Die Optionen sind:
== Systemanforderungen
-Es wird empfohlen, Sinatra unter Ruby 1.8.7, 1.9.2, JRuby oder Rubinius zu
-installieren.
-
Die folgenden Versionen werden offiziell unterstützt:
-[ Ruby 1.8.6 ]
- Es wird nicht empfohlen, 1.8.6 für Sinatra einzusetzen. Trotzdem wird es
- offiziell bis Sinatra 1.3.0 unterstützt werden. RDoc- und CoffeeScript-
- Templates werden in dieser Version nicht unterstützt. 1.8.6 hat ein größeres
- Speicherleck in seiner Hash-Implementation, das von Sinatra-Versionen vor
- 1.1.1 ausgelöst wird. Die aktuelle Version verhindert das zwar explizit, aber
- unter Einbußen in der Performance. Ebenso muss Sinatra mit Rack 1.1.x laufen,
- da Rack >= 1.2 Ruby 1.8.6 nicht mehr unterstützt.
-
[ Ruby 1.8.7 ]
1.8.7 wird vollständig unterstützt, aber solange nichts dagegen spricht,
wird ein Update auf 1.9.2 oder ein Umstieg auf JRuby/Rubinius empfohlen.
@@ -1786,6 +1847,8 @@ Die folgenden Versionen werden offiziell unterstützt:
Unterstützung für C-Erweiterungen sind zur Zeit noch experimenteller Natur,
betrifft im Moment aber nur RDiscount.
+Ruby 1.8.6 wird nicht weiter unterstützt.
+
Weiterhin werden wir auf kommende Ruby-Versionen ein Auge haben.
Die nachfolgend aufgeführten Ruby-Implementationen werden offiziell nicht von
@@ -1794,6 +1857,7 @@ Sinatra unterstützt, funktionieren aber normalerweise:
* Ältere Versionen von JRuby und Rubinius
* MacRuby, Maglev, IronRuby
* Ruby 1.9.0 und 1.9.1
+* Ruby 1.8.6 mit {backports}[https://github.com/marcandre/backports/#readme]
Nicht offiziell unterstützt bedeutet, dass wenn Sachen nicht funktionieren,
wir davon ausgehen, dass es nicht an Sinatra sondern an der jeweiligen