JeuWeb - Crée ton jeu par navigateur
Allons à la rencontre de Sinatra - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Allons à la rencontre de Sinatra (/showthread.php?tid=5187)



Allons à la rencontre de Sinatra - Plume - 21-01-2011

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 :

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.


RE: Allons à la rencontre de Sinatra - Viciousity - 21-01-2011

Hellot très interessant tutoriel, je pense néanmoins que donner une explication pour la GEM shotgun (qui permet de ne pas relancer a chaque fois le serveur lors de modif) et mongrel qui permet un émulateur beaucoup plus performant et rapide que webrick.


RE: Allons à la rencontre de Sinatra - Plume - 21-01-2011

Mongrel ou WEBrick, ca ne m'intéresse pas. Par contre, Shotgun, c'est prévu Smile


RE: Allons à la rencontre de Sinatra - Holy - 21-01-2011

Ca fonctionne aussi si je tape "$ gem install sinatra" dans mon terminal windows ?


RE: Allons à la rencontre de Sinatra - Plume - 21-01-2011

Heu... Pour être honnête, je n'ai clairement aucune idée des bonnes habitudes de développement ruby sous Windows. Tu as déjà fait du Ruby ? Sous Windows ou ailleurs.

Sinon, si ça ne marche pas, je pense que tu devrais utiliser Cygwin qui est un émulateur de terminal Unix pour Windows.

Et petite précision, le symbole $ (dollar) n'est pas à saisir. Il est là pour indiquer qu'on est dans un terminal unix. La convention veut qu'on utilise le symbole # (dièse) pour indiquer qu'on est dans un terminal unix en tant qu'utilisateur root.
Mise à jour du billet d'origine. J'aurais pas dû passer par un parseur HTML->BBCode Big Grin


RE: Allons à la rencontre de Sinatra - Holy - 22-01-2011

Je posais la question précisément parce que beaucoup de programmeurs amateurs fonctionnent encore sous windows ^^ Il vaut donc mieux prévenir que les manipulations concernent les environnements unix.

Perso, j'ai pas d'ordis stables avec un distrib linux en dehors de mon eeePc, donc ça va être juste. Mais je m'essaierais bien au ruby pour voir ce que ça donne ^^


RE: Allons à la rencontre de Sinatra - Plume - 24-01-2011

Sephi-Chan a publié un billet sur l'installeur Ruby pour Windows ( http://jeuweb.org/showthread.php?tid=7367&pid=93771#pid93771 )

Je pense donc que les commandes fonctionnent aussi à quelques différences près.