… ou une occasion d’apprendre

Rails 1.1, quoi de neuf ?

Posté le 4 avril 2006 à 19:30

Le 26 mars 2006, il y a maintenant quelques jours, la version 1.1 de Ruby On Rails est sortie en version stable après avoir passé quelques jours par le stade de Release Candidate.

Pas de précipitation

Cette nouvelle mouture apporte un grand nombre de nouveauté et un certain nombre d’applications et plugins ne fonctionne plus avec. Il est donc fortement conseillé de faire un freeze de rails pour les application en production avant de faire une mise à jour. Pour ceci il existe plusieurs méthodes :

rake rails:freeze:gems

Exporte la version courente de rails dans vendor, attention si vous avez déjà mis à jour rails sur la machine cette méthode ne fonctionnera pas.

rake freeze_edge REVISION=3303

Exporte la version 1.0 depuis le svn de rails, cette méthode permet d’être certain d’avoir la bonne révision.

Les deux méthodes ci-dessus sont idéal pour figer une application en production tout en travaillant avec une autre version de rails sur une machine de développement. Mais il est également possible de faire ceci directement dans svn via la propriété svn:externals pour que les checkouts de l’application soit automatiquement accompagné de celui de la version 1.0 de rails.

Editer la propriété svn:externals du répertoire vendor et y ajouter la ligne suivante comme suis :

svn propedit svn:externals vendor

rails http://dev.rubyonrails.org/svn/rails/tags/rel_1-0-0

Au prochain update rails sera mis à jour dans vendor.

A noté que cette méthode est très utile si on veut travailler avec une version particulière du trunk pour bénéficier de nouveautés mais qu’il faut être prudent puisque des problèmes peuvent survenir.

Ruby 1.8.4

Il est fortement conseillé de passer à ruby 1.8.4 lors de cette mise à jour mais RMagick apporte quelques problèmes. La RC1 de l’installateur pour windows est disponible et une version béta compilé de RMagick pour la 1.8.4 également. Si vous utilisez RMagick et que des tabulations se trouvent dans vos fichiers rhtml il faut les remplacer par des espaces ou attendre que le problème soit résolu avant de faire cette mise à jour qui n’est pas indisspenssable (seul console de rails ne peut fonctionner sans celle-ci).

Alors quoi de neuf ?

Et bien beaucoup de choses, pour commencer plus de 500 problèmes de la version précédente ont été résolu. Mais c’est surtout l’arrivé de RJS (template javascript), d’importantes nouvelles fonctionnalités dans ActiveRecord, respond_to permettant une meilleur intégration des différentes méthodes d’accès au controlleur (AJAX, non-_AJAX et API) et enfin l’apparition des testes d’intégrations qui viennent compléter les testes unitaires et fonctionnels.

Railties

  • Le format par défaut du schema de la base de donnée est maintenant ruby et non plus sql
  • script/process/spinner n’existe plus et est remplacé par l’option -r/--repeat sur script/process/spawner
  • L’environnement de test est forcé lorsque les tests sont effectué.
  • La page par défaut index.html donne maintenant des informations sur rails via AJAX et Rails::InfoController
  • Un fichier public/javascripts/application.js vide est maintenant créé et automatiquement inclue dans les pages par le helper javascript_include_tag :defaults. On peut y mettre du code javascript spécifique à l’application
  • script/console à maintenant une méthode reload! afin de recharger les models, les helper y sont également disponible
  • Les tâche dans rake ont maintenant un namespace, par exemple load_fixtures deviens db:fixtures:load. Les anciens nom sont toutefois encore utilisable et rake --tasks vous donnera la liste des nouveaux noms. A noté que
  • db:fixtures:load FIXTURES=people permet maintenant de charger exclusivement certaines fixtures dans l’environnement
  • Il est maintenant possible de ne lancer que les tests pour les changements depuis le dernier commit via test:uncommitted

ActiveSupport

  • Chaque objet à maintenant la méthode with_options qui permet de faire plusieurs oppérations sur le même objet dans un block avec des paramêtres par défaut
  • La méthode to_json renvoie une représentation peut renvoyer la représentation sous la forme d’une chaine JSON de chaque objet
  • Les objets enumerables ont maintenant une méthode group_by pour grouper les collections sur la base du résultat d’un block
  • Le type Array à maintenant la méthode in_groups_of qui permet de faire une itération sur des groupes d’une certaine taille
  • Les types Hashes et Array ont maintenant une méthode to_xml
  • Ajout de la métode secondes au type _Fixnum pour permettre de faire 5.minutes + 30.seconds
  • La nouvelle méthode diff du type Hashes permet de connaitre la différence entre deux hash
  • Time à une nouvelle méthode beginning_of_quarter
  • Le support de la délégation permet de délégué l’appel d’une méthode d’un model à une association
  • Object#copy_instance_variables_from(object) copies les variables d’instances d’un objet dans un autre
  • Object#extended_by permet de connaitre les modules inclue ou étendue par une instance
  • Object#extend_with_included_modules_from(object) étend une instance avec les modules d’une autre instance

