diff --git a/README.fr.md b/README.fr.md
index 80049cba7a..68c0e0aa35 100644
--- a/README.fr.md
+++ b/README.fr.md
@@ -26,8 +26,12 @@ Puis lancez votre programme :
ruby mon_application.rb
```
-Le résultat est visible sur :
-[http://localhost:4567](http://localhost:4567)
+Le résultat est visible sur : [http://localhost:4567](http://localhost:4567)
+
+Le code que vous avez modifié ne sera pas pris en compte tant que vous ne
+redémarrerez pas le serveur. Pensez à redémarrer le serveur à chaque
+modification ou utilisez
+[sinatra/reloader](http://www.sinatrarb.com/contrib/reloader).
Il est recommandé d'exécuter également `gem install thin`, pour que
Sinatra utilise le server Thin quand il est disponible.
@@ -55,11 +59,13 @@ Sinatra utilise le server Thin quand il est disponible.
* [Templates Markdown](#templates-markdown)
* [Templates Textile](#templates-textile)
* [Templates RDoc](#templates-rdoc)
+ * [Templates Asciidoc](#templates-asciidoc)
* [Templates Radius](#templates-radius)
* [Templates Markaby](#templates-markaby)
* [Templates RABL](#templates-rabl)
* [Templates Slim](#templates-slim)
* [Templates Creole](#templates-creole)
+ * [Templates MediaWiki](#templates-mediawiki)
* [Templates CoffeeScript](#templates-coffeescript)
* [Templates Stylus](#templates-stylus)
* [Templates Yajl](#templates-yajl)
@@ -70,6 +76,7 @@ Sinatra utilise le server Thin quand il est disponible.
* [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)
+ * [Utiliser des règles personnalisées pour la recherche de templates](#utiliser-des-règles-personnalisées-pour-la-recherche-de-templates)
* [Filtres](#filtres)
* [Helpers](#helpers)
* [Utiliser les sessions](#utiliser-les-sessions)
@@ -91,7 +98,7 @@ Sinatra utilise le server Thin quand il est disponible.
* [Configuration](#configuration)
* [Se protéger des attaques](#se-protéger-des-attaques)
* [Paramètres disponibles](#paramètres-disponibles)
- * [Environements](#environements)
+ * [Environnements](#environnements)
* [Gérer les erreurs](#gérer-les-erreurs)
* [NotFound](#notfound)
* [Error](#error)
@@ -157,9 +164,18 @@ unlink '/' do
end
```
-Les routes sont évaluées dans l'ordre où elles ont été définies. La première
+Les routes sont évaluées dans l'ordre où elles ont été définies. La première
route qui correspond à la requête est appelée.
+Les routes se terminant par un slash sont différentes de celles qui n'en
+comportent pas :
+
+```ruby
+get '/foo' do
+ # Ne correspond pas à "GET /foo/"
+end
+```
+
Les masques peuvent inclure des paramètres nommés, accessibles par
l'intermédiaire du hash `params` :
@@ -242,10 +258,24 @@ get '/articles' do
end
```
-A ce propos, à moins d'avoir désactivé la protection contre les attaques par
+À 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.
+Vous pouvez personnaliser les options [Mustermann](https://github.com/sinatra/mustermann#readme)
+utilisées pour une route donnée en fournissant un hash `:mustermann_opts` :
+
+```ruby
+get '\A/articles\z', :mustermann_opts => { :type => :regexp, :check_anchors => false } do
+ # répond exactement à /articles, avec un ancrage explicite
+ "Si tu réponds à un pattern ancré tape dans tes mains !
+end
+```
+
+Cela ressemble à une [condition](#conditions), mais ce n'en est pas une !
+Ces options seront mergées dans le hash global `:mustermann_opts` décrit
+[plus bas](#paramètres-disponibles).
+
## Conditions
Les routes peuvent définir toutes sortes de conditions, comme par exemple le
@@ -541,6 +571,15 @@ end
```
Utilisera la chaine de caractères comme template pour générer la réponse.
+Vous pouvez spécifier un `:path` et `:line` optionnels pour une trace plus
+claire s'il existe un chemin dans le système de fichiers ou une ligne
+associés à cette chaîne de caractères :
+
+```ruby
+get '/' do
+ haml '%div.title Bonjour le monde', :path => 'exemples/fichier.haml', :line => 3
+end
+```
### Langages de template disponibles
@@ -826,7 +865,28 @@ pas utiliser de layouts écrits en RDoc. 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 Asciidoc
+
+
+
+ Dépendances |
+ Asciidoctor |
+
+
+ Extensions de fichier |
+ .asciidoc, .adoc and .ad |
+
+
+ Exemple |
+ asciidoc :README, :layout_engine => :erb |
+
+
+
+Comme vous ne pouvez pas appeler de méthodes Ruby depuis un template
+AsciiDoc, vous aurez sûrement à lui passer des variables locales.
+
#### Templates Radius
+
Dépendances |
@@ -936,6 +996,44 @@ 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 MediaWiki
+
+
+
+ Dépendances |
+ WikiCloth |
+
+
+ Extensions de fichier |
+ .mediawiki and .mw |
+
+
+ Exemple |
+ mediawiki :wiki, :layout_engine => :erb |
+
+
+
+Il n’est pas possible d’appeler de méthodes Ruby depuis Mediawiki, ni de lui
+passer de variables locales. Par conséquent, il sera souvent utilisé en
+combinaison avec un autre moteur de rendu :
+
+```ruby
+erb :overview, :locals => { :text => mediawiki(:introduction) }
+```
+
+Notez que vous pouvez également appeler la méthode `mediawiki` depuis un
+autre template :
+
+```ruby
+%h1 Bonjour depuis Haml !
+%p= mediawiki(:bienvenue)
+```
+
+Comme vous ne pouvez pas appeler de méthodes Ruby depuis MediaWiki, vous ne pouvez
+pas utiliser de layouts écrits en MediaWiki. 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
@@ -1078,12 +1176,12 @@ get '/:id' do
end
```
-Ceci est généralement nécessaire lorsque l'on veut utiliser un template depuis un autre template (partiel) et qu'il faut donc adapter le nom des variables.
+Ceci est généralement nécessaire lorsque l'on veut utiliser un template depuis un autre template (partiel) et qu'il faut donc adapter le nom des variables.
### Templates avec `yield` et layouts imbriqués
En général, un layout est un simple template qui appelle `yield`. Ce genre de
-template peut s'utiliser via l'option `:template` comme décrit précédemment ou
+template peut s'utiliser via l'option `:template` comme décrit précédemment ou
peut être rendu depuis un bloc :
```ruby
@@ -1203,6 +1301,23 @@ end
Utilisera `./views/index.monmoteur`. Voir [le projet Github](https://github.com/rtomayko/tilt) pour en savoir plus sur Tilt.
+### Utiliser des règles personnalisées pour la recherche de templates
+
+Pour implémenter votre propre mécanisme de recherche de templates, vous
+pouvez écrire votre propre méthode `#find_template` :
+
+```ruby
+configure do
+ set :views, [ './vues/a', './vues/b' ]
+end
+
+def find_template(vues, nom, moteur, &bloc)
+ Array(vues).each do |v|
+ super(v, nom, moteur, &bloc)
+ end
+end
+```
+
## Filtres
Les filtres `before` sont exécutés avant chaque requête, dans le même contexte
@@ -1542,7 +1657,7 @@ post '/message' do
# prévient le client qu'un nouveau message est arrivé
out << params['message'] << "\n"
- # indique au client de se connecter à nouveau
+ # indique au client de se connecter à nouveau
out.close
end
@@ -1551,6 +1666,10 @@ post '/message' do
end
```
+Il est aussi possible pour le client de fermer la connexion en essayant
+d'écrire sur le socket. Pour cette raison, il est recommandé de vérifier
+`out.closed?` avant d'essayer d'y écrire.
+
### Journalisation (Logging)
Dans le contexte de la requête, la méthode utilitaire `logger` expose une
@@ -1792,12 +1911,6 @@ Les options sont :
le nom du fichier dans la réponse, par défaut le nom du fichier envoyé.
- last_modified
-
- valeur pour l’en-tête Last-Modified, par défaut la date de modification du
- fichier.
-
-
type
type de contenu à utiliser, deviné à partir de l’extension de fichier si
@@ -1816,7 +1929,6 @@ Les options sont :
status
code état à renvoyer. Utile quand un fichier statique sert de page d’erreur.
-
Si le gestionnaire Rack le supporte, d'autres moyens que le streaming via le
processus Ruby seront utilisés. Si vous utilisez cette méthode, Sinatra gérera
automatiquement les requêtes de type range.
@@ -1962,8 +2074,8 @@ vous pouvez utiliser plus d'un répertoire de vues :
set :views, ['views', 'templates']
helpers do
- def find_template(views, name, engine, &block)
- Array(views).each { |v| super(v, name, engine, &block) }
+ def find_template(vues, nom, moteur, &bloc)
+ Array(vues).each { |v| super(v, nom, moteur, &bloc) }
end
end
```
@@ -2142,6 +2254,12 @@ set :protection, :session => true
port
port à écouter. Utiliser seulement pour le serveur intégré.
+ mustermann_opts
+
+ Un hash d'options à passer à Mustermann.new lors de la compilation
+ des chemins de routes
+
+
prefixed_redirects
si oui ou non request.script_name doit être inséré dans les
redirections si un chemin non absolu est utilisé. Ainsi, redirect
@@ -2161,6 +2279,12 @@ set :protection, :session => true
paramètre static). Si non défini, il découle du paramètre
app_file.
+ quiet
+
+ Désactive les journaux (logs) générés par les commandes start et stop
+ de Sinatra. false par défaut.
+
+
reload_templates
si oui ou non les templates doivent être rechargés entre les requêtes.
Activé en mode développement.
@@ -2187,11 +2311,27 @@ set :protection, :session => true
défaut [‘thin’, ‘mongrel’, ‘webrick’], l’ordre indiquant la
priorité.
+ server_settings
+
+ Si vous utilisez un serveur Webrick, sans doute pour votre environnement de
+ développement, vous pouvez passer des options à server_settings,
+ comme SSLEnable ou SSLVerifyClient. Cependant, les
+ serveurs comme Puma et Thin ne le permettent pas, et vous pouvez donc
+ définir server_settings en tant que méthode lorsque vous appelez
+ configure.
+
+
sessions
active le support des sessions basées sur les cookies, en utilisant
Rack::Session::Cookie. Reportez-vous à la section ‘Utiliser les
sessions’ pour plus d’informations.
+ session_store
+
+ Le middleware Rack utilisé pour les sessions. Rack::Session::Cookie
+ par défaut. Voir la section 'Utiliser les sessions' pour plus de détails.
+
+
show_exceptions
affiche la trace de l’erreur dans le navigateur lorsqu’une exception se
produit. Désactivé par défaut sauf lorsque environment est
@@ -2214,6 +2354,9 @@ set :protection, :session => true
à définir à true pour indiquer à Thin d’utiliser
EventMachine.defer pour traiter la requête.
+ traps
+ Indique si Sinatra doit gérer les signaux système.
+
views
chemin pour le dossier des vues. Si non défini, il découle du paramètre
app_file.
@@ -2225,10 +2368,10 @@ set :protection, :session => true
-## Environements
+## Environnements
Il existe trois environnements prédéfinis : `"development"`,
-`"production"` et `"test"`. Les environements peuvent être
+`"production"` et `"test"`. Les environnements peuvent être
sélectionné via la variable d'environnement `APP_ENV`. Sa valeur par défaut
est `"development"`. Dans ce mode, tous les templates sont rechargés à
chaque requête. Des handlers spécifiques pour `not_found` et
@@ -2276,7 +2419,15 @@ end
### Error
Le gestionnaire `error` est invoqué à chaque fois qu'une exception est
-soulevée dans une route ou un filtre. L'objet exception est accessible via la
+soulevée dans une route ou un filtre. Notez qu'en développement, il ne
+sera exécuté que si vous définissez l'option show exceptions à
+`:after_handler` :
+
+```ruby
+set :show_exceptions, :after_handler
+```
+
+L'objet exception est accessible via la
variable Rack `sinatra.error` :
```ruby
@@ -2285,7 +2436,7 @@ error do
end
```
-Erreur sur mesure :
+Erreur personnalisée :
```ruby
error MonErreurSurMesure do
@@ -2412,6 +2563,9 @@ class MonTest < Minitest::Test
end
```
+Note : si vous utilisez le style modulaire de Sinatra, remplacez
+`Sinatra::Application` par le nom de la classe de votre application.
+
## Sinatra::Base - Les Middlewares, Bibliothèques, et Applications Modulaires
Définir votre application au niveau supérieur fonctionne bien dans le cas des
@@ -2818,9 +2972,9 @@ multi-threaded:
require 'sinatra/base'
classe App < Sinatra::Base
- get '/' do
+ get '/' do
'Bonjour le monde !'
- end
+ end
end
App.run!
@@ -2839,31 +2993,9 @@ thin --threaded start
Les versions suivantes de Ruby sont officiellement supportées :
- - Ruby 1.8.7
- -
- 1.8.7 est complètement supporté, toutefois si rien ne vous en empêche,
- nous vous recommandons de faire une mise à jour ou bien de passer à JRuby
- ou Rubinius. Le support de Ruby 1.8.7 ne sera pas supprimé avant la sortie
- de Sinatra 2.0. Ruby 1.8.6 n’est plus supporté.
-
-
- - Ruby 1.9.2
- -
- 1.9.2 est totalement supporté. N’utilisez pas 1.9.2p0 car il provoque des
- erreurs de segmentation à l’exécution de Sinatra. Son support continuera
- au minimum jusqu’à la sortie de Sinatra 1.5.
-
-
- - Ruby 1.9.3
- -
- 1.9.3 est totalement supporté et recommandé. Nous vous rappelons que passer
- à 1.9.3 depuis une version précédente annulera toutes les sessions. 1.9.3
- sera supporté jusqu'à la sortie de Sinatra 2.0.
-
-
- - Ruby 2.0.0
+ - Ruby 2.2
-
- 2.0.0 est totalement supporté et recommandé. L'abandon de son support
+ 2.2 est totalement supporté et recommandé. L'abandon de son support
officiel n'est pas à l'ordre du jour.
@@ -2881,6 +3013,8 @@ Les versions suivantes de Ruby sont officiellement supportées :
+Les versions antérieures à 2.2.2 ne sont plus supportées depuis Sinatra 2.0.
+
Nous gardons également un oeil sur les versions Ruby à venir.
Les implémentations Ruby suivantes ne sont pas officiellement supportées mais
@@ -2953,43 +3087,6 @@ Vous pouvez alors lancer votre application de la façon suivante :
bundle exec ruby myapp.rb
```
-### Faire un clone local
-
-Si vous ne souhaitez pas employer Bundler, vous pouvez cloner Sinatra en local
-dans votre projet et démarrez votre application avec le dossier `sinatra/lib`
-dans le `$LOAD_PATH` :
-
-```shell
-cd myapp
-git clone git://github.com/sinatra/sinatra.git
-ruby -I sinatra/lib myapp.rb
-```
-
-Et de temps en temps, vous devrez récupérer la dernière version du code source
-de Sinatra :
-
-```shell
-cd myapp/sinatra
-git pull
-```
-
-### Installer globalement
-
-Une dernière méthode consiste à construire la gem vous-même :
-
-```shell
-git clone git://github.com/sinatra/sinatra.git
-cd sinatra
-rake sinatra.gemspec
-rake install
-```
-
-Si vous installez les gems en tant que root, vous devez encore faire un :
-
-```shell
-sudo rake install
-```
-
## Versions
Sinatra se conforme aux [versions sémantiques](http://semver.org/), aussi bien
diff --git a/README.md b/README.md
index 25c05cf341..0ef30a4bc9 100644
--- a/README.md
+++ b/README.md
@@ -1293,7 +1293,7 @@ own `#find_template` method:
```ruby
configure do
- set :views [ './views/a', './views/b' ]
+ set :views, [ './views/a', './views/b' ]
end
def find_template(views, name, engine, &block)