Rulebook, la création de méthodes à la sauce Expression Régulière !

  • Partager l'article

Rulebook est une gem dévéloppée par c00lryguy

Rulebook offre des possibilités pour étendre ses classes Ruby / Ruby on Rails avec des méthodes dynamiques construites sur des expressions régulières.

Vous connaissez sans doute les facilités fournies par ActiveRecord avec les méthodes find_by et find_all_by. Vous pouvez ajouter à ces méthodes le nom d’un attribut sur lequel vous voulez directement rechercher. Le fonctionnement était tout simplement basé sur la méthode magique de Ruby : method_missing. Si la méthode appelée sur un objet ne correspondait pas à une méthode déclarée et qu’elle avait la structure de type find_by_ ou find_by_all_, alors la méthode à method_missing se chargeait de faire la requête associée.

C’est sans doute sur cette idée que Rulebook a été créée. Elle va au delà en vous permettant de définir les structures qui seront prises en compte par method_missing. La définition se fait par une expression régulière qui va créer une liste virtuelle de méthodes.
Par exemple, si on souhaite automatiser les méthodes de vérification du statut (administrateur, simple utilisateur, etc) d’un utilisateur :

require 'rulebook'
#
class User
    def initialize(name, status)
        @name  = name
        @status = status
    end
  #
    rule /is_(a_)*(admin|super_user|user)\?/ do |a, status|
        @status == status.to_s.to_sym
    end
end
#
ryan = User.new('Ryan', :admin)
ryan.is_user? # false
ryan.is_admin? # true
ryan.is_a_user? # false
ryan.is_a_admin? # true

On peut tout autant appliquer cette idée aux méthodes de classe :

require 'rulebook'
#
class User
    attr :name, :status
  #	
    def initialize(status)
        @status = status
    end
  #
    class_rule /new_(admin|super_user|user)/ do |status|
        new(status.to_s.to_sym)
    end
end
#
ryan = User.new_admin
ryan.status # :admin
#	
brian = User.new_user
brian.status # :user

On remarquera donc qu’à l’heure actuelle, il n’est pas possible d’adjoindre des arguments aux méthodes créées. Cela apporte une grosse limitation mais le projet est tout récent, il évoluera sans doute dans ce sens

Lien permanent : http://scarfellan.com/YlM3YVad - mercredi 12 mai 2010