DM-sweatshop, le petit truc en plus par rapport à Factory Girl

En jouant avec Oupsnow, j'ai découvert une astuce sur DM-sweatshop qui est vraiment génial. Aucun exemple n'indique ça et pourtant, c'est selon moi révolutionnaire et même un atout face à Factory Girl.

dm-sweatshop

Pour ceux qui ne le savent pas dm-sweatshop est un gem de génération de donnée, inspiré de Factory Girl.

Factory Girl a été conçu pour éviter les fixtures dans Rails. Il a aussi l'avantage de permettre une meilleure vue des données présentes dans sa base de donnée durant son test. Je conseille tout à fait son utilisation et migre progressivement tous mes tests à l'utilisation de ce genre d'outil.

dm-sweatshop est le Factory Girl dédié à DataMapper, même si Factory Girl peux tout à fait être utilisable avec DataMapper.

Son petit plus

dm-sweatshop contrairement à Factory gril, génére un Hash d'attribut, qu'il surcharge avec les données fournis et génére un objet à partir de ce hash. Ceci entraine par exemple, l'impossibilité d'utiliser les méthodes d'association, il faut directement associer les identifiants.

Mais là où est son petit plus est que justement à cause de cette génération d'un Hash, il y a un Proc qui est généré et rien n'empêche de mettre du code ruby pour générer d'autre objets ou récupérer des objets déjà existant. On peux ainsi écrire l'exemple suivant :

Member.fixture {
 user = User.first(:login.not => 'admin') || User.gen!
 project = Project.first || Project.gen!
 not_project_id = []
 while project.has_member?(user)
   not_project_id << project.id
   project = Project.first(:id.not => not_project_id) || Project.gen!
 end
 { :user_id => user.id,
 :project_id => project.id,
 :function_id => (Function.first ? Function.first.id : Function.gen.id),}
}

Dans cette exemple, je crée un objet Membre qui est la liaison entre un Projet et un User. Mais au préalable, j'ai récupéré et créé des éléments Projet et User si rien n'existait.

Grâce à dm-sweatshop, c'est enfin fini, les problèmes de multiples liaisons qui avec Factory Girl ne peuvent être contourné (d'après mon expérience en tout cas) ce qui entrainait la création de méthode complète pour créer tout ça. Désormais tout est au même endroit.

Je ne saurais donc vous encourager à utiliser dm-sweatshop sur tout projet DataMapper à la place de Factory Girl.

[...]
Published on Ven 24 juil 2009 08:57
0 commentaires

RailsCampParis 2, j'y étais et c'était sympa

Ca y est le RailsCamp Paris 2, c'est terminé hier avec un mashpit sur Merb. Je ne l'ai pas annoncé sur ce blog, mais j'étais bien sûr présent. Les locaux de Sun où nous avons pu faire ce RailsCamp était vraiment très beau et spacieux. Nous avons pu y avoir de très bonne discussion. Merci à Yannick d'avoir tenu le bar et à Jean-François Tran d'avoir organisé cet événement.:).

Au niveau des présentations, étant depuis décembre un fervent défenseur de Merb/DataMapper, j'ai fait de petite présentation sur ces deux outils merveilleux. En voici les slides :

Le lendemain, le mashpit sur Merb a ainsi vu l'apparition de 3 petit projets en Merb :

[...]
Published on Lun 09 mars 2009 07:45
0 commentaires

Envoyer un email dans un model DataMapper

Avec Merb-mailer, merb fourni un système d'envoi d'email. Par contre merb étant un framework web se voulant ORM agnostique, merb-mailer est considéré comme un controller et non comme un model. De ce fait l'utilisation de la méthode send_mail n'est disponible que dans les controllers. Mais alors comment utiliser la méthode send_mail dans son model ? C'est très simple. Là encore merb utilise un système entièrement ruby ce qui facilite le méchanisme

Après une courte recherche dans le code de merb-mailer, j'ai pu constater que que la commande send_mail était dans un mixin. l'inclusion de ce mixin suffit donc à avoir la commande pour l'utiliser.

class Member
  include DataMapper::Resource
  include Merb::MailerMixin

  property :id, Serial
  property :name, String

  def register
    // some code
    send_mail (UserMailer, :register, {
        :from => "no-reply@example.com",
        :to => person.email,
        :subject => "Please activate your account" 
    }
  end

English translation

[...]
Published on Sam 20 déc 2008 20:19
0 commentaires

Afficher les Log SQL avec Merb et DataMapper

Depuis peu, je tente d'utiliser Merb et DataMapper. Une différence notable entre Merb et Rails est le système de log. Comme Merb est ORM Agnostique, il n'affiche pas de base les logs SQL. J'ai cherché plusieurs fois comment avoir mes logs SQL de DataMapper directement dans ma console. J'ai fini par la trouvé sur le wiki de DataMapper. Je vous livre donc l'astuce :

Merb::BootLoader.after_app_loads do
  DataObjects::SQlite3.logger = DataObjects::Logger.new(STDOUT, :debug) 
end

Vous pouvez bien-sûr modifier le SQlite3 par Postgres ou MySQL. Cette comment fait une sortie en mode debug sur STDOUT. On aurait aussi pu mettre un fichier ('log/dm.log').

Pour connaitre la liste des niveaux de logs, la voici :

  • fatal
  • error
  • warn
  • info
  • debug
[...]
Published on Ven 27 juin 2008 11:43
0 commentaires

RSS Follow me on Twitter