diff --git a/README.de.rdoc b/README.de.rdoc index 02a9a51e..f519acca 100644 --- a/README.de.rdoc +++ b/README.de.rdoc @@ -44,7 +44,7 @@ definiert. Jeder dieser Routen wird ein Ruby-Block zugeordnet: end options '/' do - .. lege etwas fest .. + .. zeige, was wir können .. end Die Routen werden in der Reihenfolge durchlaufen, in der sie definiert wurden. @@ -78,6 +78,12 @@ Routen-Muster können auch mit Splat- oder Wildcard-Parametern über das params[:splat] # => ["pfad/zu/datei", "xml"] end +Oder mit Block-Parametern: + + get '/download/*.*' do |pfad, endung| + [pfad, endung] # => ["Pfad/zu/Datei", "xml"] + end + Routen mit regulären Ausdrücken sind auch möglich: get %r{/hallo/([\w]+)} do @@ -313,7 +319,7 @@ Dieser Code rendert ./views/index.nokogiri. === Sass-Templates -Das +haml+- oder +sass+-Gem wird benötigt, um Sass-Templates rendern zu können: +Das +sass+-Gem wird benötigt, um Sass-Templates rendern zu können: # sass muss eingebunden werden require 'sass' @@ -337,7 +343,7 @@ und individuell überschrieben werden. === SCSS-Templates -Das +haml+- oder +sass+-Gem wird benötigt, um SCSS-Templates rendern zu können: +Das +sass+-Gem wird benötigt, um SCSS-Templates rendern zu können: # sass muss eingebunden werden require 'sass' @@ -650,7 +656,7 @@ Oder durch einen expliziten Hash von lokalen Variablen: get '/:id' do foo = Foo.find(params[:id]) - haml '%h1= foo.name', :locals => { :foo => foo } + haml '%h1= bar.name', :locals => { :bar => foo } end Dies wird typischerweise bei Verwendung von Subtemplates (partials) in anderen @@ -702,7 +708,7 @@ verwendet. Durch :layout => false kann das Ausführen verhindert werden: get '/' do - haml :index, :layout => !request.xhr? + haml :index, :layout => request.xhr? end === Dateiendungen zuordnen @@ -968,8 +974,10 @@ Wenn send_file oder statische Dateien verwendet werden, kann es vorkommen, dass Sinatra den Mime-Typ nicht kennt. Registriert wird dieser mit +mime_type+ per Dateiendung: - mime_type :foo, 'text/foo' - + configure do + mime_type :foo, 'text/foo' + end + Es kann aber auch der +content_type+-Helfer verwendet werden: get '/' do @@ -1478,10 +1486,17 @@ URL-Routing, Authentifizierung und Session-Verarbeitung. Sinatra verwendet viele von diesen Komponenten automatisch, abhängig von der Konfiguration. So muss +use+ häufig nicht explizit verwendet werden. +Hilfreiche Middleware gibt es z.B. hier: +{rack}[https://github.com/rack/rack/tree/master/lib/rack], +{rack-contrib}[https://github.com/rack/rack-contrib#readme], +mit {CodeRack}[http://coderack.org/] oder im +{Rack wiki}[https://github.com/rack/rack/wiki/List-of-Middleware]. + == Testen Sinatra-Tests können mit jedem auf Rack aufbauendem Test-Framework geschrieben -werden. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] wird empfohlen: +werden. {Rack::Test}[http://rdoc.info/github/brynary/rack-test/master/frames] +wird empfohlen: require 'my_sinatra_app' require 'test/unit' @@ -1510,9 +1525,6 @@ werden. {Rack::Test}[http://gitrdoc.com/brynary/rack-test] wird empfohlen: end end -Anmerkung: Das eingebaute Sinatra::Test-Modul und die -Sinatra::TestHarness-Klasse werden seit Version 0.9.2 nicht mehr unterstützt. - == Sinatra::Base - Middleware, Bibliotheken und modulare Anwendungen Das Definieren einer Top-Level-Anwendung funktioniert gut für @@ -1521,9 +1533,9 @@ Middleware, Rails Metal, einfache Bibliotheken mit Server-Komponenten oder auch Sinatra-Erweiterungen geschrieben werden sollen. Die Top-Level-DSL belastet den Objekt-Namespace und setzt einen -Mikro-Anwendungsstil voraus (eine einzelne Anwendungsdatei, ./public und -./views Ordner, Logging, Exception-Detail-Seite, usw.). Genau hier kommt -Sinatra::Base ins Spiel: +Mikro-Anwendungsstil voraus (eine einzelne Anwendungsdatei, ./public +und ./views Ordner, Logging, Exception-Detail-Seite, usw.). Genau +hier kommt Sinatra::Base ins Spiel: require 'sinatra/base' @@ -1543,15 +1555,15 @@ Server-Komponente einer Bibliothek: MyApp.run! :host => 'localhost', :port => 9090 -Die Methoden der Sinatra::Base-Subklasse sind genau dieselben wie die der -Top-Level-DSL. Die meisten Top-Level-Anwendungen können mit nur zwei -Veränderungen zu Sinatra::Base-Komponenten konvertiert werden: +Die Methoden der Sinatra::Base-Subklasse sind genau dieselben wie die +der Top-Level-DSL. Die meisten Top-Level-Anwendungen können mit nur zwei +Veränderungen zu Sinatra::Base konvertiert werden: * Die Datei sollte require 'sinatra/base' anstelle von require 'sinatra/base' aufrufen, ansonsten werden alle von Sinatras DSL-Methoden in den Top-Level-Namespace importiert. * Alle Routen, Error-Handler, Filter und Optionen der Applikation müssen in - einer Subklasse von Sinatra::Base definiert werden. + einer Subklasse von Sinatra::Base definiert werden. Sinatra::Base ist ein unbeschriebenes Blatt. Die meisten Optionen sind per Standard deaktiviert. Das betrifft auch den eingebauten Server. Siehe @@ -1581,7 +1593,7 @@ Unterschiede beachtet werden: Szenario Classic Modular - app_file file loading sinatra nil + app_file sinatra ladende Datei Sinatra::Base subklassierende Datei run $0 == app_file false logging true false method_override true false @@ -1663,7 +1675,7 @@ andere Sinatra-Anwendung handeln, es kann jede andere Rack-Anwendung sein get('/login') { haml :login } post('/login') do - if params[:name] = 'admin' and params[:password] = 'admin' + if params[:name] == 'admin' && params[:password] == 'admin' session['user_name'] = params[:name] else redirect '/login' @@ -1731,12 +1743,13 @@ Verfügung stehen. === Anwendungs- oder Klassen-Scope -Jede Sinatra-Anwendung entspricht einer Sinatra::Base-Subklasse. Falls die Top- -Level-DSL verwendet wird (require 'sinatra'), handelt es sich um -Sinatra::Application, andernfalls ist es jene Subklasse, die explizit angelegt -wurde. Auf Klassenebene stehen Methoden wie +get+ oder +before+ zur Verfügung, -es gibt aber keinen Zugriff auf das +request+-Object oder die +session+, da nur -eine einzige Klasse für alle eingehenden Anfragen genutzt wird. +Jede Sinatra-Anwendung entspricht einer Sinatra::Base-Subklasse. Falls +die Top- Level-DSL verwendet wird (require 'sinatra'), handelt es sich +um Sinatra::Application, andernfalls ist es jene Subklasse, die +explizit angelegt wurde. Auf Klassenebene stehen Methoden wie +get+ oder ++before+ zur Verfügung, es gibt aber keinen Zugriff auf das +request+-Object +oder die +session+, da nur eine einzige Klasse für alle eingehenden Anfragen +genutzt wird. Optionen, die via +set+ gesetzt werden, sind Methoden auf Klassenebene: @@ -1853,9 +1866,11 @@ Die folgenden Versionen werden offiziell unterstützt: sollte aber darauf geachtet werden, dass ein JRuby-Rack-Handler zum Einsatz kommt – der Thin-Web-Server wird bisher nicht unterstütz. JRubys Unterstützung für C-Erweiterungen sind zur Zeit noch experimenteller Natur, - betrifft im Moment aber nur RDiscount. + betrifft im Moment aber nur RDiscount und Redcarpet. -Ruby 1.8.6 wird nicht weiter unterstützt. +Ruby 1.8.6 wird nicht weiter unterstützt. Falls Sinatra trotzdem unter +1.8.6 eingesetzt wird, muss Sinatra 1.2 verwendet werden, dass noch bis zum +Release von Sinatra 1.4.0 mit kleinen Bugfixes versorgt werden wird. Weiterhin werden wir auf kommende Ruby-Versionen ein Auge haben. @@ -1865,7 +1880,6 @@ 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 @@ -1964,13 +1978,15 @@ SemVer und SemVerTag. * {Projekt-Website}[http://sinatra.github.com/] - Ergänzende Dokumentation, News und Links zu anderen Ressourcen. -* {Hilfe beisteuern}[http://sinatra.github.com/contributing.html] - Einen +* {Mitmachen}[http://sinatra.github.com/contributing.html] - Einen Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch? * {Issue-Tracker}[http://github.com/sinatra/sinatra/issues] * {Twitter}[http://twitter.com/sinatra] * {Mailing-Liste}[http://groups.google.com/group/sinatrarb] * {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] auf http://freenode.net - +* {Sinatra Book}[http://sinatra-book.gittr.com] Kochbuch Tutorial +* {Sinatra Book Contrib}[http://sinatra-book-contrib.com/] Sinatra-Rezepte aus + der Community * API Dokumentation für die {aktuelle Version}[http://rubydoc.info/gems/sinatra] oder für {HEAD}[http://rubydoc.info/github/sinatra/sinatra] auf http://rubydoc.info