Readme[.de].rdoc update
Fixed some small typos in the English Readme and updated the German Readme to the current English version. Signed-off-by: Konstantin Haase <konstantin.mailinglists@googlemail.com>
This commit is contained in:
parent
06ebbd97c0
commit
b9d49cfd73
177
README.de.rdoc
177
README.de.rdoc
|
@ -18,10 +18,13 @@ Einfach via +rubygems+ installieren und starten:
|
|||
|
||||
Die Seite kann nun unter http://localhost:4567 betrachtet werden.
|
||||
|
||||
Es wird empfohlen den Thin Server via <tt>gem install thin</tt> zu installieren,
|
||||
den Sinatra, soweit vorhanden, dann automatisch verwendet.
|
||||
|
||||
== Routen
|
||||
|
||||
In Sinatra wird eine Route durch eine HTTP-Methode und ein URL-Muster
|
||||
definiert. Jeder dieser Routen wird ein Ruby-Block zugeordnet.
|
||||
definiert. Jeder dieser Routen wird ein Ruby-Block zugeordnet:
|
||||
|
||||
get '/' do
|
||||
.. zeige etwas ..
|
||||
|
@ -62,7 +65,7 @@ Man kann auf diese auch mit Blockparametern zugreifen:
|
|||
end
|
||||
|
||||
Routenmuster können auch mit Splat- oder Wildcardparametern über das
|
||||
<tt>params[:splat]</tt> Array angesprochen werden.
|
||||
<tt>params[:splat]</tt> Array angesprochen werden:
|
||||
|
||||
get '/sag/*/zu/*' do
|
||||
# passt auf /sag/hallo/zu/welt
|
||||
|
@ -156,6 +159,46 @@ Damit lässt sich relativ einfach Streaming implementieren:
|
|||
|
||||
get('/') { Stream.new }
|
||||
|
||||
===Eigene Routenmuster
|
||||
Wie oben schon beschrieben, ist Sinatra von Haus aus mit Unterstützung für
|
||||
String Muster und Reguläre Ausdrücke zum Abgleichen von Routen ausgestattet.
|
||||
Das muss aber noch nicht alles sein, man kann ohne größeren Aufwand auch
|
||||
eigene Routenmuster erstellen:
|
||||
|
||||
class AllButPattern
|
||||
Match = Struct.new(:captures)
|
||||
|
||||
def initialize(except)
|
||||
@except = except
|
||||
@captures = Match.new([])
|
||||
end
|
||||
|
||||
def match(str)
|
||||
@captures unless @except === str
|
||||
end
|
||||
end
|
||||
|
||||
def all_but(pattern)
|
||||
AllButPattern.new(pattern)
|
||||
end
|
||||
|
||||
get all_but("/index") do
|
||||
# ...
|
||||
end
|
||||
|
||||
Beachte, dass das obige Beispiel etwas übertrieben wirkt. Es geht auch leichter:
|
||||
|
||||
get // do
|
||||
pass if request.path_info == "/index"
|
||||
# ...
|
||||
end
|
||||
|
||||
Oder unter Verwendung eines negativen look ahead:
|
||||
|
||||
get %r{^(?!/index$)} do
|
||||
# ...
|
||||
end
|
||||
|
||||
== Statische Dateien
|
||||
|
||||
Statische Dateien werden aus dem <tt>./public</tt> Ordner ausgeliefert. Es ist
|
||||
|
@ -407,6 +450,7 @@ Ebenso ist es möglich Markdown mit BlueCloth anstelle von RDiscount zu parsen:
|
|||
end
|
||||
|
||||
Das sollte <tt>./views/index.md</tt> mit BlueCloth rendern.
|
||||
|
||||
=== Textile-Templates
|
||||
|
||||
Das +redcloth+ gem wird benötigt, um Textile-Templates rendern zu können:
|
||||
|
@ -460,7 +504,7 @@ mit <tt>./views/post.haml</tt> als Layout rendern.
|
|||
|
||||
Das +rdoc+ gem wird benötigt, um RDoc-Templates rendern zu können:
|
||||
|
||||
# RDoc muss eingebunden werden
|
||||
# rdoc/markup/to_html muss eingebunden werden
|
||||
require "rdoc/markup/to_html"
|
||||
|
||||
get '/' do
|
||||
|
@ -643,13 +687,13 @@ werden:
|
|||
end
|
||||
|
||||
Wenn ein Template mit dem Namen "layout" existiert, wird es bei jedem Aufruf
|
||||
verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert werden.
|
||||
verwendet. Durch <tt>:layout => false</tt> kann das Ausführen verhindert werden:
|
||||
|
||||
get '/' do
|
||||
haml :index, :layout => !request.xhr?
|
||||
end
|
||||
|
||||
=== Datieendungen zuordnen
|
||||
=== Dateiendungen zuordnen
|
||||
|
||||
Um eine Dateiendung einer Template Engine zuzuordnen, benutzt man am besten
|
||||
<tt>Tilt.register</tt>. Wenn man zum Beispiel die Dateiendung +tt+ für Textile
|
||||
|
@ -673,7 +717,8 @@ Rendering-Methode erstellen:
|
|||
end
|
||||
|
||||
Dieser Code rendert <tt>./views/application.mtt</tt>. Siehe
|
||||
https://github.com/rtomayko/tilt um mehr über Tilt zu lernen.
|
||||
github.com/rtomayko/tilt[https://github.com/rtomayko/tilt],
|
||||
um mehr über Tilt zu lernen.
|
||||
|
||||
== Filter
|
||||
|
||||
|
@ -736,6 +781,37 @@ definiert, die in Routen und Templates verwendet werden können:
|
|||
bar(params[:name])
|
||||
end
|
||||
|
||||
===Sessions verwenden
|
||||
Sessions werden verwendet, um Zustände zwischen den Requests zu speichern.
|
||||
Sind sie aktiviert, hat man einen Session Hash pro Benutzer Session:
|
||||
|
||||
enable :sessions
|
||||
|
||||
get '/' do
|
||||
"value = " << session[:value].inspect
|
||||
end
|
||||
|
||||
get '/:value' do
|
||||
session[:value] = params[:value]
|
||||
end
|
||||
|
||||
Beachte, dass <tt>enable :sessions</tt> alle Daten in einem Cookie speichert.
|
||||
Unter Umständen kann dies negative Effekte haben, z.B. verursachen viele Daten
|
||||
höheren, teilweise überflüssigen Traffic. Um das zu vermeiden, kann man eine
|
||||
Rack Session Middleware verwenden. Dann aber *nicht* <tt>enable :sessions</tt>
|
||||
aufrufen, sondern die Middleware wie üblich in das Programm einbinden:
|
||||
|
||||
use Rack::Session::Pool, :expire_after => 2592000
|
||||
|
||||
get '/' do
|
||||
"value = " << session[:value].inspect
|
||||
end
|
||||
|
||||
get '/:value' do
|
||||
session[:value] = params[:value]
|
||||
end
|
||||
|
||||
|
||||
== Anhalten
|
||||
|
||||
Zum sofortigen stoppen eines Request in einem Filter oder einer Route:
|
||||
|
@ -758,6 +834,10 @@ Sogar mit Headers:
|
|||
|
||||
halt 402, {'Content-Type' => 'text/plain'}, 'Rache'
|
||||
|
||||
Natürlich ist es auch möglich ein Template mit +halt+ zu verwenden:
|
||||
|
||||
halt erb(:error)
|
||||
|
||||
== Weiterspringen
|
||||
|
||||
Eine Route kann mittels <tt>pass</tt> zu der nächsten passenden Route springen:
|
||||
|
@ -868,7 +948,7 @@ werden:
|
|||
redirect to('/bar')
|
||||
end
|
||||
|
||||
Weitere Parameter werden wie Argumente der +halt+ Methode behandelt:+:
|
||||
Weitere Parameter werden wie Argumente der +halt+ Methode behandelt:
|
||||
|
||||
redirect to('/bar'), 303
|
||||
redirect 'http://google.com', 'Hier bist Du falsch'
|
||||
|
@ -987,6 +1067,23 @@ Der <tt>request.body</tt> ist einn IO- oder StringIO-Objekt:
|
|||
"Hallo #{daten['name']}!"
|
||||
end
|
||||
|
||||
=== Anhänge
|
||||
|
||||
Damit der Browser erkennt, dass ein Response gespeichert werden soll und nicht
|
||||
im Browser angezeigt wird, kann der +attachment+ Helfer verwendet werden:
|
||||
|
||||
get '/' do
|
||||
attachment
|
||||
"Speichern!"
|
||||
end
|
||||
|
||||
Ebenso kann man einen Dateinamen als Parameter hinzufügen:
|
||||
|
||||
get '/' do
|
||||
attachment "info.txt"
|
||||
"Speichern!"
|
||||
end
|
||||
|
||||
|
||||
=== Nachschlagen von Template Dateien
|
||||
|
||||
|
@ -1232,7 +1329,7 @@ Alternativ kann ein Error Handler auch für Statuscode definiert werden:
|
|||
Oder ein Statuscode-Bereich:
|
||||
|
||||
error 400..510 do
|
||||
'Boom'
|
||||
'Bums'
|
||||
end
|
||||
|
||||
Sinatra setzt verschiedene <tt>not_found</tt> und <tt>error</tt>
|
||||
|
@ -1448,7 +1545,7 @@ Es ist nicht nur möglich andere Rack-Middleware mit Sinatra zu nutzen, man
|
|||
kann außerdem jede Sinatra-Anwendung selbst als Middlware vor jeden beliebigen
|
||||
Rack-Endpunkt hängen. Bei diesem Endpunkt muss es sich nicht um eine andere
|
||||
Sinatra-Anwendung handen, es kann jede andere Rack-Anwendung sein
|
||||
(Rails/Ramaze/Camping/...).
|
||||
(Rails/Ramaze/Camping/...):
|
||||
|
||||
require 'sinatra/base'
|
||||
|
||||
|
@ -1525,7 +1622,7 @@ Für jede eingehende Anfrage wird eine neue Instanz der Anwendungsklasse
|
|||
erstellt und alle Handlers werden in diesem Scope ausgeführt. Aus diesem Scope
|
||||
heraus kann man auf +request+ oder +session+ zugreifen und Methoden wie +erb+
|
||||
oder +haml+ aufrufen. Man kann mit der +settings+ Methode außerdem auf den
|
||||
Anwengungsscope zugreifen.
|
||||
Anwengungsscope zugreifen:
|
||||
|
||||
class MyApp < Sinatra::Base
|
||||
# Hey, ich bin im Anwendungsscope!
|
||||
|
@ -1562,7 +1659,8 @@ anderes +self+). Man kann mit <tt>Sinatra::Delegator.delegate
|
|||
Im Delegation-Scop befindet man sich:
|
||||
|
||||
* Im Top-Level, wenn man <tt>require 'sinatra'</tt> aufgerufen hat.
|
||||
* In einem Objekt, dass mit dem <tt>Sinatra::Delegator</tt> mixin erweitert wurde.
|
||||
* In einem Objekt, dass mit dem <tt>Sinatra::Delegator</tt> mixin erweitert
|
||||
wurde.
|
||||
|
||||
Schau am besten im Code nach: Hier ist
|
||||
{Sinatra::Delegator mixin}[http://github.com/sinatra/sinatra/blob/master/lib/sinatra/base.rb#L1064]
|
||||
|
@ -1584,6 +1682,59 @@ Die Optionen sind:
|
|||
-s # Rack Server/Handler setzen (Standard ist thin)
|
||||
-x # Mutex lock einschalten (Standard ist off)
|
||||
|
||||
== 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 Einbussen 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.
|
||||
|
||||
[ Ruby 1.9.2 ]
|
||||
1.9.2 wird unterstützt und empfohlen. Beachte, dass Markaby und Radius
|
||||
momentan noch nicht kompatibel sind mit 1.9. Version 1.9.0p0 sollte nicht
|
||||
verwendet werden, da unter Sinatra immer wieder Segfaults auftreten.
|
||||
|
||||
[ Rubinius ]
|
||||
Rubinius (rbx >= 1.2.2) wird offiziell unter Ausnahme von Textile
|
||||
Templates unterstützt.
|
||||
|
||||
[ JRuby ]
|
||||
Jruby wird offiziell unterstützt (JRuby >= 1.5.6). Probleme mit Template
|
||||
Bibliotheken Dritter sind nicht bekannt. Falls JRuby zum Einsatz kommt, sollte
|
||||
aber darauf geachtet werden, dass ein JRuby Rack Handler zum Einsatz kommen –
|
||||
der Thin Web Server wird bisher noch nicht unterstütz.
|
||||
|
||||
Weiterhin werden wir auf kommende Ruby Versionen ein Auge haben.
|
||||
|
||||
Die nachfolgend aufgeführten Ruby Implementationen werden offiziell nicht von
|
||||
Sinatra unterstützt, funktionieren aber normalerweise:
|
||||
|
||||
* Ältere Versionen von JRuby und Rubinius
|
||||
* MacRuby
|
||||
* Maglev
|
||||
* IronRuby
|
||||
* Ruby 1.9.0 und 1.9.1
|
||||
|
||||
Nicht offiziell unterstützt bedeutet, dass wenn Sachen nicht funktionieren,
|
||||
dann gehen wir davon aus, dass es nicht an Sinatra, sondern an der jeweiligen
|
||||
Implentierung liegt.
|
||||
|
||||
Sinatra sollte auf jedem Betriebssystem laufen, dass den gewählten Ruby
|
||||
Interpreter unterstützt.
|
||||
|
||||
== Der neueste Stand (The Bleeding Edge)
|
||||
Um auf dem neusten Stand zu bleiben, kannst Du den Master Branch verwenden. Er
|
||||
sollte recht stabil sein. Ebenso gibt es von Zeit zu Zeit prerelease Gems, die
|
||||
|
@ -1657,7 +1808,10 @@ so lauten:
|
|||
|
||||
sudo rake install
|
||||
|
||||
== Versionsverfahren
|
||||
|
||||
Sinatra folgt dem sog. {Semantic Versioning}[http://semver.org/], d.h. SemVer
|
||||
und SemVerTag.
|
||||
|
||||
== Mehr
|
||||
|
||||
|
@ -1669,3 +1823,4 @@ Fehler gefunden? Brauchst du Hilfe? Hast du einen Patch?
|
|||
* {Twitter}[http://twitter.com/sinatra]
|
||||
* {Mailingliste}[http://groups.google.com/group/sinatrarb]
|
||||
* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] auf http://freenode.net
|
||||
|
||||
|
|
15
README.rdoc
15
README.rdoc
|
@ -64,7 +64,7 @@ You can also access named parameters via block parameters:
|
|||
end
|
||||
|
||||
Route patterns may also include splat (or wildcard) parameters, accessible
|
||||
via the <tt>params[:splat]</tt> array.
|
||||
via the <tt>params[:splat]</tt> array:
|
||||
|
||||
get '/say/*/to/*' do
|
||||
# matches /say/hello/to/world
|
||||
|
@ -673,7 +673,7 @@ Templates may also be defined using the top-level <tt>template</tt> method:
|
|||
|
||||
If a template named "layout" exists, it will be used each time a template
|
||||
is rendered. You can individually disable layouts by passing <tt>:layout => false</tt>
|
||||
or disable them by default via <tt>set :haml, :layout => false</tt>.
|
||||
or disable them by default via <tt>set :haml, :layout => false</tt>:
|
||||
|
||||
get '/' do
|
||||
haml :index, :layout => !request.xhr?
|
||||
|
@ -974,7 +974,7 @@ You can easily set the Cache-Control header with like this:
|
|||
"cache it!"
|
||||
end
|
||||
|
||||
Pro tip: Set up caching in a before filter.
|
||||
Pro tip: Set up caching in a before filter:
|
||||
|
||||
before do
|
||||
cache_control :public, :must_revalidate, :max_age => 60
|
||||
|
@ -990,7 +990,7 @@ If you are using the +expires+ helper to set the corresponding header,
|
|||
To properly use caches, you should consider using +etag+ and +last_modified+.
|
||||
It is recommended to call those helpers *before* doing heavy lifting, as they
|
||||
will immediately flush a response if the client already has the current
|
||||
version in its cache.
|
||||
version in its cache:
|
||||
|
||||
get '/article/:id' do
|
||||
@article = Article.find params[:id]
|
||||
|
@ -1105,7 +1105,7 @@ The <tt>request.body</tt> is an IO or StringIO object:
|
|||
=== Attachments
|
||||
|
||||
You can use the +attachment+ helper to tell the browser the response should be
|
||||
stored on disk rather than displayed in the browser.
|
||||
stored on disk rather than displayed in the browser:
|
||||
|
||||
get '/' do
|
||||
attachment
|
||||
|
@ -1546,7 +1546,7 @@ with a <tt>config.ru</tt>.</b>
|
|||
Not only is Sinatra able to use other Rack middleware, any Sinatra application
|
||||
can in turn be added in front of any Rack endpoint as middleware itself. This
|
||||
endpoint could be another Sinatra application, or any other Rack-based
|
||||
application (Rails/Ramaze/Camping/...).
|
||||
application (Rails/Ramaze/Camping/...):
|
||||
|
||||
require 'sinatra/base'
|
||||
|
||||
|
@ -1686,7 +1686,7 @@ The following Ruby versions are officially supported:
|
|||
|
||||
[ Ruby 1.8.6 ]
|
||||
It is not recommended to use 1.8.6 for Sinatra. However, it will be
|
||||
officially supported until Sinatra 1.3.0 is released. RDoc and CoffeScript
|
||||
officially supported until Sinatra 1.3.0 is released. RDoc and CoffeeScript
|
||||
templates are not supported by this Ruby version. 1.8.6 includes a major
|
||||
memory leak in its Hash implementation, which is triggered by Sinatra
|
||||
versions prior to 1.1.1. The current version explicitly prevents this leak
|
||||
|
@ -1805,3 +1805,4 @@ SemVerTag.
|
|||
* {Twitter}[http://twitter.com/sinatra]
|
||||
* {Mailing List}[http://groups.google.com/group/sinatrarb/topics]
|
||||
* {IRC: #sinatra}[irc://chat.freenode.net/#sinatra] on http://freenode.net
|
||||
|
||||
|
|
Loading…
Reference in New Issue