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.

English translation

[...]
Published on Mer 18 nov 2009 22:47
3 commentaires

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.

[...]
Published on Dim 14 juin 2009 21:35
3 commentaires

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.

[...]
Published on Ven 21 nov 2008 15:15
1 comment

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.

Changeset

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.

Changeset

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".

Changeset

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.

[...]
Published on Lun 04 août 2008 19:39
0 commentaires

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.

[...]
Published on Mar 27 nov 2007 17:12
0 commentaires

RSS