Introduction
Les gens qui fréquentent la communauté Ruby doivent probablement connaître Sinatra. Sinatra se défini comme un DSL (Domain Specific Language). Je m'y suis intéressé en souhaitant le mettre en application.
Je vais tâcher de rédiger des articles de façon à ce qu'une personne ne connaissant pas Ruby puisse comprendre voir même essayer de jouer avec Sinatra :) Pour ça, après avoir fait un bref tour de quelques fonctionnalités avec Sinatra, nous développerons une application Apero-Jeux. Cette application permettra d'organiser des lunchs, des apéros, des parties de jeux plateaux, whatever you want entre créateurs et joueurs fréquentant l'univers du jeux navichrons :)
Pour toutes questions, suggestions ou autre, intervenez :)
Quoi qu'est-ce que Sinatra
Sinatra, c'est juste un framework web comme il en existe d'autres tel Rails, la star du web. Alors pourquoi Sinatra ? Hey! Bonne question.
En quelques mots, Sinatra est framework léger et élégant. Il n'inclue pas des foules de helpers, une librairie ORM ou quoique ce soit d'autre un tant soit peu complexe. Il se veut simple et ça se verra dans votre application
Installer Sinatra
Plus simple, c'est compliqué. Il vous suffit de saisir la commande suivante dans votre terminal :
Et voilà.
Hello World!
Créer un fichier hello_world.rb. Et écrivez-y le code suivant :
Lancez la commande dans votre terminal :
Vous verrez WEBrick se lancer et que Sinatra écoute sur le port 4567. Vous pouvez donc voir le résultat de votre code en allant sur localhost:4567.
Chaque route définie une URL et correspond à un bloc. Vous pouvez donc facilement créer une autre url :
Maintenant, vous pouvez aller sur localhost:4567/about et voir le texte "The about page" s'afficher.
Parlons des routes
J'invite les personnes n'ayant jamais entendu parlé d'architecture REST à se renseigner. C'est quelque chose de vraiment intéressant et très utile.
Et d'ailleurs, c'est tout aussi présent dans Rails que dans Sinatra. Nous avons vu précédemment qu'il faut écrire un bloc pour définir une route. Et bien dans Sinatra, vous écrivez explicitement l'état de la requête HTTP pour la route que vous définissez :
La définition d'une route peut aussi contenir des paramètres qui deviennent accessibles via le hash (ou tableau associatif) params :
Vous pouvez avoir plusieurs paramètres ('/say/*/to/*'), définir une route grâce aux expressions régulières (%r{/hello/([\w]+)}), ajouter des conditions (get '/foo', :agent => /Songbird (\d.\d)[\d\/]*?/)
Les fichiers statiques
Comme dans Rails, les fichiers statiques sont par défaut récupérés dans le dossier ./public mais que le nom du dossier n'apparait pas dans l'URL.
Les vues
Dans Sinatra, les fichiers de templates et les vues sont stockés dans le dossier ./views. Il est d'ailleurs possible d'écrire des vues en HAML aussi bien qu'en ERB.
Tout comme vous pouvez facilement utiliser SASS ou SCSS :
Et ainsi de suite quelque soit le moteur de rendu que vous souhaitez utiliser (Textile, Markdown, …)
L'accès au données
Pour se faire, je vous invite à installer une gem telle que DataMapper, ActiveRecord ou Sequel. Dans notre exemple, j'utiliserai ActiveRecord.
On doit donc spécifier dans notre application que nous allons avoir besoin de notre ORM :
Ensuite, on établit la connexion à la base de données, ici en sqlite :
Puis on défini notre modèle :
J'ai créé une table users, qui contient les champs :
Enregistrez des données dans votre base de données et go vers la suite :)
Notre action :
Et enfin, notre rendu HTML (dans le dossier ./views, le fichier index.erb) :
Après avoir relancé Sinatra, vous verrez alors la liste des utilisateurs que contient votre base de données.
Conclusion
Voilà grossièrement comment jouer avec Sinatra. Il y a encore beaucoup de choses à faire & voir mais nous allons mettre tout ça & apprendre le reste en développant une application pour nous permettre de maitriser la bête.
Les gens qui fréquentent la communauté Ruby doivent probablement connaître Sinatra. Sinatra se défini comme un DSL (Domain Specific Language). Je m'y suis intéressé en souhaitant le mettre en application.
Je vais tâcher de rédiger des articles de façon à ce qu'une personne ne connaissant pas Ruby puisse comprendre voir même essayer de jouer avec Sinatra :) Pour ça, après avoir fait un bref tour de quelques fonctionnalités avec Sinatra, nous développerons une application Apero-Jeux. Cette application permettra d'organiser des lunchs, des apéros, des parties de jeux plateaux, whatever you want entre créateurs et joueurs fréquentant l'univers du jeux navichrons :)
Pour toutes questions, suggestions ou autre, intervenez :)
Quoi qu'est-ce que Sinatra
Sinatra, c'est juste un framework web comme il en existe d'autres tel Rails, la star du web. Alors pourquoi Sinatra ? Hey! Bonne question.
En quelques mots, Sinatra est framework léger et élégant. Il n'inclue pas des foules de helpers, une librairie ORM ou quoique ce soit d'autre un tant soit peu complexe. Il se veut simple et ça se verra dans votre application
Installer Sinatra
Plus simple, c'est compliqué. Il vous suffit de saisir la commande suivante dans votre terminal :
Code :
$ gem install sinatra
Et voilà.
Hello World!
Créer un fichier hello_world.rb. Et écrivez-y le code suivant :
Code :
require 'rubygems'
require 'sinatra'
get '/' do
'Hello world!'
end
Lancez la commande dans votre terminal :
Code :
$ ruby hello_world.rb
Vous verrez WEBrick se lancer et que Sinatra écoute sur le port 4567. Vous pouvez donc voir le résultat de votre code en allant sur localhost:4567.
Chaque route définie une URL et correspond à un bloc. Vous pouvez donc facilement créer une autre url :
Code :
get '/about' do
'The about page'
end
Citation :Important : À chaque modification de votre fichier, vous devez relancer votre serveur.
Maintenant, vous pouvez aller sur localhost:4567/about et voir le texte "The about page" s'afficher.
Parlons des routes
J'invite les personnes n'ayant jamais entendu parlé d'architecture REST à se renseigner. C'est quelque chose de vraiment intéressant et très utile.
Et d'ailleurs, c'est tout aussi présent dans Rails que dans Sinatra. Nous avons vu précédemment qu'il faut écrire un bloc pour définir une route. Et bien dans Sinatra, vous écrivez explicitement l'état de la requête HTTP pour la route que vous définissez :
Code :
get '/' do
'Montrer quelque chose'
end
post '/' do
'Enregistrer quelque chose'
end
put '/' do
'Mettre à jour quelque chose'
end
delete '/' do
'Détruire quelque chose'
end
Citation :Remarque : Gardez bien en tête que les routes répondent dans l'ordre où elles sont définies. Donc la première route qui correspond à la requête sera invoquée.
La définition d'une route peut aussi contenir des paramètres qui deviennent accessibles via le hash (ou tableau associatif) params :
Code :
get '/hello/:name' do
"Hello #{params[:name]}!"
end
Vous pouvez avoir plusieurs paramètres ('/say/*/to/*'), définir une route grâce aux expressions régulières (%r{/hello/([\w]+)}), ajouter des conditions (get '/foo', :agent => /Songbird (\d.\d)[\d\/]*?/)
Les fichiers statiques
Comme dans Rails, les fichiers statiques sont par défaut récupérés dans le dossier ./public mais que le nom du dossier n'apparait pas dans l'URL.
Les vues
Dans Sinatra, les fichiers de templates et les vues sont stockés dans le dossier ./views. Il est d'ailleurs possible d'écrire des vues en HAML aussi bien qu'en ERB.
Code :
require 'haml'
get '/' do
haml :index
end
Code :
require 'erb'
get '/' do
erb :index
end
Tout comme vous pouvez facilement utiliser SASS ou SCSS :
Code :
require 'sass'
get '/stylesheet.css' do
sass :stylesheet
end
Code :
require 'sass'
get '/stylesheet.css' do
scss :stylesheet
end
Et ainsi de suite quelque soit le moteur de rendu que vous souhaitez utiliser (Textile, Markdown, …)
L'accès au données
Pour se faire, je vous invite à installer une gem telle que DataMapper, ActiveRecord ou Sequel. Dans notre exemple, j'utiliserai ActiveRecord.
On doit donc spécifier dans notre application que nous allons avoir besoin de notre ORM :
Code :
require 'active_record'
Ensuite, on établit la connexion à la base de données, ici en sqlite :
Code :
ActiveRecord::Base.establish_connection(
:adapter => 'sqlite3',
:database => 'sinatra_application.sqlite3.db'
)
Puis on défini notre modèle :
Code :
class User < ActiveRecord::Base
end
J'ai créé une table users, qui contient les champs :
- id:integer
- name:string
- email:string
Enregistrez des données dans votre base de données et go vers la suite :)
Notre action :
Code :
get '/' do
@users=User.all
erb :index
end
Et enfin, notre rendu HTML (dans le dossier ./views, le fichier index.erb) :
Code :
<ul>
<% for user in @users %>
<li><%= user.id.to_s + ': ' + user.name + ' <'+ user.email + '>' %></li>
<% end %>
</ul>
Après avoir relancé Sinatra, vous verrez alors la liste des utilisateurs que contient votre base de données.
Conclusion
Voilà grossièrement comment jouer avec Sinatra. Il y a encore beaucoup de choses à faire & voir mais nous allons mettre tout ça & apprendre le reste en développant une application pour nous permettre de maitriser la bête.