diff --git a/README.fr.md b/README.fr.md index 80049cba..68c0e0aa 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épendancesAsciidoctor
Extensions de fichier.asciidoc, .adoc and .ad
Exempleasciidoc :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 + @@ -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
+ + + + + + + + + + + + +
DépendancesWikiCloth
Extensions de fichier.mediawiki and .mw
Exemplemediawiki :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
+
Ruby 2.2
- 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
-
- 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 25c05cf3..0ef30a4b 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)