diff --git a/README.fr.rdoc b/README.fr.rdoc index eb6b27db..9861a828 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1,5 +1,5 @@ = Sinatra -Attention: Ce document correspond à la traduction de la version anglaise et +Attention : Ce document correspond à la traduction de la version anglaise et il n'est peut être plus à jour. Sinatra est un DSL pour créer rapidement des applications web en Ruby et sans @@ -16,7 +16,7 @@ Installez la gem et lancez avec : gem install sinatra ruby -rubygems mon_application.rb -Le résultat est visible sur: http://localhost:4567 +Le résultat est visible sur : http://localhost:4567 Il est également recommandé d'exécuter gem install thin, que Sinatra utilisera si disponible. @@ -145,9 +145,9 @@ acceptées. Vous pouvez renvoyer n'importe quel objet qui soit une réponse Rack valide, un corps de réponse Rack ou un code retour HTTP : -* Un tableau de 3 éléments: [code retour (Fixnum), entêtes (Hash), corps +* Un tableau de 3 éléments : [code retour (Fixnum), entêtes (Hash), corps de réponse (répondant à #each)] -* Un tableau de 2 élements: [code retour (Fixnum), corps de réponse +* Un tableau de 2 élements : [code retour (Fixnum), corps de réponse (répondant à #each)] * Un objet qui répond à #each et qui ne transmet que des chaînes de caractères au bloc fourni @@ -218,10 +218,89 @@ sous ./public/css/style.css est appelé avec l'URL : http://exemple == Vues / Templates -Par défaut, les templates sont cherchés dans le dossier ./views. -Pour utiliser un autre dossier, il faut le déclarer : +Chaque langage de template est exposé via sa propre méthode de rendu. +Ces méthodes retournent tout simplement une chaîne de caractères. - set :views, File.dirname(__FILE__) + '/templates' + get '/' do + erb :index + end + +Ceci effectue le rendu de views/index.erb. + +Plutôt que le nom d'un template, vous pouvez directement passer le contenu du +template : + + get '/' do + code = "<%= Time.now %>" + erb code + end + +Les templates prennent un second paramètre, un hash d'options : + + get '/' do + erb :index, :layout => :post + end + +Cecie effectue le rendu de views/index.erb embarqué dans +views/post.erb (views/layout.erb est la valeur par défaut +si ce fichier existe). + +Toute option que Sinatra ne comprends pas sera passée au moteur de rendu : + + get '/' do + haml :index, :format => :html5 + end + +Vous pouvez également définir des options par langage de template de façon +générale : + + set :haml, :format => html5 + + get '/' do + haml :index + end + +Les options passées à la méthode de rendu prennent le pas sur les options +définies au moyen de +set+. + +Options disponibles : + +[locals] + Liste de variables locales passées au document. Pratique pour les vues + partielles. + Exemple : erb "<%= foo %>", :locals => {:foo => "bar"}. + +[default_encoding] + Encodage de caractères à utiliser en cas d'incertitude. Par défaut, c'est + settings.default_encoding. + +[views] + Dossier de vues dans lequel chercher les templates. Par défaut + settings.views. + +[layout] + S'il faut ou non utiliser un +layout+ (+true+ or +false+). Indique le + template à utiliser lorsque c'est un Symbol. Exemple : erb :index, + :layout => request.xhr?. + +[content_type] + Content-Type que le template produit, dépend par défaut du langage de + template. + +[scope] + Contexte sous lequel effectuer le rendu du template. Par défaut il s'agit + de l'instance de l'application. Si vous changez cela, les variables + d'instance et les méthodes utilitaires ne seront pas disponibles. + +[layout_engine] + Moteur de rendu à utiliser pour le +layout+. Utile pour les langages ne + supportant pas les +layouts+. Il s'agit par défaut du moteur utilisé pour + le rendu du template. Exemple : set :rdoc, :layout_engine => :erb + +Les templates sont supposés se trouver directement dans le dossier +./views. Pour utiliser un dossier de vues différent : + + set :views, settings.root + '/templates' Il est important de noter que les templates sont toujours référencés sous forme de symboles, même s'il s'agit d'un sous-répertoire (dans ce @@ -229,430 +308,197 @@ cas, utilisez :'sous_repertoire/template'). Vous devez utiliser un symbole car les méthodes de rendu évalueront le contenu des chaînes de caractères au lieu de les considérer comme un chemin vers un fichier. +=== Langages de template disponibles + +Certains langages ont plusieurs implémentations. Pour préciser l'implémentation +à utiliser (et garantir l'aspect thread-safe), vous devriez simplement la +charger au préalable : + + require 'rdiscount' # ou require 'bluecloth' + get('/') { markdown :index } + === Templates Haml -La gem haml est nécessaire pour utiliser la fonction de rendu Haml : - - # Chargez la bibliothèque haml dans votre application - require 'haml' - - get '/' do - haml :index - end - -Utilisera le template ./views/index.haml. - -{Les options de Haml}[http://haml-lang.com/docs/yardoc/file.HAML_REFERENCE.html#options] -peuvent se manipuler directement avec la configuration de Sinatra, -voir {Options et Configuration}[http://www.sinatrarb.com/configuration.html], -et supportent aussi la réécriture (surcharge) comme dans cet exemple. - - set :haml, :format => :html5 # le format par défaut dans Haml est :xhtml - - get '/' do - haml :index, :format => :html4 # surcharge - end - +Dépendances:: {haml}[http://haml-lang.com/] +Extensions de fichier:: .haml +Exemple:: haml :index, :format => :html5 === Templates Erb - # Chargez la bibliothèque erb dans votre application - require 'erb' - - get '/' do - erb :index - end - -Utilisera le template ./views/index.erb. - -=== Templates Erubis - -La gem erubis est nécessaire pour utiliser la fonction de rendu -Erubis : - - # Chargez la bibliothèque erubis dans votre application - require 'erubis' - - get '/' do - erubis :index - end - -Utilisera le template ./views/index.erubis - -Il est également possible de remplacer Erb par Erubis : - - require 'erubis' - Tilt.register :erb, Tilt[:erubis] - - get '/' do - erb :index - end - -Utilisera le template ./views/index.erb avec Erubis. +Dépendances:: {erubis}[http://www.kuwata-lab.com/erubis/] ou + erb (inclus avec Ruby) +Extensions de fichier:: .erb, .rhtml or .erubis + (Erubis seulement) +Exemple:: erb :index === Templates Builder -La gem builder est nécessaire pour utiliser la fonction de rendu -Builder : +Dépendances:: {builder}[http://builder.rubyforge.org/] +Extensions de fichier:: .builder +Exemple:: builder { |xml| xml.em "hi" } - # Chargez la bibliothèque builder dans votre application - require 'builder' - - get '/' do - builder :index - end - -Utilisera le template ./views/index.builder. +Ce moteur accepte également un bloc pour des templates en ligne (voir exemple). === Templates Nokogiri -La gem nokogiri est nécessaire pour utiliser la fonction de rendu -Nokogiri : +Dépendances:: {nokogiri}[http://nokogiri.org/] +Extensions de fichier:: .nokogiri +Exemple:: builder { |xml| xml.em "hi" } - # Chargez la bibliothèque nokogiri dans votre application - require 'nokogiri' - - get '/' do - nokogiri :index - end - -Utilisera le template ./views/index.nokogiri. +Ce moteur accepte également un bloc pour des templates en ligne (voir exemple). === Templates Sass -La gem haml ou sass est nécessaire pour utiliser la fonction -de rendu Sass : +Dépendances:: {sass}[http://sass-lang.com/] +Extensions de fichier:: .sass +Exemple:: sass :stylesheet, :style => :expanded - # Chargez la bibliothèque haml ou sass dans votre application - require 'sass' +=== Templates SCSS - get '/stylesheet.css' do - sass :stylesheet - end - -Utilisera le template ./views/stylesheet.sass. - -{Les options de Sass}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options] -peuvent se manipuler directement avec la configuration de Sinatra, -voir {Options et Configuration}[http://www.sinatrarb.com/configuration.html], -et supportent aussi la réécriture (surcharge) comme dans cet exemple. - - set :sass, :style => :compact # le style par défaut dans Sass est :nested - - get '/stylesheet.css' do - sass :stylesheet, :style => :expanded # surcharge - end - -=== Scss Templates - -La gem haml ou sass est nécessaire pour utiliser la fonction -de rendu Scss : - - # Chargez la bibliothèque haml ou sass dans votre application - require 'sass' - - get '/stylesheet.css' do - scss :stylesheet - end - -Utilisera le template ./views/stylesheet.scss. - -{Les options de Scss}[http://sass-lang.com/docs/yardoc/file.SASS_REFERENCE.html#options] -peuvent se manipuler directement avec la configuration de Sinatra, -voir {Options et Configuration}[http://www.sinatrarb.com/configuration.html], -et supportent aussi la réécriture (surcharge) comme dans cet exemple. - - set :scss, :style => :compact # le style par défaut de Scss est :nested - - get '/stylesheet.css' do - scss :stylesheet, :style => :expanded # surcharge - end +Dépendances:: {sass}[http://sass-lang.com/] +Extensions de fichier:: .scss +Exemple:: scss :stylesheet, :style => :expanded === Templates Less -La gem less est nécessaire pour utiliser la fonction de rendu Less : - - # Chargez la bibliothèque less dans votre application - require 'less' - - get '/stylesheet.css' do - less :stylesheet - end - -Utilisera le template ./views/stylesheet.less. +Dépendances:: {less}[http://www.lesscss.org/] +Extensions de fichier:: .less +Exemple:: less :stylesheet === Templates Liquid -La gem liquid est nécessaire pour utiliser la fonction de rendu -Liquid : +Dépendances:: {liquid}[http://www.liquidmarkup.org/] +Extensions de fichier:: .liquid +Exemple:: liquid :index, :locals => { :key => 'value' } - # Chargez la bibliothèque liquid dans votre application - require 'liquid' - - get '/' do - liquid :index - end - -Utilisera le template ./views/index.liquid. - -Comme vous ne pouvez pas appeler des méthodes Ruby (excepté +yield+) dans un -template Liquid, il sera toujours nécessaire de lui passer des variables -locales: - - liquid :index, :locals => { :key => 'value' } +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 -La gem rdiscount est nécessaire pour utiliser la fonction de rendu -Markdown : - - # Chargez la bibliothèque rdiscount dans votre application - require "rdiscount" - - get '/' do - markdown :index - end - -Utilisera le template ./views/index.markdown (les extensions de fichier +md+ et -+mkd+ sont également acceptées). +Dépendances:: {rdiscount}[https://github.com/rtomayko/rdiscount], + {redcarpet}[https://github.com/tanoku/redcarpet], + {bluecloth}[http://deveiate.org/projects/BlueCloth], + {kramdown}[http://kramdown.rubyforge.org/] *ou* + {maruku}[http://maruku.rubyforge.org/] +Extensions de fichier:: .markdown, .mkd and .md +Exemple:: markdown :index, :layout_engine => :erb Il n'est pas possible d'appeler des méthodes depuis markdown, ni même de lui -passer des variables locales. Par conséquent, il sera le plus souvent utilisé -en combinaison avec un autre moteur de rendu : +passer des variables locales. Par conséquent, il sera souvent utilisé en +combinaison avec un autre moteur de rendu : - erb :vuedensemble, :locals => { :texte => markdown(:introduction) } + erb :overview, :locals => { :text => markdown(:introduction) } Notez que vous pouvez également appeler la méthode +markdown+ au sein d'autres -templates: +templates : - %h1 Bonjour Depuis Haml ! - %p= markdown(:salutations) + %h1 Hello From Haml ! + %p= markdown(:greetings) -Comme vous ne pouvez pas faire d'appels Ruby au sein de Markdown, vous ne -pouvez pas utiliser des layouts écrits en Markdown. Il est toutefois possible -d'utiliser un autre moteur de rendu pour le layout en passant l'option -:layout_engine : - - get '/' do - markdown :index, :layout_engine => :erb - end - -Utilisera le template ./views/index.md avec ./views/layout.erb pour -layout. - -Souvenez vous que vous pouvez spécifier de telles options de rendu -globalement : - - set :markdown, :layout_engine => :haml, :layout => :post - - get '/' do - markdown :index - end - -Utilisera le template ./views/index.md (et tout autre template Markdown) -avec ./views/post.haml pour layout. - -Il est également possible de traduire le Markdown avec BlueCloth plutôt que -RDiscount : - - require 'bluecloth' - - Tilt.register 'markdown', BlueClothTemplate - Tilt.register 'mkd', BlueClothTemplate - Tilt.register 'md', BlueClothTemplate - - get '/' do - markdown :index - end - -Utilisera le template ./views/index.md avec BlueCloth. +Comme vous ne pouvez pas appeler de Ruby au sein de Markdown, vous ne pouvez +pas utiliser de +layouts+ écrits en Markdown. Toutefois, il est possible +d'utiliser un autre moteur de rendu pour le template que pour le +layout+ en +utilisant l'option :layout_engine. === Templates Textile -La gem RedCloth est nécessaire pour utiliser la fonction de rendu -Textile : - - # Chargez la bibliothèqye redcloth dans votre application - require "redcloth" - - get '/' do - textile :index - end - -Utilisera le template ./views/index.textile. +Dépendances:: {RedCloth}[http://redcloth.org/] +Extensions de fichier:: .textile +Exemple:: textile :index, :layout_engine => :erb Il n'est pas possible d'appeler des méthodes depuis textile, ni même de lui -passer des variables locales. Par conséquent, il sera le plus souvent utilisé -en combinaison avec un autre moteur de rendu : +passer des variables locales. Par conséquent, il sera souvent utilisé en +combinaison avec un autre moteur de rendu : - erb :vuedensemble, :locals => { :texte => textile(:introduction) } + erb :overview, :locals => { :text => textile(:introduction) } Notez que vous pouvez également appeler la méthode +textile+ au sein d'autres templates : - %h1 Bonjour Depuis Haml ! - %p= textile(:salutations) + %h1 Hello From Haml ! + %p= textile(:greetings) -Comme vous ne pouvez pas faire d'appels Ruby au sein de Textile, vous ne -pouvez pas utiliser des layouts écrits en Textile. Il est toutefois possible -d'utiliser un autre moteur de rendu pour le layout en passant l'option -:layout_engine : - - get '/' do - textile :index, :layout_engine => :erb - end - -Utilisera le template ./views/index.textile avec ./views/layout.erb -pour layout. - -Souvenez vous que vous pouvez spécifier de telles options de rendu -globalement : - - set :textile, :layout_engine => :haml, :layout => :post - - get '/' do - textile :index - end - -Utilisera le template ./views/index.textile (et tout autre template Textile) -avec ./views/post.haml pour layout. +Comme vous ne pouvez pas appeler de Ruby au sein de Textile, vous ne pouvez +pas utiliser de +layouts+ écrits en Textile. Toutefois, il est possible +d'utiliser un autre moteur de rendu pour le template que pour le +layout+ en +utilisant l'option :layout_engine. === Templates RDoc -La gem rdoc est nécessaire pour utiliser la fonction de rendu RDoc : - - # Chargez la bibliothèque rdoc/markup/to_html dans votre application - require "rdoc/markup/to_html" - - get '/' do - rdoc :index - end - -Utilisera le template ./views/index.rdoc. +Dépendances:: {rdoc}[http://rdoc.rubyforge.org/] +Extensions de fichier:: .rdoc +Exemple:: textile :README, :layout_engine => :erb Il n'est pas possible d'appeler des méthodes depuis rdoc, ni même de lui -passer des variables locales. Par conséquent, il sera le plus souvent utilisé -en combinaison avec un autre moteur de rendu : +passer des variables locales. Par conséquent, il sera souvent utilisé en +combinaison avec un autre moteur de rendu : - erb :vuedensemble, :locals => { :texte => rdoc(:introduction) } + erb :overview, :locals => { :text => rdoc(:introduction) } Notez que vous pouvez également appeler la méthode +rdoc+ au sein d'autres templates : - %h1 Bonjour Depuis Haml ! - %p= rdoc(:salutations) + %h1 Hello From Haml ! + %p= rdoc(:greetings) -Comme vous ne pouvez pas faire d'appels Ruby au sein de RDoc, vous ne -pouvez pas utiliser des layouts écrits en RDoc. Il est toutefois possible -d'utiliser un autre moteur de rendu pour le layout en passant l'option -:layout_engine : - - get '/' do - rdoc :index, :layout_engine => :erb - end - -Utilisera le template ./views/index.rdoc avec ./views/layout.erb -pour layout. - -Souvenez vous que vous pouvez spécifier de telles options de rendu -globalement : - - set :rdoc, :layout_engine => :haml, :layout => :post - - get '/' do - rdoc :index - end - -Utilisera le template ./views/index.rdoc (et tout autre template RDoc) -avec ./views/post.haml pour layout. +Comme vous ne pouvez pas appeler de Ruby au sein de RDoc, vous ne pouvez +pas utiliser de +layouts+ écrits en RDoc. Toutefois, il est possible +d'utiliser un autre moteur de rendu pour le template que pour le +layout+ en +utilisant l'option :layout_engine. === Templates Radius -La gem radius est nécessaire pour utiliser la fonction de rendu Radius : +Dépendances:: {radius}[http://radius.rubyforge.org/] +Extensions de fichier:: .radius +Exemple:: radius :index, :locals => { :key => 'value' } - # Chargez la bibliothèque radius dans votre application - require 'radius' - - get '/' do - radius :index - end - -Utilisera le template ./views/index.radius. - -Comme vous ne pouvez pas appeler des méthodes Ruby (excepté +yield+) dans un -template Radius, il sera toujours nécessaire de lui passer des variables -locales : - - radius :index, :locals => { :key => 'value' } +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 -La gem markaby est nécessaire pour utiliser la fonction de rendu Markaby : +Dépendances:: {markaby}[http://markaby.github.com/] +Extensions de fichier:: .mab +Exemple:: markaby { h1 "Bienvenue !" } - # Chargez la bibliothèque markaby dans votre application - require 'markaby' - - get '/' do - markaby :index - end - -Utilisera le template ./views/index.mab. - -Vous pouvez également utiliser Markaby en ligne : - - get '/' do - markaby { h1 "Salut !" } - end +Ce moteur accepte également un bloc pour des templates en ligne (voir exemple). === Templates Slim -La gem slim est nécessaire pour utiliser la fonction de rendu Slim : - - # Chargez la bibliothèque slim dans votre application - require 'slim' - - get '/' do - slim :index - end - -Utilisera le template ./views/index.slim. +Dépendances:: {slim}[http://slim-lang.com/] +Extensions de fichier:: .slim +Exemple:: slim :index === Templates Creole -La gem creole est nécessaire pour utiliser la fonction de rendu -creole: +Dépendances:: {creole}[https://github.com/minad/creole] +Extensions de fichier:: .creole +Exemple:: creole :wiki, :layout_engine => :erb - # Chargez la bibliothèque creole dans votre application - require 'creole' +Il n'est pas possible d'appeler des méthodes depuis creole, ni même de lui +passer des variables locales. Par conséquent, il sera souvent utilisé en +combinaison avec un autre moteur de rendu : - get '/' do - creole :index - end + erb :overview, :locals => { :text => creole(:introduction) } -Utilisera le template ./views/index.creole. +Notez que vous pouvez également appeler la méthode +creole+ au sein d'autres +templates : + + %h1 Hello From Haml ! + %p= creole(:greetings) + +Comme vous ne pouvez pas appeler de Ruby au sein de Creole, vous ne pouvez +pas utiliser de +layouts+ écrits en Creole. Toutefois, il est possible +d'utiliser un autre moteur de rendu pour le template que pour le +layout+ en +utilisant l'option :layout_engine. === Templates CoffeeScript -La gem coffee-script est nécessaire ainsi que l'une des -options suivantes permettant l'exécution de JavaScript : - -* +node+ (de Node.js) dans votre path -* vous êtes sous OSX -* la gem +therubyracer+ - -Voir http://github.com/josh/ruby-coffee-script pour la liste des options -possibles. - -Maintenant vous pouvez générer des templates CoffeeScript : - - # Chargez la bibliothèque coffee-script dans votre application - require 'coffee-script' - - get '/application.js' do - coffee :application - end - -Utilisera le template ./views/application.coffee. +Dépendances:: {coffee-script}[https://github.com/josh/ruby-coffee-script] + et un {moyen d'exécuter javascript}[https://github.com/sstephenson/execjs/blob/master/README.md#readme] +Extensions de fichier:: .coffee +Exemple:: coffee :index === Templates embarqués @@ -703,7 +549,7 @@ Des templates peuvent être définis dans le fichier source comme ceci : @@ index %div.title Bonjour le monde ! -NOTE: Les templates du fichier source qui contient require 'sinatra' +NOTE : Les templates du fichier source qui contient require 'sinatra' sont automatiquement chargés. Si vous avez des templates dans d'autres fichiers source, il faut explicitement les déclarer avec enable :inline_templates. @@ -829,7 +675,7 @@ qui seront accessibles dans vos gestionnaires de route et dans vos templates : === Utiliser les sessions -Une session est utilisé pour conserver un état entre les requêtes. Une fois +Une session est utilisée pour conserver un état entre les requêtes. Une fois activées, vous avez un +hash+ de session par session utilisateur : enable :sessions @@ -895,7 +741,7 @@ Ainsi que les entêtes ... halt 402, {'Content-Type' => 'text/plain'}, 'revanche' -Bien sûr il est possible de cominer un template avec +halt+ : +Bien sûr il est possible de combiner un template avec +halt+ : halt erb(:erreur) @@ -972,7 +818,7 @@ retour et les entêtes : headers \ "Allow" => "BREW, POST, GET, PROPFIND, WHEN" "Refresh" => "Refresh: 20; http://www.ietf.org/rfc/rfc2324.txt" - body "I'm a tea pot!" + body "Je suis une théière !" end Comme +body+, +headers+ et +status+ peuvent être utilisés sans arguments @@ -1009,7 +855,9 @@ Quand vous utilisez send_file ou des fichiers statiques, vous pouvez rencontrer des types mime que Sinatra ne connaît pas. Utilisez +mime_type+ pour les déclarer par extension de fichier : - mime_type :foo, 'text/foo' + configure do + mime_type :foo, 'text/foo' + end Vous pouvez également les utiliser avec la méthode +content_type+ : @@ -1076,7 +924,7 @@ Ou bien utilisez une session : === Contrôle du cache -Définir correctement vos entêtes à la base pour un bon cahce HTTP. +Définir correctement vos entêtes à la base pour un bon cache HTTP. Vous pouvez facilement définir l'entête Cache-Control de la manière suivante : @@ -1100,7 +948,7 @@ Si vous utilisez la méthode +expires+ pour définir l'entête correspondant, Pour utiliser correctement les caches, vous devriez utiliser +etag+ et +last_modified+. Il est recommandé d'utiliser ces méthodes *avant* de faire -d'important modifications, car elles vont immédiatement déclencher la réponse +d'importantes modifications, car elles vont immédiatement déclencher la réponse si le client a déjà la version courante dans son cache : get '/article/:id' do @@ -1217,7 +1065,7 @@ peuvent également être modifiées : "toutes les requêtes arrivent ici" end -request.body est un objet IO ou StringIO: +request.body est un objet IO ou StringIO : post "/api" do request.body.rewind # au cas où il a déjà été lu @@ -1362,7 +1210,7 @@ Vous pouvez accéder à ces paramètres via settings : dossier de vues ainsi que pour les templates en ligne. [bind] adresse IP sur laquelle se brancher - (par défaut: 0.0.0.0). + (par défaut : 0.0.0.0). Utiliser seulement pour le serveur intégré. [default_encoding] encodage à utiliser si inconnu (par défaut @@ -1424,7 +1272,8 @@ Vous pouvez accéder à ces paramètres via settings : fichiers statiques. Désactivez si vous utilisez un serveur capable de le gérer lui même. Le désactiver augmentera la performance. - Activé par défaut. + Activé par défaut pour le style classique, désactivé pour + le style modulaire. [views] dossier des vues. @@ -1480,7 +1329,7 @@ particulier : 403 end -Ou un intervalle: +Ou un intervalle : error 400..510 do 'Boom' @@ -1559,9 +1408,6 @@ recommandé : end end -NOTE: Le module intégré Sinatra::Test et la classe Sinatra::TestHarness -sont désapprouvés depuis la version 0.9.2. - == Sinatra::Base - Les Middlewares, les Bibliothèques, et les Applications Modulaires Définir votre application au niveau supérieur fonctionne bien pour les @@ -1570,8 +1416,8 @@ de créer des composants réutilisables comme des middlewares Rack, faire du Rails metal, ou de simples bibliothèques avec un composant serveur, ou même une extension pour Sinatra. Le DSL de haut niveau pollue l'espace de noms et est une configuration adaptée à une micro-application (un fichier unique -pour l'application, les dossiers ./public et ./views, les logs, pages -d'erreur, etc.). C'est là que Sinatra::Base entre en jeu : +pour l'application, les dossiers ./public et ./views, les +logs, pages d'erreur, etc.). C'est là que Sinatra::Base entre en jeu : require 'sinatra/base' @@ -1584,16 +1430,16 @@ d'erreur, etc.). C'est là que Sinatra::Base entre en jeu : end end -Les méthodes disponibles dans Sinatra::Base sont exactement identiques à -celles disponibles dans le DSL de haut niveau. La plupart des applications -de haut niveau peuvent être converties en composant Sinatra::Base avec +Les méthodes disponibles dans Sinatra::Base sont exactement identiques +à celles disponibles dans le DSL de haut niveau. La plupart des applications +de haut niveau peuvent être converties en composant Sinatra::Base avec deux modifications : * Votre fichier doit charger +sinatra/base+ au lieu de +sinatra+ ; autrement, toutes les méthodes de la DSL seront chargées dans l'espace de noms. * Mettre vos gestionnaires de route, vos gestionnaires d'erreur, vos filtres - et options dans une sous-classe de Sinatra::Base. + et options dans une sous-classe de Sinatra::Base. Sinatra::Base est plutôt épuré. La plupart des options sont désactivées par défaut, ceci inclus le serveur. Voir {Options et @@ -1618,7 +1464,7 @@ Il n'y a que deux inconvénient au style classique comparé au style modulaire : Il n'y pas d'empêchement à mélanger style classic et style modulaire. Si vous passez d'un style à l'autre, vous devriez être vigilant à quelques -légères différences dans les paramètres : +légères différences dans les paramètres par défaut : Paramètre Classique Modulaire @@ -1627,6 +1473,7 @@ légères différences dans les paramètres : logging true false method_override true false inline_templates true false + static true false === Servir une application modulaire @@ -1705,7 +1552,7 @@ application Sinatra, ou n'importe quelle application basée sur Rack get('/connexion') { haml :connexion } post('/connexion') do - if params[:nom] = 'admin' and params[:motdepasse] = 'admin' + if params[:nom] = 'admin' && params[:motdepasse] = 'admin' session['nom_utilisateur'] = params[:nom] else redirect '/connexion' @@ -1773,15 +1620,15 @@ disponibles. === Contexte de l'application/classe -Toute application Sinatra correspond à une sous-classe de Sinatra::Base. Si -vous utilisez le DSL haut niveau (require 'sinatra'), alors cette -classe est Sinatra::Application, sinon il s'agit de la sous-classe que vous -avez définie. Dans le contexte de la classe, vous avez accès aux méthodes +Toute application Sinatra correspond à une sous-classe de Sinatra::Base. +Si vous utilisez le DSL haut niveau (require 'sinatra'), alors cette +classe est Sinatra::Application, sinon il s'agit de la sous-classe que +vous avez définie. Dans le contexte de la classe, vous avez accès aux méthodes telles que +get+ ou +before+, mais vous n'avez pas accès aux objets +request+ ou +session+ car c'est la même classe d'application qui traitera toutes les requêtes. -Les options définies au moyen de +set+ deviennent des méthodes de classe: +Les options définies au moyen de +set+ deviennent des méthodes de classe : class MonApp < Sinatra::Base # Eh, je suis dans le contexte de l'application ! @@ -1793,7 +1640,7 @@ Les options définies au moyen de +set+ deviennent des méthodes de classe: end end -Vous avez le binding du contexte de l'application dans: +Vous avez le binding du contexte de l'application dans : * Le corps de la classe d'application * Les méthodes définies par les extensions @@ -1801,7 +1648,7 @@ Vous avez le binding du contexte de l'application dans: * Les procs/blocs utilisés comme argument pour +set+ * Le bloc passé à Sinatra.new -Vous pouvez atteindre ce contexte (donc la classe) de la façon suivante: +Vous pouvez atteindre ce contexte (donc la classe) de la façon suivante : * Via l'objet passé dans les blocs +configure+ (configure { |c| ... }) * En utilisant +settings+ dans le contexte de la requête @@ -1841,10 +1688,10 @@ Vous avez le binding du contexte de la requête dans : Le contexte de délégation se contente de transmettre les appels de méthodes au contexte de classe. Toutefois, il ne se comporte pas à 100% comme le contexte -de classe car vous n'avez pas le binding de la classe: seules les méthodes +de classe car vous n'avez pas le binding de la classe : seules les méthodes spécifiquement déclarées pour délégation sont disponibles et il n'est pas possible de partager des variables/états avec le contexte de classe -(comprenez: +self+ n'est pas le même). Vous pouvez ajouter des délégation de +(comprenez : +self+ n'est pas le même). Vous pouvez ajouter des délégation de méthodes en appelant Sinatra::Delegator.delegate :method_name. Vous avez le binding du contexte de délégation dans : @@ -1906,7 +1753,6 @@ sont toujours connues comme permettant à Sinatra de fonctionner : * Plus anciennes versions de JRuby et Rubinius * MacRuby, Maglev, IronRuby * Ruby 1.9.0 et 1.9.1 -* Ruby 1.8.6 avec {backports}[https://github.com/marcandre/backports/#readme] Ne pas être officiellement supporté signifie que si les choses se passent mal sur ces plateformes et non sur celles supportées, nous considérons que @@ -2000,4 +1846,12 @@ SemVer que SemVerTag. * {Suivi des problèmes}[http://github.com/sinatra/sinatra/issues] * {Twitter}[http://twitter.com/sinatra] * {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] 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 Book Contrib}[http://sinatra-book-contrib.com/] Recettes contribuées + par la communauté +* Documentation API de la {dernière version}[http://rubydoc.info/gems/sinatra] + ou du {HEAD courant}[http://rubydoc.info/github/sinatra/sinatra] sur + http://rubydoc.info/ +