Oupsnow de Merb à Rails
Dernièrement, j'ai fini par me décider de migrer Oupsnow, de Merb à Rails.
Alors que je finissais une migration de SQL à MongoDB, j'en entame une nouvelle. Celle-ci beaucoup plus profonde.
La raison de ma migration ?
Rails 3. En effet, depuis Décembre 2008, soit presque un an, Merb s'est figé. Certain me diront que la communauté Merb est en train de revivre et c'est tout à fait vrai. J'en suis même ravi. Mais Merb a pris un immense retard en presque un an. Même si Rails n'a pas vraiment avancé dans sa version stable, sa version Edge a elle énormément avancée.
Voulant toujours tester les nouvelles technologies en Ruby, je voudrais tester Rails 3. Mais aucun système n'existe pour passer de Merb à Rails 3. Un rapide test m'a montré que la différence était par contre minime entre Rails 2.3.x et Rails 3. La migration de Rails 2.3.x à Rails 3 en sera donc d'autant plus simple.
Voulant vraiment sortir une version stable le plus vite possible, j'ai donc pris la décision de migrer Oupsnow vers Rails 2.3.x pour ensuite migrer sur Rails 3 pour cette fois sortir une version de Oupsnow compatible Rails 3.
Oupsnow devient donc un projet Rails/MongoMapper et non plus Merb/DataMapper comme sa dernière version. Toute aide est bien-sûr la bienvenue.
[...]Observer Vs Callback
Il y a peu au boulot, j'ai indiqué ma désapprobation des Observeurs face au Callback. Je vais donc le coucher ici par écrit mon sentiment.
L'Observeur
Dans Rails, il y a au premier abord une fonctionnalité vraiment intéressante. L'Observeur. Grâce à lui, on peux définir une classe qui vérifie le comportement d'un model et effectue certaine action suite à ses observations. Il permet d'ajouter des événements avant/après l'enregistrement, la mise a jour ou la destruction d'un model.
Pour mettre en place un observeur, il suffit de créer une classe héritant de ActiveRecord::Observer, mettre son code dedans et la définir comme observeur dans le fichier environment.rb. Rien de plus simple et ça marche très bien.
Le Callback
Mais Rails a déjà intégré dans ses models, les fonctions de callback utilisé par le observeur. En effet, on peux tout à fait définir N action after_save ou before_create. Ces méthodes seront appelés à l'événement voulu.
Mais que choisir ?
C'est là où je dis que le callback est plus intéressant que l'observeur. En effet, un callback fait exactement la même chose qu'un Observeur. Mais lui au moins on sait qu'il est là. En ouvrant la classe on découvre le callback. Pour détecter un Observeur, il faut regarder les fichiers de config de Rails et ouvrir une à une les classes Observeurs.
Même le cas du nombre de ligne n'est pas réel car il est tout à fait possible de sortir ses callbacks dans des modules. De même pour une réutilisation sur plusieurs classes. Le module le permet sans problème.
Personnellement, je n'ai jamais constater un seul cas où l'observeur avait plus d'intérêt que des callback. Si vous en trouvez, je suis vraiment curieux.
[...]La before Paris on Rails, c'est la Rails Party le 30 Novembre 2008
Alors que la journée Paris On Rails aura lieu le 1er décembre, l'association RubyFrance où je fais partie du Conseil d'Administration a décidé d'organiser une après-midi/soirée la veille. Ce rassemblement aura pour objectif de permettre à tous les acteurs de la communauté RubyOnRails de se rencontrer dans un endroit convivial.
Au niveau du programme, il y aura des Hackfest (Typo et peut-être Pictrails ?) et des présentations toutes l'après midi. J'animerais ainsi une ou deux présentations. Tout d'abord sur l'exemple de migration d'une application RubyOnRails de Rails 2.0 à Rails 2.2 en montrant l'exemple de Typo. Ensuite sur les Test par Rspec que je pratique sur Pictrails et Typo.
Bien-sûr, le programme n'est pas figé vu que le maitre mot de cette journée est « Cool et Relax ».
En tout cas moi j'y serais durant toute la période et je serais heureux de rencontrer de nouvelle personne de la communauté.
Donc tout en chœur dites : J'Y SERAIS \o/
Pour plus d'information, vous pouvez consulter la page d'évenement sur le site rubyfrance. Sinon Frédéric sera aussi présent.
[...]Vivre avec Edge (ou quoi de neuf dans Rails Edge) #3
traduction de Vivre avec Edge #3
Il n'y a pas grand chose à noter comme gros changements ou fonctionnalités dernièrement dans edge Rails, alors je vais parler des commits rails concernant quelques bugs fixes et changements mineurs que je n'ai pas indiqué précédement. Il y a eu un travail en cours avec un refactoring et multithreading de ActionPack ainsi qu'un peu d'activité sur ActiveModel, mais rien de réelement concret encore (c'est toujours en cours de travaux).
Comme d'habitude n'hésitez pas à laisser des critiques ou suggestions dans les commentaires.
Support de Thin avec script/server
script/server vérifie désormais la disponibilité de Thin et l'utilise. Pratique si
vous utilisez Thin comme serveur de production (et voulez lancer avec le même
serveur durant le développement). Vous devez ajouter config.gem
'hin' en premier dans votre environment.rb pour que cela
fonctionne.
Ce patch est une contribution d'un des gars de fluxin.
String#humanize peux être configurable par les régles d'inflection
La méthode d'extension du core String#humanize est utilisé
pour convertir les string avec des underscores en texte lisible plus
facilement (utilisé pour les noms des colonnes). Par exemple,
"actor_salary".humanize => "Actor salary" "anime_id".humanize => "Anime"
Parfois cela ne fonctionne pas aussi bien, quand vous avez des héritages de
tables ou des noms de colonnes "inhumain" comme "act_sal_money" (qui est
réellement "Actor salary", mais qui sera #humaize-d en
"Act Sal Money").
Vous pouvez désormais spécifier une régle d'inflection (exactement comme pour les règles de mots pluriel/singulier/irrégulier/invariable).
Inflector.inflections do |inflect| inflect.human /_cnt$/, '\1_count' inflect.human 'act_sal_money', 'Actor Salary' end
Remarquez que vous pouvez aussi utiliser une expression régulière pour convertir une colonne comme "click_cnt" en "Click count".
Merci à Dan Manges et Pascal Ehlert pour ce patch.
Possibilité de spécifier des conditions sur des tables multiples en utilisant un hash.
Pratik a commité un petit (mais très pratique) changement d'ActiveRecord qui permet de spécifier des conditions sur les jointure dans leur propre hash. Un exemple sera plus explicite:
Anime.all( :joins => :character, :conditions => { :active => true, :characters => { :gender => 'female' } } )
La requête ActiveRecord précédent permet de trouver tous les anime "actif" qui comme charactère une "femme".
Outro
C'est tout pour cette semaine dans "Living on the Edge". Faites moi savoir si vous désirez voir plus d'information sur les changement et bug fixes mineurs que j'ai mis à l'écart cette semaine.
[...]AR-Backup cool et patché
Il y a un petit plugin que j'affectionne de par son utilité. Il s'agit de ar-backup. Il a été réalisé par Matt Aimonetti qui est un des contributeurs français à Rails.
Mais voilà, j'ai eu quelques difficultés avec ce plugin. En effet, ma locale par défaut est le français et il y avait une erreur de récupération de la révision SVN dû a un pattern dans la tâche ajouté par le plugin. Ce pattern supposait la locale anglaise et non une autre locale. Ainsi il n'arrivait pas à récupérer le numéro de version adéquate.
J'ai tout d'abord reporté ce bug sur la page du projet et réfléchis à une meilleur méthode. J'ai ainsi pu créer un patch qui devrait permettre de faire fonctionner correctement ce plugin dans toutes les locales. En effet, il se base sur les fichiers de configuration directement intégré au dossier .svn et non à la commande. Même au niveau des performances, je pense que c'est un peu amélioré. En tout cas pour moi il fonctionne. Attendons de voir la réaction de Matt.
[...]