ActiveRecord

  • has_many :through permet de faire une association à travers une autre (documentation).
  • Les Association polymorphique (explications)
  • with_scope (explication)
  • Nouvelles méthodes de calcul sur les attributs d’un modèle (introduction)
  • Chargement en cascade des données se qui permet d’avoir en une seul requête touts les auteurs, leurs messages et les commentaires dans la requête suivante par exemple : Author.find(:all, :include=> { :posts=> :comments })
  • Héritage par find des options spécifiés lors de la déclaration d’une association has_many et has_and_belongs_to_many
  • Représentation XML des données avec la méthode to_xml
  • validate_uniqueness_of peut maintenant associé plusieurs colonnes
  • t => :delete_all remplace xclusively_dependent
  • find pour has_many et has_and_belongs_to_many à maintenant les options , *:limit, * et *:select
  • Les fixtures peuvent être placé dans des sous-répertoire de test/fixtures
  • validates_length_of fonctionne avec UTF-8

Actionpack

  • Template RJS, en plus des templates .rhtml (Ruby HTML) il est maintenant possible de créer des .rjs. Il est donc possible d’écrire des templates avec du code ruby pour générer du code javascript (Documentation)
    • alert, fait apparaitre une fenêtre de dialogue
    • redirect_to, redirection javascript
    • call, pour appeler une fonction javascript
    • assign, pour assigner une valeur à une variable javascript
    • replace, pour remplacer le code html d’un élément
    • insert_html, pour inssérer du code html dans un élément
    • visual_effect, pour déclancher un effet visuel
    • hide, pour cacher un élément
    • Il est possible de se référer à un élément
    • select, pour séléctionner un élément avec le séléecteur CSS
    • drag and drop
    • delay, exécution avec un délai
    • Exepetion RJS via une fenêtre de dialog
    • Méthodes énumérable
  • Il est également possible de générer du code javascript à ajouter dans une vue directement depuis un controller
  • Possibilité de créer des Helpers RJS pour mettre à jour un block
  • Une action dans un controller peut maintenant répondre à plusieurs type de service (html, xml, javascript via la méthode respond_to
  • Possibilité de modifier le parsers de paramêtre en fonction du content/type reçus
  • De nouveaux helpers pour formulaire (form_for, form_remote_for, et fields_for)
  • Tests d’intégrations. Ceux-ci permettent de tester plusieurs controlleurs et actions de façons successive et le fonctionnement complet de l’application depuis le dispatcher jusqu’à la base de donnée. Ils permettent également de tester des accès concurents à l’application via plusieurs session.
  • render(:xml => xml) fonctionne comme render(:text => text)
  • Ajout de l’option content_type à la méthode render
  • Les fichiers contenant les Helpers ne sont plus obligatoire
  • Il est possible de spécifier une autre sélection que la valeur de l’objet au helper select grace à l’option selected
  • button_to_function fonctionne comme link_to_function

Prototype

  • Nouvelle classe de séléction
  • De nouvelles méthodes ajouté à String : truncate, gsub, sub, scan et strip
  • Ajax assigne ‘text/javascript, text/html, application/xml, text/xml ’ au header HTTP Accept pour informer Rails qu’il préfaire un RJS en retour mais accepte les autres formats.
  • Element.replace est une implémetation de outerHTML fonctionnant sur les différents navigateurs

Cette article est basé sur un poste en anglais de Scott Raymond. Il ne reprend pas la totalité des nouveautés qu’il a cité et aucun des exemples de code. Je vous invite à le lire pour plus d’information. Vous pouvez aussi vous intéraisser au poste de Mike Clark, toujours en anglais et qui fait une liste de modifications oublié de cette nouvelle version.

Articles relatifs





Envoyer une réponse

Ce site supporte OpenID, vous pouvez vous authentifier en entrant votre identité dans le champ adéquat mais ceci n'est pas obligatoire.

Si vous ne vous authentifiez pas avec OpenID le nom et l'email sont requis. Si vous vous authentifiez pour la première fois, les renseigner permet de vous assurer des informations qui seront associées à votre profile (si il existe déjà elles seront mises à jour).