From 00db6c807b2f38a977185e65fe16c542dc21f25c Mon Sep 17 00:00:00 2001 From: michelc Date: Fri, 2 Sep 2011 13:35:37 +0200 Subject: [PATCH 01/23] Consistent colon in French Readme. --- README.fr.rdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 2e0b14a5..72c810e6 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -897,7 +897,7 @@ En utilisant le helper +stream+ avec le paramètre +keep_open+, il n'appelera pas la méthode +close+ du flux, vous laissant la possibilité de le fermer à tout moment au cours de l'exécution. Ceci ne fonctionne qu'avec les serveurs evented (ie non threadés) tels que Thin et Rainbows. Les autres serveurs -fermeront malgré tout le flux. +fermeront malgré tout le flux : set :server, :thin connections = [] @@ -1183,7 +1183,7 @@ Vous pouvez également lui passer un nom de fichier : Sinatra fourni un helper +time_for+ pour convertir une valeur donnée en objet +Time+. Il peut aussi faire la conversion à partir d'objets +DateTime+, -+Date+ ou de classes similaires. ++Date+ ou de classes similaires : get '/' do pass if Time.now > time_for('Dec 23, 2012') From d0aa1a51a7141b65e826c0c0542db98113f6a508 Mon Sep 17 00:00:00 2001 From: michelc Date: Fri, 2 Sep 2011 14:22:05 +0200 Subject: [PATCH 02/23] Proofreading filter section on French Readme. --- README.fr.rdoc | 29 ++++++++++++++--------------- 1 file changed, 14 insertions(+), 15 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 72c810e6..e12c6a71 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -647,10 +647,10 @@ https://github.com/rtomayko/tilt pour en savoir plus sur Tilt. == Filtres -Un filtre before est évalué avant n'importe quelle requête, dans le -contexte de celle-ci, et peut modifier la requête ou la réponse. Les variables -d'instance déclarées dans le filtre sont accessibles au gestionnaire de route -et au template : +Les filtres before sont exécutés avant chaque requête, dans le même contexte +que les routes, et permettent de modifier la requête et sa réponse. Les +variables d'instance déclarées dans les filtres sont accessibles au niveau +des routes et des templates : before do @note = 'Coucou !' @@ -662,22 +662,21 @@ et au template : params[:splat] #=> 'bar/baz' end -Un filtre after est évalué après chaque requête, dans le contexte -de celle-ci et peut également modifier la requête et/ou la réponse. Toutes les -variables d'instance déclarées dans un filtre before et dans le -gestionnaire de route sont accessibles dans le filtre after : +Les filtres after sont exécutés après chaque requête à l'intérieur du même +contexte et permettent de modifier la requête et sa réponse. Les variables +d'instance déclarées dans les filtres before ou les routes sont accessibles +au niveau des filtres after : after do puts response.status end -Note : Sauf si vous utilisez la méthode +body+ au lieu de renvoyer une chaîne -de caractères dans vos gestionnaires de routes, le corps de la réponse ne sera -pas disponible dans le filtre after, étant donné qu'il est généré -plus tard. +Note : Le corps de la réponse n'est pas disponible au niveau du filtre after +car il ne sera généré que plus tard (sauf dans le cas où vous utilisez la +méthode +body+ au lieu de simplement renvoyer une chaine depuis vos routes). -En option, on peut passer un masque au filtre, ce qui le rend actif uniquement -si la requête correspond au masque en question : +Les filtres peuvent être associés à un masque, ce qui permet de limiter leur +exécution aux cas où la requête correspond à ce masque : before '/secret/*' do authentification! @@ -687,7 +686,7 @@ si la requête correspond au masque en question : session[:dernier_travail] = travail end -Tout comme les routes, les filtres acceptent également les conditions : +Tout comme les routes, les filtres acceptent également des conditions : before :agent => /Songbird/ do # ... From 5a7d41e9076201330e42aa196a275c2d85e48b44 Mon Sep 17 00:00:00 2001 From: michelc Date: Thu, 15 Sep 2011 13:35:16 +0200 Subject: [PATCH 03/23] Note about 1.8.6 in french readme --- README.fr.rdoc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index e12c6a71..0da12421 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1867,7 +1867,9 @@ Les versions suivantes de Ruby sont officiellement supportées : extensions C dans JRuby est encore expérimental, ce qui n'affecte que RDiscount. -Ruby 1.8.6 n'est plus supporté. +Ruby 1.8.6 n'est plus supporté. Si votre application doit fonctionner +sous Ruby 1.8.6, vous pouvez utiliser Sinatra 1.2. Cette version sera +maintenue jusqu'à la sortie de Sinatra 1.4.0. Nous gardons également un oeil sur les versions Ruby à venir. From fb46ad0cb8d3164195f5bc5bf81e0e34a5a010e2 Mon Sep 17 00:00:00 2001 From: michelc Date: Thu, 15 Sep 2011 13:38:00 +0200 Subject: [PATCH 04/23] Fix copy/paste error with nokogiri in french readme --- README.fr.rdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 0da12421..7bbcf6df 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -382,7 +382,7 @@ Ce moteur accepte également un bloc pour des templates en ligne (voir exemple). Dépendances:: {nokogiri}[http://nokogiri.org/] Extensions de fichier:: .nokogiri -Exemple:: builder { |xml| xml.em "salut" } +Exemple:: nokogiri { |xml| xml.em "salut" } Ce moteur accepte également un bloc pour des templates en ligne (voir exemple). From 976b3ff630298f7cb07e611d3bb2d674309d392e Mon Sep 17 00:00:00 2001 From: michelc Date: Thu, 15 Sep 2011 14:18:32 +0200 Subject: [PATCH 05/23] Update french readme for :static_cache_control setting --- README.fr.rdoc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index 7bbcf6df..07c13c94 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1067,6 +1067,9 @@ recherche de solutions rapides pour un reverse-proxy de cache, essayez "hello" end +Utilisez le paramètre :static_cache_control pour ajouter l'information +d'en-tête Cache-Control (voir plus loin). + === Envoyer des fichiers Pour envoyer des fichiers, vous pouvez utiliser la méthode @@ -1363,6 +1366,9 @@ Vous pouvez accéder à ces paramètres via settings : comportera comme redirect to('/foo'). Désactivé par défaut. +[protection] défini s'il faut activer ou non la protection contre + les attaques web. Voir la section protection plus loin. + [public_folder] dossier duquel les fichiers publics sont servis [reload_templates] si oui ou non les templates doivent être rechargés @@ -1395,6 +1401,13 @@ Vous pouvez accéder à ces paramètres via settings : Activé par défaut pour le style classique, désactivé pour le style modulaire. +[static_cache_control] A définir quand Sinatra rend des fichiers statiques pour + ajouter les en-têtes Cache-Control. Utilise le + helper +cache_control+. Désactivé par défaut. + Utiliser un array explicite pour définir des plusieurs + valeurs : + set :static_cache_control, [:public, :max_age => 300] + [threaded] à définir à +true+ pour indiquer à Thin d'utiliser EventMachine.defer pour traiter la requête. From cf4e7dd360c7d3c87b1f5ac14410b5a97ac4b699 Mon Sep 17 00:00:00 2001 From: michelc Date: Thu, 15 Sep 2011 14:22:20 +0200 Subject: [PATCH 06/23] Add one space to align all parameters in french readme. --- README.fr.rdoc | 140 ++++++++++++++++++++++++------------------------- 1 file changed, 70 insertions(+), 70 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 07c13c94..39aa7524 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1306,100 +1306,100 @@ Vous pouvez accéder à ces paramètres via settings : === Paramètres disponibles -[absolute_redirects] Si désactivé, Sinatra permettra les redirections - relatives. Toutefois, Sinatra ne sera plus conforme à la - RFC 2616 (HTTP 1.1), qui n'autorise que les redirections - absolues. +[absolute_redirects] Si désactivé, Sinatra permettra les redirections + relatives. Toutefois, Sinatra ne sera plus conforme à la + RFC 2616 (HTTP 1.1), qui n'autorise que les redirections + absolues. - Activez si votre application tourne derrière un proxy - inverse qui n'a pas été correctement configuré. Notez - que la méthode +url+ continuera de produire des URLs - absolues, sauf si vous lui passez +false+ comme second - argument. + Activez si votre application tourne derrière un proxy + inverse qui n'a pas été correctement configuré. Notez + que la méthode +url+ continuera de produire des URLs + absolues, sauf si vous lui passez +false+ comme second + argument. - Désactivé par défaut. + Désactivé par défaut. -[add_charsets] types mime pour lesquels la méthode - content_type va automatiquement ajouter - l'information du +charset+. +[add_charsets] types mime pour lesquels la méthode + content_type va automatiquement ajouter + l'information du +charset+. - Vous devriez lui ajouter des valeurs plutôt que de - l'écraser : + Vous devriez lui ajouter des valeurs plutôt que de + l'écraser : - settings.add_charsets << "application/foobar" + settings.add_charsets << "application/foobar" -[app_file] fichier de l'application principale, utilisé pour - détecterla racine du projet, le dossier public et le - dossier de vues ainsi que pour les templates en ligne. +[app_file] fichier de l'application principale, utilisé pour + détecterla racine du projet, le dossier public et le + dossier de vues ainsi que pour les templates en ligne. -[bind] adresse IP sur laquelle se brancher - (par défaut : 0.0.0.0). - Utiliser seulement pour le serveur intégré. +[bind] adresse IP sur laquelle se brancher + (par défaut : 0.0.0.0). + Utiliser seulement pour le serveur intégré. -[default_encoding] encodage à utiliser si inconnu (par défaut - "utf-8"). +[default_encoding] encodage à utiliser si inconnu (par défaut + "utf-8"). -[dump_errors] afficher les erreurs dans le +log+. +[dump_errors] afficher les erreurs dans le +log+. -[environment] environnement courant, par défaut - ENV['RACK_ENV'], ou - "development" si absent. +[environment] environnement courant, par défaut + ENV['RACK_ENV'], ou + "development" si absent. -[logging] utiliser le +logger+. +[logging] utiliser le +logger+. -[lock] Place un +lock+ autour de chaque requête, n'exécutant - donc qu'une seule requête par processus Ruby. +[lock] Place un +lock+ autour de chaque requête, n'exécutant + donc qu'une seule requête par processus Ruby. - Activé si votre application n'est pas +thread-safe+. - Désactivé par défaut. + Activé si votre application n'est pas +thread-safe+. + Désactivé par défaut. -[method_override] utilise la magie de _method afin de permettre - des formulaires put/delete dans des navigateurs qui ne - le permettent pas. +[method_override] utilise la magie de _method afin de permettre + des formulaires put/delete dans des navigateurs qui ne + le permettent pas. -[port] port à écouter. Utiliser seulement pour le serveur - intégré. +[port] port à écouter. Utiliser seulement pour le serveur + intégré. -[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 '/foo' se - comportera comme redirect to('/foo'). - Désactivé par défaut. +[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 '/foo' se + comportera comme redirect to('/foo'). + Désactivé par défaut. -[protection] défini s'il faut activer ou non la protection contre - les attaques web. Voir la section protection plus loin. +[protection] défini s'il faut activer ou non la protection contre + les attaques web. Voir la section protection plus loin. -[public_folder] dossier duquel les fichiers publics sont servis +[public_folder] dossier duquel les fichiers publics sont servis -[reload_templates] si oui ou non les templates doivent être rechargés - entre les requêtes. Activé en mode développement. +[reload_templates] si oui ou non les templates doivent être rechargés + entre les requêtes. Activé en mode développement. -[root] dossier racine du projet. +[root] dossier racine du projet. -[raise_errors] soulever les erreurs (ce qui arrêtera l'application). +[raise_errors] soulever les erreurs (ce qui arrêtera l'application). -[run] si activé, Sinatra s'occupera de démarrer le serveur, - ne pas activer si vous utiliser rackup ou autres. +[run] si activé, Sinatra s'occupera de démarrer le serveur, + ne pas activer si vous utiliser rackup ou autres. -[running] est-ce que le serveur intégré est en marche ? - ne changez pas ce paramètre ! +[running] est-ce que le serveur intégré est en marche ? + ne changez pas ce paramètre ! -[server] serveur ou liste de serveurs à utiliser pour le serveur - intégré. - Par défaut ['thin', 'mongrel', 'webrick'], l'ordre - indiquant la priorité. +[server] serveur ou liste de serveurs à utiliser pour le serveur + intégré. + Par défaut ['thin', 'mongrel', 'webrick'], l'ordre + indiquant la priorité. -[sessions] active l'enregistrement des sessions en utilisant les - cookies. +[sessions] active l'enregistrement des sessions en utilisant les + cookies. -[show_exceptions] affiche la trace de l'erreur dans le navigateur. +[show_exceptions] affiche la trace de l'erreur dans le navigateur. -[static] Si oui ou non Sinatra doit s'occuper de servir les - 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 pour le style classique, désactivé pour - le style modulaire. +[static] Si oui ou non Sinatra doit s'occuper de servir les + 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 pour le style classique, désactivé pour + le style modulaire. [static_cache_control] A définir quand Sinatra rend des fichiers statiques pour ajouter les en-têtes Cache-Control. Utilise le @@ -1408,10 +1408,10 @@ Vous pouvez accéder à ces paramètres via settings : valeurs : set :static_cache_control, [:public, :max_age => 300] -[threaded] à définir à +true+ pour indiquer à Thin d'utiliser - EventMachine.defer pour traiter la requête. +[threaded] à définir à +true+ pour indiquer à Thin d'utiliser + EventMachine.defer pour traiter la requête. -[views] dossier des vues. +[views] dossier des vues. == Gérer les erreurs From 393640ef7730ef481c9663af11502d0a08d6ca20 Mon Sep 17 00:00:00 2001 From: michelc Date: Thu, 15 Sep 2011 14:28:49 +0200 Subject: [PATCH 07/23] Add link to CI server in french readme --- README.fr.rdoc | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 39aa7524..112ed1fa 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1992,5 +1992,5 @@ SemVer que SemVerTag. 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/ - + http://rubydoc.info +* {CI server}[http://ci.rkh.im/view/Sinatra/] \ No newline at end of file From fe5800463c7218ceda8d1bb704a7a9a090687f4f Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 10:12:30 +0100 Subject: [PATCH 08/23] sync readmefr with Yajl templates --- README.fr.rdoc | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index a2ee0fe5..7c8d458c 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -540,6 +540,23 @@ Dépendances:: {coffee-script}[https://github.com/josh/ruby-coffee-s Extensions de fichier:: .coffee Exemple:: coffee :index +=== Templates Yajl + +Dépendances:: {yajl-ruby}[https://github.com/brianmario/yajl-ruby] +Extensions de fichier:: .yajl +Exemple:: yajl :index, :locals => { :key => 'qux' }, :callback => 'present', :variable => 'resource' + +Le source du template est évalué en tant que chaine Ruby, puis la variable json +obtenue est convertie avec #to_json. + + json = { :foo => 'bar' } + json[:baz] = key + +Les options :callback et :variable peuvent être utilisées +pour décorer l'objet retourné. + + var resource = {"foo":"bar","baz":"qux"}; present(resource); + === Templates embarqués get '/' do From 2431c5724eea573a1a2c2069d8006b435493f71a Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 10:24:16 +0100 Subject: [PATCH 09/23] Sync readme.fr with attack protection --- README.fr.rdoc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index 7c8d458c..333c1361 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1322,6 +1322,25 @@ Vous pouvez accéder à ces paramètres via settings : ... end +=== Se protéger des attaques + +Sinatra utilise {Rack::Protection}[https://github.com/rkh/rack-protection#readme] +pour protéger votre application contre les principales attaques opportunistes. +Vous pouvez très simplement désactiver cette fonctionnalité (ce qui devrait +améliorer les performances) : + + disable :protection + +Pour désactiver seulement un type de protection, vous pouvez définir +protection+ +avec un hash d'options : + + set :protection, :except => :path_traversal + +Vous pouvez également lui passer un tableau pour désactiver plusieurs types de +protection : + + set :protection, :except => [:path_traversal, :session_hijacking] + === Paramètres disponibles [absolute_redirects] Si désactivé, Sinatra permettra les redirections From c6acabc4a3deb510e674019d0db3da6bc112bff1 Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 10:34:18 +0100 Subject: [PATCH 10/23] Sync readme.fr with environments --- README.fr.rdoc | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index 333c1361..b602dd1f 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1450,6 +1450,25 @@ protection : [views] dossier des vues. +== Environements + +Il existe trois environnements prédéfinis : "development", +"production" et "test". Les environements peuvent être +sélectionné via la variable d'environnement +RACK_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 +error sont installés pour vous permettre d'avoir une pile de trace +dans votre navigateur. En mode "production" et "test" les +templates sont mis en cache par défaut. + +Pour exécuter votre application dans un environnement différent, utilisez +l'option -e de Ruby : + + ruby mon_application.rb -e [ENVIRONMENT] + +Vous pouvez utiliser une des méthodes +development?+, +test?+ et +production?+ +pour déterminer quel est l'environnement en cours. + == Gérer les erreurs Les gestionnaires d'erreur s'exécutent dans le même contexte que les routes ou From 93b72b87060b87fe4d9312ea92ab79eb345c7ab0 Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 10:46:20 +0100 Subject: [PATCH 11/23] Update readme.fr with inner references to attack protection --- README.fr.rdoc | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index b602dd1f..3fc9688c 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -108,6 +108,10 @@ Les routes peuvent aussi comporter des paramètres optionnels : # répond à "GET /posts" et aussi à "GET /posts.json", "GET /posts.xml" etc... end +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 Les routes peuvent définir toutes sortes de conditions, comme par exemple le @@ -1404,7 +1408,7 @@ protection : Désactivé par défaut. [protection] défini s'il faut activer ou non la protection contre - les attaques web. Voir la section protection plus loin. + les attaques web. Voir la section protection précédente. [public_folder] dossier duquel les fichiers publics sont servis From 1d2b0d58b0cdcbbe693ebfd9179db03b91101b07 Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 11:31:52 +0100 Subject: [PATCH 12/23] Sync readme.fr with If-Matches according to RFC 2616 --- README.fr.rdoc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index 3fc9688c..1bd881f9 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1092,6 +1092,24 @@ recherche de solutions rapides pour un reverse-proxy de cache, essayez Utilisez le paramètre :static_cache_control pour ajouter l'information d'en-tête Cache-Control (voir plus loin). +D'après la RFC 2616, votre application devrait se comporter différement lorsque +l'en-tête If-Match ou If-None-Match est défini à * en tenant compte du +fait que la resource demandée existe déjà ou pas. Sinatra considère que les +requêtes portant sur des resources sûres (tel que get) ou idempotentes (tel que +put) existent déjà et pour les autres resources (par exemple dans le cas +de requêtes post) qu'il s'agit de nouvelles resources. Vous pouvez modifier ce +comportement en passant une option :new_resource : + + get '/create' do + etag '', :new_resource => true + Article.create + erb :new_article + end + +Si vous souhaitez utilisez un ETag faible, utilisez l'option :kind : + + etag '', :new_resource => true, :kind => :weak + === Envoyer des fichiers Pour envoyer des fichiers, vous pouvez utiliser la méthode From 6ae2b8a947585cd66642778c394220e10e6a92fa Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 11:37:47 +0100 Subject: [PATCH 13/23] Sync readme.fr with remove unnecessary parens from example --- README.fr.rdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 1bd881f9..d9124586 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -954,7 +954,7 @@ Notez que la journalisation est seulement activée par défaut pour vous aurez à l'activer vous-même : class MonApp < Sinatra::Base - configure(:production, :development) do + configure :production, :development do enable :logging end end From def3455ea5b8fe12893d370ad37d02a685770d46 Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 11:46:08 +0100 Subject: [PATCH 14/23] Add note about Shotgun and streaming in readme.fr --- README.fr.rdoc | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index d9124586..167bffc3 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -912,7 +912,8 @@ Le fonctionnement du streaming, notamment le nombre de requêtes simultanées, dépend énormément du serveur web utilisé. Certains ne prennent pas du tout en charge le streaming (WEBRick par exemple). Lorsque le serveur ne gère pas le streaming, la partie body de la réponse sera envoyée au client en une seule -fois, après que l'exécution du bloc passé au helper +stream+ sera terminée. +fois, après que l'exécution du bloc passé au helper +stream+ sera terminée. Le +streaming ne fonctionne pas du tout avec Shotgun. En utilisant le helper +stream+ avec le paramètre +keep_open+, il n'appelera pas la méthode +close+ du flux, vous laissant la possibilité de le fermer à From 0cbcab7ae2729e13d3e7ddebe3e64ff8c7ecd26b Mon Sep 17 00:00:00 2001 From: michelc Date: Sat, 3 Mar 2012 12:19:15 +0100 Subject: [PATCH 15/23] Sync readme.fr with Ruby requirement --- README.fr.rdoc | 61 ++++++++++++++++++++++++++++++++------------------ 1 file changed, 39 insertions(+), 22 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 167bffc3..cc20a271 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1939,50 +1939,67 @@ Les options sont : 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 y retient, nous - vous recommandons de passer à 1.9.2 ou bien de passer à JRuby ou Rubinius. + 1.8.7 est complètement supporté, toutefois si rien ne vous en empêche, nous + vous recommandons de passer à 1.9.2 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 et + de Ruby 2.0, à moins qu'un improbable Ruby 1.8.8 apparaisse. Et même dans ce + cas, nous pourrions continuer à le supporter. Ruby 1.8.6 n'est plus + supporté. Si vous souhaitez utiliser la version 1.8.6, vous devez revenir + à Sinatra 1.2 qui continuera à recevoir des corrections de bugs tant que + Sinatra 1.4.0 ne sera pas livré. [ Ruby 1.9.2 ] - 1.9.2 est supporté et recommandé. Notez que Radius et Markaby ne sont - actuellement pas compatible avec 1.9. N'utilisez pas 1.9.2p0 qui est - réputé causer des erreurs de segmentation lorque Sinatra est utilisé. + 1.9.2 est totalement supporté et recommandé. Notez que Radius et Markaby ne + sont actuellement pas compatible avec 1.9. 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 Ruby 1.9.4/2.0 et le support de la + dernière version 1.9 se poursuivra aussi longtemps que la core team de Ruby la + supportera. + +[ Ruby 1.9.3 ] + 1.9.3 est totalement supporté. Nous recommandons d'attendre qu'un premier + niveau de patch sorte (pour l'instant on en est à p0) avant de l'employer en + production. Nous vous rappelons que passer à 1.9.3 depuis une version + précédente annulera toutes les sessions. [ Rubinius ] - Rubinius est officiellement supporté (Rubinius >= 1.2.3), tout fonctionne, - y compris tous les langages de template. + Rubinius est officiellement supporté (Rubinius >= 1.2.4), tout fonctionne, + y compris tous les langages de template. La version 2.0 à venir est + également supportée. [ JRuby ] - JRuby est officiellement supporté (JRuby >= 1.6.1). Aucune anomalie avec + JRuby est officiellement supporté (JRuby >= 1.6.5). Aucune anomalie avec des bibliothèques de templates tierces ne sont connues. Toutefois, si vous choisissez JRuby, alors tournez vous vers des gestionnaires Rack JRuby car le serveur Thin n'est pas complètement supporté par JRuby. Le support des extensions C dans JRuby est encore expérimental, ce qui n'affecte que - RDiscount. - -Ruby 1.8.6 n'est plus supporté. Si votre application doit fonctionner -sous Ruby 1.8.6, vous pouvez utiliser Sinatra 1.2. Cette version sera -maintenue jusqu'à la sortie de Sinatra 1.4.0. + RDiscount, Redcarpet and RedCloth pour l'instant. Nous gardons également un oeil sur les versions Ruby à venir. Les implémentations Ruby suivantes ne sont pas officiellement supportées mais -sont toujours connues comme permettant à Sinatra de fonctionner : +sont malgré tout connues pour permettre de faire fonctionner Sinatra : -* Plus anciennes versions de JRuby et Rubinius +* Versions plus anciennes de JRuby et Rubinius +* Ruby Enterprise Edition * MacRuby, Maglev, IronRuby -* Ruby 1.9.0 et 1.9.1 +* Ruby 1.9.0 et 1.9.1 (mais nous déconseillons leur utilisation) -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 -l'anomalie est de le ressort, pas du nôtre. +Le fait de ne pas être officiellement supporté signifie que si quelque chose +ne fonctionne pas uniquement sur cette plateforme alors c'est un problème de la +plateforme et pas un bug de Sinatra. -Nous faisons également notre intégration continue (CI) avec ruby-head (la -future 1.9.3), mais nous ne pouvons rien garantir étant donné que c'est -constant mouvement. Vous pouvez vous attendre à ce que 1.9.3p0 soit supporté. +Nous lançons également notre intégration continue (CI) avec ruby-head (la +future 2.0.0) et la branche 1.9.4, mais étant donné les évolutions continuelles, +nous ne pouvont rien garantir, si ce n'est que les versions 1.9.4p0 et 2.0.0p0 +seront supportées. Sinatra devrait fonctionner sur n'importe quel système d'exploitation supportant l'implémentation Ruby choisie. +Il n'est pas possible d'utiliser Sinatra sur Cardinal, SmallRuby, Blueuby ou +toute version de Ruby antérieure à 1.8.7. + == Essuyer les plâtres Si vous voulez utiliser la toute dernière version de Sinatra, n'ayez pas peur From dcf7148c02c57e58c43d8f5961864fc3aa59ec87 Mon Sep 17 00:00:00 2001 From: michelc Date: Sun, 4 Mar 2012 09:31:09 +0100 Subject: [PATCH 16/23] Improve settings description in readme.fr --- README.fr.rdoc | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index cc20a271..545f02ab 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1388,9 +1388,9 @@ protection : settings.add_charsets << "application/foobar" -[app_file] fichier de l'application principale, utilisé pour - détecterla racine du projet, le dossier public et le - dossier de vues ainsi que pour les templates en ligne. +[app_file] chemin pour le fichier de l'application principale, + utilisé pour détecter la racine du projet, les dossiers + public et vues, et les templates en ligne. [bind] adresse IP sur laquelle se brancher (par défaut : 0.0.0.0). @@ -1429,14 +1429,21 @@ protection : [protection] défini s'il faut activer ou non la protection contre les attaques web. Voir la section protection précédente. -[public_folder] dossier duquel les fichiers publics sont servis +[public_folder] chemin pour le dossier à partir duquel les fichiers + publics sont servis. Utilisé seulement si les fichiers + statiques doivent être servis (voir le paramètre + static). Si non défini, il découle du paramètre + app_file. [reload_templates] si oui ou non les templates doivent être rechargés entre les requêtes. Activé en mode développement. -[root] dossier racine du projet. +[root] chemin pour le dossier racine du projet. Si non défini, + il découle du paramètre app_file. -[raise_errors] soulever les erreurs (ce qui arrêtera l'application). +[raise_errors] soulever les erreurs (ce qui arrêtera l'application). + Désactivé par défaut sauf lorsque env est défini + à "test". [run] si activé, Sinatra s'occupera de démarrer le serveur, ne pas activer si vous utiliser rackup ou autres. @@ -1449,10 +1456,14 @@ protection : Par défaut ['thin', 'mongrel', 'webrick'], l'ordre indiquant la priorité. -[sessions] active l'enregistrement des sessions en utilisant les - cookies. +[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. -[show_exceptions] affiche la trace de l'erreur dans le navigateur. +[show_exceptions] affiche la trace de l'erreur dans le navigateur lorsqu'une + exception se produit. Désactivé par défaut sauf lorsque + env est défini à "development". [static] Si oui ou non Sinatra doit s'occuper de servir les fichiers statiques. @@ -1471,7 +1482,8 @@ protection : [threaded] à définir à +true+ pour indiquer à Thin d'utiliser EventMachine.defer pour traiter la requête. -[views] dossier des vues. +[views] chemin pour le dossier des vues. Si non défini, il + découle du paramètre app_file. == Environements From 46fb0684f88c183a4566483f0e50bb239551f10e Mon Sep 17 00:00:00 2001 From: michelc Date: Sun, 4 Mar 2012 09:33:57 +0100 Subject: [PATCH 17/23] 'env' is actually 'environment' in readme.fr too --- README.fr.rdoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 545f02ab..3c6b74b8 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1442,8 +1442,8 @@ protection : il découle du paramètre app_file. [raise_errors] soulever les erreurs (ce qui arrêtera l'application). - Désactivé par défaut sauf lorsque env est défini - à "test". + Désactivé par défaut sauf lorsque environment + est défini à "test". [run] si activé, Sinatra s'occupera de démarrer le serveur, ne pas activer si vous utiliser rackup ou autres. @@ -1463,7 +1463,7 @@ protection : [show_exceptions] affiche la trace de l'erreur dans le navigateur lorsqu'une exception se produit. Désactivé par défaut sauf lorsque - env est défini à "development". + environment est défini à "development". [static] Si oui ou non Sinatra doit s'occuper de servir les fichiers statiques. From 8b11212ed91a97ecc0139a21df29efc0767aafe0 Mon Sep 17 00:00:00 2001 From: michelc Date: Tue, 6 Mar 2012 00:54:55 +0100 Subject: [PATCH 18/23] Sync readme.fr for classic vs modular style --- README.fr.rdoc | 84 +++++++++++++++++++++++--------------------------- 1 file changed, 38 insertions(+), 46 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 3c6b74b8..f4068153 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -157,7 +157,7 @@ plusieurs valeurs : set(:auth) do |*roles| # <- ici on utilise un splat condition do unless logged_in? && roles.any? {|role| current_user.in_role? role } - redirect "/login/", 303 + redirect "/login/", 303 end end end @@ -1635,16 +1635,16 @@ recommandé : end end -== Sinatra::Base - Les Middlewares, les Bibliothèques, et les Applications Modulaires +== Sinatra::Base - Les Middlewares, Bibliothèques, et Applications Modulaires -Définir votre application au niveau supérieur fonctionne bien pour les -micro-applications, mais peut s'avérer moins pratique lorsqu'il s'agit -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 : +Définir votre application au niveau supérieur fonctionne bien dans le cas des +micro-applications mais présente pas mal d'inconvénients pour créer des +composants réutilisables sous forme de middlewares Rack, de Rails metal, de +simples librairies avec un composant serveur ou même d'extensions Sinatra. Le +niveau supérieur suppose une configuration dans le style des micro-applications +(une application d'un seul fichier, des répertoires ./public et +./views, des logs, une page d'erreur, etc...). C'est là que +Sinatra::Base prend tout son intérêt : require 'sinatra/base' @@ -1657,51 +1657,43 @@ logs, pages 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 -deux modifications : +Les méthodes de la classe Sinatra::Base sont parfaitement identiques à +celles disponibles via le DSL de haut niveau. Il suffit de deux modifications +pour transformer la plupart des applications de haut niveau en un composant +Sinatra::Base : -* 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. +* Votre fichier doit charger +sinatra/base+ au lieu de +sinatra+, sinon toutes + les méthodes du DSL Sinatra seront importées dans l'espace de nom principal. +* Les gestionnaires de routes, la gestion d'erreur, les filtres et les options + doivent être placés dans une classe héritant 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 -Configuration}[http://sinatra.github.com/configuration.html] -pour plus de détails sur les options et leur comportement. +Sinatra::Base est une page blanche. La plupart des options sont +désactivées par défaut, y compris le serveur intégré. Reportez-vous à +{Options et Configuration}[http://sinatra.github.com/configuration.html] +pour plus d'informations sur les options et leur fonctionnement. === Style modulaire vs. style classique -Contrairement aux croyanaces, le style classique n'a rien de mauvais. Si cela -convient à votre application, vous n'avez pas à changer pour une application -modulaire. +Contrairement aux idées reçues, il n'y a rien de mal à utiliser le style +classique. Si c'est ce qui convient pour votre application, vous n'avez pas +aucune raison de passer à une application modulaire. -Il n'y a que deux inconvénient au style classique comparé au style modulaire : +Le principal inconvénient du style classique sur le style modulaire est que vous +ne pouvez avoir qu'une application Ruby par processus Ruby. Si vous pensez en +utiliser plus, passez au style modulaire. Et rien ne vous empêche de mixer style +classique et style modulaire. -* Vous ne pouvez avoir qu'une seule application Sinatra par processus Ruby. Si - vous envisagez d'en utiliser plus, passez au style modulaire +Si vous passez d'un style à l'autre, souvenez-vous des quelques différences +mineures en ce qui concerne les paramètres par défaut : -* Le style classique pollue la classe Object avec des méthodes déléguantes. - Si vous prévoyez de diffuser votre application dans une bibliothèque/gem, - passez 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 par défaut : - - Paramètre Classique Modulaire - - app_file fichier chargeant sinatra nil - run $0 == app_file false - logging true false - method_override true false - inline_templates true false - static true false + Paramètre Classique Modulaire + app_file fichier chargeant sinatra fichier héritant de Sinatra::Base + run $0 == app_file false + logging true false + method_override true false + inline_templates true false + static true false === Servir une application modulaire From f3b5008122e9afd144041cbc1a286028321358ef Mon Sep 17 00:00:00 2001 From: michelc Date: Tue, 6 Mar 2012 01:04:22 +0100 Subject: [PATCH 19/23] Remove trailing spaces in readme.fr --- README.fr.rdoc | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index f4068153..d0bcd50c 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -166,7 +166,7 @@ plusieurs valeurs : "Informations sur votre compte" end - get "/reserve/aux/admins/", :auth => :admin do + get "/reserve/aux/admins/", :auth => :admin do "Seuls les administrateurs sont acceptés ici !" end @@ -254,7 +254,7 @@ avez la possibilité d'utiliser un autre répertoire en définissant le paramèt set :public_folder, File.dirname(__FILE__) + '/statique' Notez que le nom du dossier public n'apparait pas dans l'URL. Le fichier -./public/css/style.css sera appelé via l'URL : +./public/css/style.css sera appelé via l'URL : http://exemple.com/css/style.css. Utilisez le paramètre :static_cache_control pour ajouter l'information @@ -1355,7 +1355,7 @@ améliorer les performances) : disable :protection Pour désactiver seulement un type de protection, vous pouvez définir +protection+ -avec un hash d'options : +avec un hash d'options : set :protection, :except => :path_traversal @@ -1441,7 +1441,7 @@ protection : [root] chemin pour le dossier racine du projet. Si non défini, il découle du paramètre app_file. -[raise_errors] soulever les erreurs (ce qui arrêtera l'application). +[raise_errors] soulever les erreurs (ce qui arrêtera l'application). Désactivé par défaut sauf lorsque environment est défini à "test". @@ -2002,7 +2002,7 @@ Sinatra devrait fonctionner sur n'importe quel système d'exploitation supportant l'implémentation Ruby choisie. Il n'est pas possible d'utiliser Sinatra sur Cardinal, SmallRuby, Blueuby ou -toute version de Ruby antérieure à 1.8.7. +toute version de Ruby antérieure à 1.8.7 à l'heure actuelle. == Essuyer les plâtres @@ -2010,7 +2010,7 @@ Si vous voulez utiliser la toute dernière version de Sinatra, n'ayez pas peur de faire tourner votre application sur la branche master, cela devrait être stable. -Nous publions également une gem de +prerelease+ de temps en temps que vous +Nous publions également une gem de +prerelease+ de temps en temps que vous pouvez installer comme suit : gem install sinatra --pre From f19b43ab2a87abdd5b0559348b957f006d925560 Mon Sep 17 00:00:00 2001 From: michelc Date: Tue, 6 Mar 2012 01:10:07 +0100 Subject: [PATCH 20/23] Add :status option support to send_file in readme.fr --- README.fr.rdoc | 3 +++ 1 file changed, 3 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index d0bcd50c..da082d67 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1144,6 +1144,9 @@ Les options sont : [length] entête Content-Length, par défaut la taille du fichier +[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+. From 82c6ea5ee61ce94834dccc17932192b7433c98e8 Mon Sep 17 00:00:00 2001 From: michelc Date: Tue, 6 Mar 2012 01:16:43 +0100 Subject: [PATCH 21/23] Show how to define helper functions in a separate 'module' for readme.fr --- README.fr.rdoc | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index da082d67..5f374f12 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -733,6 +733,21 @@ qui seront accessibles dans vos gestionnaires de route et dans vos templates : bar(params[:nom]) end +Vous pouvez aussi définir les méthodes helper dans un module séparé : + + module FooUtils + def foo(nom) "#{nom}foo" end + end + + module BarUtils + def bar(nom) "#{nom}bar" end + end + + helpers FooUtils, BarUtils + +Cela a le même résultat que d'inclure les modules dans la classe de +l'application. + === Utiliser les sessions Une session est utilisée pour conserver un état entre les requêtes. Une fois From 67715048e0f199d9b08f0949861e2e0cd5958d30 Mon Sep 17 00:00:00 2001 From: michelc Date: Tue, 6 Mar 2012 01:21:22 +0100 Subject: [PATCH 22/23] Sync delegator links in readme.fr --- README.fr.rdoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.fr.rdoc b/README.fr.rdoc index 5f374f12..89198682 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -1937,9 +1937,9 @@ Vous avez le binding du contexte de délégation dans : * Le binding de haut niveau, si vous avez utilisé require "sinatra" * Un objet qui inclut le module +Sinatra::Delegator+ -Jetez un oeil pour vous faire une idée : voici le mixin -{Sinatra::Delegator}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/base.rb#L1128] -qui est {inclus dans l'espace de noms principal}[http://github.com/sinatra/sinatra/blob/ceac46f0bc129a6e994a06100aa854f606fe5992/lib/sinatra/main.rb#L28] +Jetez un oeil pour vous faire une idée : voici le +{mixin Sinatra::Delegator}[https://github.com/sinatra/sinatra/blob/ca06364/lib/sinatra/base.rb#L1609-1633] +qui {étend l'objet principal}[https://github.com/sinatra/sinatra/blob/ca06364/lib/sinatra/main.rb#L28-30]. == Ligne de commande From 5af6f12ba36af0645bc3e1f86361bc82f63f2e38 Mon Sep 17 00:00:00 2001 From: michelc Date: Tue, 6 Mar 2012 01:38:49 +0100 Subject: [PATCH 23/23] Documents logging set to nil in readme.fr --- README.fr.rdoc | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/README.fr.rdoc b/README.fr.rdoc index 89198682..3fb352a7 100644 --- a/README.fr.rdoc +++ b/README.fr.rdoc @@ -975,6 +975,11 @@ vous aurez à l'activer vous-même : end end +Si vous souhaitez utiliser votre propre logger, vous devez définir le paramètre ++logging+ à +nil+ pour être certain qu'aucun middleware de logging ne sera +installé (notez toutefois que +logger+ renverra alors +nil+). Dans ce cas, +Sinatra utilisera ce qui sera présent dans env['rack.logger']. + === Types Mime Quand vous utilisez send_file ou des fichiers statiques, vous