Initiation à Merb
Thursday, November 20, 2008
Merb, nouveau framework Ruby, est le remplaçant officiel de Ruby on Rails.
Ruby on Rails est le framework de référence de développement web depuis quelques années, il permet de monter n’importe quelle application web en suivant la règle du 80-20: 80% des fonctionnalités en 20% du temps. Les limites de Rails se posent pour les 20% de fonctionnalités restantes de votre application, qui peuvent prendre un temps considérable à développer.
Merb a été conçu a partir de ce principe, avec l’expérience obtenu dans Rails, en reprenant ses principes et en le modulant afin de réduire le coût machine.
Pastie de la première version de Merb le 22 Septembre 2006
Les bases
Voici une série de tutorials, vidéo et liens vers de la documentation:
- Repository officiel de Merb sur Github
- Keynote du Merbcamp (vidéo, mp4), introduction de Merb par son créateur, souligne les bons points du framework. Seule la première partie de la vidéo est consacrée à Merb, la suite parle de Nanite, un système de daemons Ruby pour monter du Cloud Computing
- Wiki officiel de Merbivore avec beaucoup d’aide
Le Routeur Merb
- Merb plumbing: The router (vidéo, mp4)
- Slides de la conférence
Exemple d’une route customisée:
Merb::Router.prepare do
match(:domain => "mydomain.com") do
match("/this-article", :method => "get").
to(:articles)
# another route
end
end
Résolution du problème de sous-domaine:
match(:subdomain => /(.*)/).
to(account => "subdomain[1]") do
#application routes here
end
defer_to ajouter une couche logique dans le routeur:
match("/articles/:url").defer_to |request, param|
if article = Article.first(:url => params[:url])
# Article trouvée avec :url courante
params.merge(:articles, article)
elsif article = Article.first(:id => params[:url])
# Article trouvée avec :id présent dans l'url
# se diriger vers le bon article
redirect url(:articles, article.url)
else
# Route not matching, continue on router matches
false
end
end
Dans la lib des slices, on peut rajouter facilement des routes au routeur:
# Setup routes inside the host application
#
# @param scope<Merb::Router::Behaviour>
# Routes will be added within this scope (namespace). In fact, any
# router behaviour is a valid namespace, so you can attach
# routes at any level of your router setup.
#
# @note prefix your named routes with :mauth_password_slice_
# to avoid potential conflicts with global named routes.
def self.setup_router(scope)
# example of a named route
scope.match("/login", :method => :get ).to(:controller => "/exceptions", :action => "unauthenticated").name(:login)
scope.match("/login", :method => :put ).to(:controller => "sessions", :action => "update" ).name(:perform_login)
scope.match("/logout" ).to(:controller => "sessions", :action => "destroy" ).name(:logout)
end
Projets à suivre
- Gluttonberg: Slice CMS pour Merb – Wiki
- minigems: Version light de Rubygems pour charger les gems avec moins d’espace mémoire
- Déploiement d’application Merb avec Vlad et Git