<commit_before>= Sinatra
<i>Attention : Ce document correspond à la traduction de la version anglaise et
il n'est peut être plus à jour.</i>

Sinatra est un DSL pour créer rapidement et facilement des applications web en
Ruby :

  # mon_application.rb
  require 'sinatra'

  get '/' do
    'Bonjour le monde !'
  end

Installez la gem et lancez avec :

  gem install sinatra
  ruby -rubygems mon_application.rb

Le résultat est visible sur : http://localhost:4567

Il est recommandé d'exécuter également <tt>gem install thin</tt>, pour que
Sinatra utilise le server Thin quand il est disponible.

== Routes

Dans Sinatra, une route est une méthode HTTP couplée à un masque (pattern)
URL. Chaque route est associée à un bloc :

  get '/' do
    .. montrer quelque chose ..
  end

  post '/' do
    .. créer quelque chose ..
  end

  put '/' do
    .. remplacer quelque chose ..
  end

  patch '/' do
    .. changer quelque chose ..
  end

  delete '/' do
    .. effacer quelque chose ..
  end

  options '/' do
    .. apaiser quelquechose ..
  end

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 masques peuvent inclure des paramètres nommés, accessibles par
l'intermédiaire du hash <tt>params</tt> :

  get '/bonjour/:nom' do
    # répond aux requêtes "GET /bonjour/foo" et "GET /bonjour/bar"
    # params[:nom] est 'foo' ou 'bar'
    "Bonjour #{params[:nom]} !"
  end

Vous pouvez aussi accéder aux paramètres nommés directement grâce aux
paramètres du bloc comme ceci :

  get '/bonjour/:nom' do |n|
    "Bonjour #{n} !"
  end

Une route peut contenir un splat (caractère joker), accessible par
l'intermédiaire du tableau <tt>params[:splat]</tt> :

  get '/dire/*/a/*' do
    # répond à /dire/bonjour/a/monde
    params[:splat] # => ["bonjour", "monde"]
  end

  get '/telecharger/*.*' do
    # répond à /telecharger/chemin/vers/fichier.xml
    params[:splat] # => ["chemin/vers/fichier", "xml"]
  end

Ou par l'intermédiaire des paramètres du bloc :

  get '/telecharger/*.*' do |chemin, ext|
    [chemin, ext] # => ["path/to/file", "xml"]
  end

Une route peut aussi être définie par une Expression Régulière :

  get %r{/bonjour/([\w]+)} do
    "Bonjour, #{params[:captures].first} !"
  end

Là encore on peut utiliser les paramètres de bloc :

  get %r{/bonjour/([\w]+)} do |c|
    "Bonjour, #{c} !"
  end

=== Conditions

Les routes peuvent définir toutes sortes de conditions, comme par exemple le
"user agent" :

  get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
    "Vous utilisez Songbird version #{params[:agent][0]}"
  end

  get '/foo' do
    # Correspond à tous les autres navigateurs
  end

Les autres conditions disponibles sont +host_name+ et +provides+ :

  get '/', :host_name => /^admin\./ do
    "Zone Administrateur, Accès refusé !"
  end

  get '/', :provides => 'html' do
    haml :index
  end

  get '/', :provides => ['rss', 'atom', 'xml'] do
    builder :feed<commit_msg>Added optional parameter info to the README.fr<commit_after>﻿= Sinatra
<i>Attention : Ce document correspond à la traduction de la version anglaise et
il n'est peut être plus à jour.</i>

Sinatra est un DSL pour créer rapidement et facilement des applications web en
Ruby :

  # mon_application.rb
  require 'sinatra'

  get '/' do
    'Bonjour le monde !'
  end

Installez la gem et lancez avec :

  gem install sinatra
  ruby -rubygems mon_application.rb

Le résultat est visible sur : http://localhost:4567

Il est recommandé d'exécuter également <tt>gem install thin</tt>, pour que
Sinatra utilise le server Thin quand il est disponible.

== Routes

Dans Sinatra, une route est une méthode HTTP couplée à un masque (pattern)
URL. Chaque route est associée à un bloc :

  get '/' do
    .. montrer quelque chose ..
  end

  post '/' do
    .. créer quelque chose ..
  end

  put '/' do
    .. remplacer quelque chose ..
  end

  patch '/' do
    .. changer quelque chose ..
  end

  delete '/' do
    .. effacer quelque chose ..
  end

  options '/' do
    .. apaiser quelquechose ..
  end

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 masques peuvent inclure des paramètres nommés, accessibles par
l'intermédiaire du hash <tt>params</tt> :

  get '/bonjour/:nom' do
    # répond aux requêtes "GET /bonjour/foo" et "GET /bonjour/bar"
    # params[:nom] est 'foo' ou 'bar'
    "Bonjour #{params[:nom]} !"
  end

Vous pouvez aussi accéder aux paramètres nommés directement grâce aux
paramètres du bloc comme ceci :

  get '/bonjour/:nom' do |n|
    "Bonjour #{n} !"
  end

Une route peut contenir un splat (caractère joker), accessible par
l'intermédiaire du tableau <tt>params[:splat]</tt> :

  get '/dire/*/a/*' do
    # répond à /dire/bonjour/a/monde
    params[:splat] # => ["bonjour", "monde"]
  end

  get '/telecharger/*.*' do
    # répond à /telecharger/chemin/vers/fichier.xml
    params[:splat] # => ["chemin/vers/fichier", "xml"]
  end

Ou par l'intermédiaire des paramètres du bloc :

  get '/telecharger/*.*' do |chemin, ext|
    [chemin, ext] # => ["path/to/file", "xml"]
  end

Une route peut aussi être définie par une Expression Régulière :

  get %r{/bonjour/([\w]+)} do
    "Bonjour, #{params[:captures].first} !"
  end

Là encore on peut utiliser les paramètres de bloc :

  get %r{/bonjour/([\w]+)} do |c|
    "Bonjour, #{c} !"
  end

Les routes peuvent aussi comporter des paramètres optionnels :

  get '/posts.?:format?' do
    # répond à "GET /posts" et aussi à "GET /posts.json", "GET /posts.xml" etc...
  end

=== Conditions

Les routes peuvent définir toutes sortes de conditions, comme par exemple le
"user agent" :

  get '/foo', :agent => /Songbird (\d\.\d)[\d\/]*?/ do
    "Vous utilisez Songbird version #{params[:agent][0]}"
  end

  get '/foo' do
    # Correspond à tous les autres navigateurs
  end

Les autres conditions disponibles sont +host_name+ et +provides+ :

  get '/', :host_name => /^admin\./ do
    "Zone Administrateur, Accès refusé !"
  end

  get '/', :provides => 'html' do
    haml :index
  end

  get '/', :provides => ['rss', 'atom', 'xml'] do
    builder :feed
{'fraction_non_alphanumeric': 0.12506059137178865, 'fraction_numerical': 0.0016157699143641946, 'mean_word_length': 3.0563564875491482, 'pattern_counts': {'":': 0, '<': 19, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 9}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6459738', 'n_tokens_mistral': 2219, 'n_tokens_neox': 2186, 'n_words': 759}