Alex Girard home in English en Francais

Initiation à Merb

20 Nov 2008 – Toulouse

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:

Le Routeur Merb

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

blog comments powered by Disqus