Update the table of contents and fixed some links.

This commit is contained in:
michelc 2013-07-30 13:53:30 +02:00
parent 2521711581
commit ee8d1d6141
1 changed files with 247 additions and 59 deletions

View File

@ -26,6 +26,91 @@ Le résultat est visible sur : http://localhost:4567
Il est recommandé d'exécuter également `gem install thin`, pour que
Sinatra utilise le server Thin quand il est disponible.
## Table des matières
* [Sinatra](#sinatra)
* [Table des matières](#table-des-matières)
* [Routes](#routes)
* [Conditions](#conditions)
* [Valeurs de retour](#valeurs-de-retour)
* [Masques de route spécifiques](#masques-de-route-spécifiques)
* [Fichiers statiques](#fichiers-statiques)
* [Vues / Templates](#vues--templates)
* [Templates littéraux](#templates-littéraux)
* [Langages de template disponibles](#langages-de-template-disponibles)
* [Templates Haml](#templates-haml)
* [Templates Erb](#templates-erb)
* [Templates Builder](#templates-builder)
* [Templates Nokogiri](#templates-nokogiri)
* [Templates Sass](#templates-sass)
* [Templates SCSS](#templates-scss)
* [Templates Less](#templates-less)
* [Templates Liquid](#templates-liquid)
* [Templates Markdown](#templates-markdown)
* [Templates Textile](#templates-textile)
* [Templates RDoc](#templates-rdoc)
* [Templates Radius](#templates-radius)
* [Templates Markaby](#templates-markaby)
* [Templates RABL](#templates-rabl)
* [Templates Slim](#templates-slim)
* [Templates Creole](#templates-creole)
* [Templates CoffeeScript](#templates-coffeescript)
* [Templates Stylus](#templates-stylus)
* [Templates Yajl](#templates-yajl)
* [Templates WLang](#templates-wlang)
* [Accéder aux variables dans un Template](#accéder-aux-variables-dans-un-template)
* [Templates avec `yield` et layouts imbriqués](#templates-avec-yield-et-layouts-imbriqués)
* [Templates dans le fichier source](#templates-dans-le-fichier-source)
* [Templates nommés](#templates-nommés)
* [Associer des extensions de fichier](#associer-des-extensions-de-fichier)
* [Ajouter son propre moteur de rendu](#ajouter-son-propre-moteur-de-rendu)
* [Filtres](#filtres)
* [Helpers](#helpers)
* [Utiliser les sessions](#utiliser-les-sessions)
* [Halt](#halt)
* [Passer](#passer)
* [Déclencher une autre route](#déclencher-une-autre-route)
* [Définir le corps, le code retour et les entêtes](#définir-le-corps-le-code-retour-et-les-entêtes)
* [Faire du streaming](#faire-du-streaming)
* [Journalisation (Logging)](#journalisation-logging)
* [Types Mime](#types-mime)
* [Former des URLs](#former-des-urls)
* [Redirection du navigateur](#redirection-du-navigateur)
* [Contrôle du cache](#contrôle-du-cache)
* [Envoyer des fichiers](#envoyer-des-fichiers)
* [Accéder à l'objet requête](#accéder-à-lobjet-requête)
* [Fichiers joints](#fichiers-joints)
* [Gérer Date et Time](#gérer-date-et-time)
* [Chercher les fichiers de templates](#chercher-les-fichiers-de-templates)
* [Configuration](#configuration)
* [Se protéger des attaques](#se-protéger-des-attaques)
* [Paramètres disponibles](#paramètres-disponibles)
* [Environements](#environements)
* [Gérer les erreurs](#gérer-les-erreurs)
* [NotFound](#notfound)
* [Error](#error)
* [Les Middlewares Rack](#les-middlewares-rack)
* [Tester](#tester)
* [Sinatra::Base - Les Middlewares, Bibliothèques, et Applications Modulaires](#sinatrabase---les-middlewares-bibliothèques-et-applications-modulaires)
* [Style modulaire vs. style classique](#style-modulaire-vs-style-classique)
* [Servir une application modulaire](#servir-une-application-modulaire)
* [Utiliser une application de style classique avec un fichier config.ru](#utiliser-une-application-de-style-classique-avec-un-fichier-configru)
* [Quand utiliser un fichier config.ru ?](#quand-utiliser-un-fichier-configru-)
* [Utiliser Sinatra comme Middleware](#utiliser-sinatra-comme-middleware)
* [Création dynamique d'applications](#création-dynamique-dapplications)
* [Contextes et Binding](#contextes-et-binding)
* [Contexte de l'application/classe](#contexte-de-lapplication-classe)
* [Contexte de la requête/instance](#contexte-de-la-requête-instance)
* [Le contexte de délégation](#le-contexte-de-délégation)
* [Ligne de commande](#ligne-de-commande)
* [Configuration nécessaire](#configuration-nécessaire)
* [Essuyer les plâtres](#essuyer-les-plâtres)
* [Avec Bundler](#avec-bundler)
* [Faites le vous-même](#faites-le-vous-même)
* [Installez globalement](#installez-globalement)
* [Versions](#versions)
* [Mais encore](#mais-encore)
## Routes
Dans Sinatra, une route est une méthode HTTP couplée à un masque (pattern)
@ -131,7 +216,7 @@ A ce propos, à moins d'avoir désactivé la protection contre les attaques par
"path transversal" (voir plus loin), l'URL demandée peut avoir été modifiée
avant d'être comparée à vos routes.
### Conditions
## Conditions
Les routes peuvent définir toutes sortes de conditions, comme par exemple le
"user agent" :
@ -197,7 +282,7 @@ get "/reserve/aux/admins/", :auth => :admin do
end
```
### Valeurs de retour
## Valeurs de retour
La valeur renvoyée par le bloc correspondant à une route constitue le corps de
la réponse qui sera transmise au client HTTP ou du moins au prochain middleware
@ -232,7 +317,7 @@ Vous pouvez aussi utiliser le helper `stream` (présenté un peu plus loin) pour
éviter la surcharge et intégrer le traitement relatif au streaming dans le bloc
de code de la route.
### Masques de route spécifiques
## Masques de route spécifiques
Comme cela a été vu auparavant, Sinatra offre la possibilité d'utiliser des
masques sous forme de chaines de caractères ou des expressions régulières
@ -423,6 +508,16 @@ ce cas, utilisez `:'sous_repertoire/template'`). Il faut utiliser
un symbole car les méthodes de rendu évaluent le contenu des chaînes de
caractères au lieu de les considérer comme un chemin vers un fichier.
### Templates littéraux
``` ruby
get '/' do
haml '%div.title Bonjour le monde'
end
```
Générera le code du template spécifié dans la chaîne de caractères.
### Langages de template disponibles
Certains langages ont plusieurs implémentations. Pour préciser l'implémentation
@ -434,12 +529,12 @@ require 'rdiscount' # ou require 'bluecloth'
get('/') { markdown :index }
```
### Templates Haml
#### Templates Haml
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://haml.info/">haml</a></td>
<td><a href="http://haml.info/" title="haml">haml</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -451,12 +546,15 @@ get('/') { markdown :index }
</tr>
</table>
### Templates Erb
#### Templates Erb
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://www.kuwata-lab.com/erubis/">erubis</a> ou erb (inclus avec Ruby)</td>
<td>
<a href="http://www.kuwata-lab.com/erubis/" title="erubis">erubis</a>
ou erb (inclus avec Ruby)
</td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -468,12 +566,14 @@ get('/') { markdown :index }
</tr>
</table>
### Templates Builder
#### Templates Builder
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://builder.rubyforge.org/">builder</a></td>
<td>
<a href="http://builder.rubyforge.org/" title="builder">builder</a>
</td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -488,12 +588,12 @@ get('/') { markdown :index }
Ce moteur accepte également un bloc pour des templates en ligne (voir
exemple).
### Templates Nokogiri
#### Templates Nokogiri
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://nokogiri.org/">nokogiri</a></td>
<td><a href="http://nokogiri.org/" title="nokogiri">nokogiri</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -509,12 +609,12 @@ exemple).
Ce moteur accepte également un bloc pour des templates en ligne (voir
exemple).
### Templates Sass
#### Templates Sass
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://sass-lang.com/">sass</a></td>
<td><a href="http://sass-lang.com/" title="sass">sass</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -526,12 +626,12 @@ exemple).
</tr>
</table>
### Templates SCSS
#### Templates SCSS
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://sass-lang.com/">sass</a></td>
<td><a href="http://sass-lang.com/" title="sass">sass</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -544,12 +644,12 @@ exemple).
</tr>
</table>
### Templates Less
#### Templates Less
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://www.lesscss.org/">less</a></td>
<td><a href="http://www.lesscss.org/" title="less">less</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -562,12 +662,12 @@ exemple).
</tr>
</table>
### Templates Liquid
#### Templates Liquid
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://www.liquidmarkup.org/">liquid</a></td>
<td><a href="http://www.liquidmarkup.org/" title="liquid">liquid</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -583,12 +683,19 @@ Comme vous ne pouvez appeler de méthodes Ruby (autres que `yield`)
dans un template Liquid, vous aurez sûrement à lui passer des variables
locales.
### Templates Markdown
#### Templates Markdown
<table>
<tr>
<td><p>Dépendances</p></td>
<td><a href="https://github.com/rtomayko/rdiscount">rdiscount</a>, <a href="https://github.com/vmg/redcarpet">redcarpet</a>, <a href="http://deveiate.org/projects/BlueCloth">bluecloth</a>, <a href="http://kramdown.rubyforge.org/">kramdown</a> *ou* <a href="http://maruku.rubyforge.org/">maruku</a></td>
<td>
Au choix :
<a href="https://github.com/rtomayko/rdiscount" title="RDiscount">RDiscount</a>,
<a href="https://github.com/vmg/redcarpet" title="RedCarpet">RedCarpet</a>,
<a href="http://deveiate.org/projects/BlueCloth" title="BlueCloth">BlueCloth</a>,
<a href="http://kramdown.rubyforge.org/" title="kramdown">kramdown</a>,
<a href="http://maruku.rubyforge.org/" title="maruku">maruku</a>
</td>
</tr>
<tr>
@ -622,12 +729,12 @@ pouvez pas utiliser de layouts écrits en Markdown. Toutefois, il
est possible dutiliser un moteur de rendu différent pour le template et
pour le layout en utilisant loption `:layout_engine`.
### Templates Textile
#### Templates Textile
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://redcloth.org/">RedCloth</a></td>
<td><a href="http://redcloth.org/" title="RedCloth">RedCloth</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -660,12 +767,12 @@ pas utiliser de layouts écrits en Textile. Toutefois, il est
possible dutiliser un moteur de rendu différent pour le template et
pour le layout en utilisant loption `:layout_engine`.
### Templates RDoc
#### Templates RDoc
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://rdoc.rubyforge.org/">rdoc</a></td>
<td><a href="http://rdoc.rubyforge.org/" title="RDoc">RDoc</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -698,11 +805,11 @@ pas utiliser de layouts écrits en RDoc. Toutefois, il est
possible dutiliser un moteur de rendu différent pour le template et
pour le layout en utilisant loption `:layout_engine`.
### Templates Radius
#### Templates Radius
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://radius.rubyforge.org/">radius</a></td>
<td><a href="http://radius.rubyforge.org/" title="Radius">Radius</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -717,12 +824,12 @@ pour le layout en utilisant loption `:layout_engine`.
Comme vous ne pouvez pas appeler de méthodes Ruby depuis un template
Radius, vous aurez sûrement à lui passer des variables locales.
### Templates Markaby
#### Templates Markaby
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://markaby.github.com/">markaby</a></td>
<td><a href="http://markaby.github.com/" title="Markaby">Markaby</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -737,12 +844,12 @@ Radius, vous aurez sûrement à lui passer des variables locales.
Ce moteur accepte également un bloc pour des templates en ligne (voir
exemple).
### Templates RABL
#### Templates RABL
<table>
<tr>
<td>Dépendances</td>
<td><a href="https://github.com/nesquena/rabl">rabl</a></td>
<td><a href="https://github.com/nesquena/rabl" title="Rabl">Rabl</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -754,12 +861,12 @@ exemple).
</tr>
</table>
### Templates Slim
#### Templates Slim
<table>
<tr>
<td>Dépendances</td>
<td><a href="http://slim-lang.com/">slim</a></td>
<td><a href="http://slim-lang.com/" title="Slim Lang">Slim Lang</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -771,12 +878,12 @@ exemple).
</tr>
</table>
### Templates Creole
#### Templates Creole
<table>
<tr>
<td>Dépendances</td>
<td><a href="https://github.com/minad/creole">creole</a></td>
<td><a href="https://github.com/minad/creole" title="Creole">Creole</a></td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -809,12 +916,19 @@ pas utiliser de layouts écrits en Creole. Toutefois, il est possible
d'utiliser un moteur de rendu différent pour le template et pour le layout
en utilisant l'option `:layout_engine`.
### Templates CoffeeScript
#### Templates CoffeeScript
<table>
<tr>
<td>Dépendances</td>
<td><a href="https://github.com/josh/ruby-coffee-script">coffee-script</a> et un [moyen d'exécuter javascript](https://github.com/sstephenson/execjs/blob/master/README.md#readme)</td>
<a href="https://github.com/josh/ruby-coffee-script" title="Ruby CoffeeScript">
CoffeeScript
</a>
et un
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
moyen d'exécuter javascript
</a>
</td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -826,12 +940,52 @@ en utilisant l'option `:layout_engine`.
</tr>
</table>
### Templates Yajl
#### Templates Stylus
<table>
<tr>
<td>Dépendances</td>
<td><a href="https://github.com/brianmario/yajl-ruby">yajl-ruby</a></td>
<td>
<a href="https://github.com/lucasmazza/ruby-stylus" title="Ruby Stylus">
Stylus
</a>
et un
<a href="https://github.com/sstephenson/execjs/blob/master/README.md#readme" title="ExecJS">
moyen d'exécuter javascript
</a>
</td>
</tr>
<tr>
<td>Extensions de fichier</td>
<td><tt>.styl</tt></td>
</tr>
<tr>
<td>Exemple</td>
<td><tt>stylus :index</tt></td>
</tr>
</table>
Avant de pouvoir utiliser des templates Stylus, vous devez auparavant charger
`stylus` et `stylus/tilt` :
``` ruby
require 'sinatra'
require 'stylus'
require 'stylus/tilt'
get '/' do
stylus :exemple
end
```
#### Templates Yajl
<table>
<tr>
<td>Dépendances</td>
<td>
<a href="https://github.com/brianmario/yajl-ruby" title="yajl-ruby">yajl-ruby</a>
</td>
</tr>
<tr>
<td>Extensions de fichier</td>
@ -852,40 +1006,34 @@ json = { :foo => 'bar' }
json[:baz] = key
```
Les options `:callback` et `:variable` peuvent être utilisées pour décorer lobjet retourné.
Les options `:callback` et `:variable` peuvent être utilisées pour décorer
lobjet retourné.
```
var resource = {"foo":"bar","baz":"qux"}; present(resource);</pre>
```
### Templates WLang
#### Templates WLang
<table>
<tr>
<td>Dependency</td>
<td><a href="https://github.com/blambeau/wlang/">wlang</a></td>
<td>Dépendances</td>
<td><a href="https://github.com/blambeau/wlang/" title="wlang">wlang</a></td>
</tr>
<tr>
<td>File Extensions</td>
<td>Extensions de fichier</td>
<td><tt>.wlang</tt></td>
</tr>
<tr>
<td>Example</td>
<td>Exemple</td>
<td><tt>wlang :index, :locals => { :key => 'value' }</tt></td>
</tr>
</table>
Lappel de code ruby au sein des templates nest pas idiomatique en wlang. Lécriture de templates sans logique est encouragé, via le passage de variables locales. Il est néanmoins possible décrire un layout en wlang et dy utiliser `yield`.
### Templates embarqués
``` ruby
get '/' do
haml '%div.title Bonjour le monde'
end
```
Générera le code du template spécifié dans la chaîne de caractères.
Lappel de code ruby au sein des templates nest pas idiomatique en wlang.
Lécriture de templates sans logique est encouragé, via le passage de variables
locales. Il est néanmoins possible décrire un layout en wlang et dy utiliser
`yield`.
### Accéder aux variables dans un Template
@ -913,6 +1061,44 @@ Ceci est généralement utilisé lorsque l'on veut utiliser un template comme
partiel (depuis un autre template) et qu'il est donc nécessaire d'adapter les
noms de variables.
### Templates avec `yield` et layouts imbriqués
A layout is usually just a template that calls `yield`.
Such a template can be used either through the `:template` option as
described above, or it can be rendered with a block as follows:
``` ruby
erb :post, :layout => false do
erb :index
end
```
This code is mostly equivalent to `erb :index, :layout => :post`.
Passing blocks to rendering methods is most useful for creating nested
layouts:
``` ruby
erb :main_layout, :layout => false do
erb :admin_layout do
erb :user
end
end
```
This can also be done in fewer lines of code with:
``` ruby
erb :admin_layout, :layout => :main_layout do
erb :user
end
```
Currently the following rendering method accept a block: `erb`, `haml`,
`liquid`, `slim `, `wlang`.
Also the general `render` method accepts a block.
### Templates dans le fichier source
Des templates peuvent être définis dans le fichier source comme ceci :
@ -939,6 +1125,7 @@ sont automatiquement chargés. Si vous avez des templates dans d'autres
fichiers source, il faut explicitement les déclarer avec
`enable :inline_templates`.
### Templates nommés
Les templates peuvent aussi être définis grâce à la méthode de haut niveau `template` :
@ -1309,6 +1496,8 @@ evented (ie non threadés) tels que Thin et Rainbows. Les autres serveurs
fermeront malgré tout le flux :
``` ruby
# interrogation prolongée
set :server, :thin
connections = []
@ -2641,7 +2830,7 @@ sudo rake install
## Versions
Sinatra se conforme aux (versions sémantiques)[http://semver.org/], aussi bien
Sinatra se conforme aux [versions sémantiques](http://semver.org/), aussi bien
SemVer que SemVerTag.
## Mais encore
@ -2652,9 +2841,8 @@ SemVer que SemVerTag.
bug ? Besoin d'aide ? Vous avez un patch ?
* [Suivi des problèmes](http://github.com/sinatra/sinatra/issues)
* [Twitter](http://twitter.com/sinatra)
* [Mailing List])(http://groups.google.com/group/sinatrarb/topics)
* [Mailing List](http://groups.google.com/group/sinatrarb/topics)
* [IRC : #sinatra](irc://chat.freenode.net/#sinatra) sur http://freenode.net
* [IRC : #sinatra](irc://chat.freenode.net/#sinatra) on http://freenode.net
* [Sinatra Book](http://sinatra-book.gittr.com) Tutoriels et recettes
* [Sinatra Recipes](http://recipes.sinatrarb.com/) trucs et astuces rédigés par
la communauté