Gentoo 2007.0
Une nouvelle release de la Gentoo est un peut un non évènement pour un utilisateur courent, on n’attend pas qu’elle sorte pour mettre notre machine à jour, tout au plus le changement de profil apportera quelques changements aux USE flag.
C’est surtout un nouveau liveCD qui inclura les versions récentes des logiciels courent et mettra à jour le processus d’installation. Le communiqué officiel explique qu’il aura fallu du temps pour préparer la version 2007.0 à cause d’un nombre anormale de vulnérabilité dans les paquets. “Secret Sauce” son petit nom, apporte une réécriture complète de l’installeur pour AMD64 et x86, le nouveau liveCD (et liveDVD) contient GNOME 2.16.2, KDE 3.5.5, Xfce 4.4, Mozilla Firefox 2.0.0.3, OpenOffice.org 2.1.0, et le kernel Linux 2.6.19.
Rails 1.2.2 et petite note sur Globalize
La Version 1.2 de rails est sortie il y a maintenant plusieurs semaines, voici la 1.2.2 après que la 1.2.1 ai suivi de quelques heures sa grande soeur, ces versions mineurs ne corriges que quelques petits problème, pas besoin de s’étendre dessus plus que ça.
Au sujet de Globalize plusieurs nouvelles têtes ont été intégrée ces derniers temps. Nous sommes en train de préparer une release pour la version 1.2 de rails, tout les testes passent mais il nous reste à faire quelques mises à jour dans la documentation. Je vous tient au courent mais ça ne devrais pas tarder.
Nous préparons également l’intégration de nouvelles fonctionnalités, Saimon doit ajouter son système alternatif de storage et il faudrait vraiment que je merge l’extension développé par Liquid Concept dans le trunk ce que je n’ai pas encore eu le temps de faire. J’espère pouvoir m’y mettre bientôt.
Rails 1.2, quoi de neuf ?
Avec l’arrivée de cette nouvelle version de Ruby on Rails nous avons droit à notre lot de nouveautés, je ne vais pas reproduire le changelog ici mais voici les innovations majeurs de cette mouture, pour le détail, direction le site de développement.
ActiveRecord
- Ajout de la possibilité de passer un Hash en paramètre à la méthode find pour l’option conditions. Chaque clef du Hash correspond à un attribut et ils sont joint par des AND.
- Ajout de la méthode find_or_initialize_by_X qui complète find_or_create_by_X en retournant un nouvelle objet si la recherche ne donne pas de résultat mais sans le sauver.
- Passé un record ou une liste de record à une conditions extrait directement les id.
- Autorise niq => true avec une association has_many :through.
- Il est maintenant possible d’ajouter un record à une association has_many :through avec les méthodes <<, push et concat en créant le record de jointure.
- Ajout du support de delete à l’association has_many :through.
- L’association has_one support le paramètre dependent avec les options destroy, delete, et nullify.
- Il est possible d’obtenir un lock exclusif sur un enregistrement en utilisant le paramètre lock des méthodes de recherche ou avec la méthode lock! d’un record.
ActionPack
- Il est maintenant possible d’accéder aux attributs avec RJS.
- Les formulaires fonctionnement comme des blocks (et non plus avec end_form_tag).
- Ajout des mois et années à la méthode distance_of_time_in_words.
- En cas d’erreur le fichier 500.html est rendu par défaut.
- Il est possible d’exclure certaine extensions du rendu avec layout.
- RESTful tient compte automatiquement de la valeur de params[:format] si il est spécifié.
- Il est possible d’enregistrer de nouveaux MIME types pour une extension.
- Ajout du filtrage de certains paramètres et attributs dans les logs avec filter_parameter_logging (password par exemple, ).
- Le système de routage a été réécrit.
- Dépréciation de certains méthodes, il faut maintenant utiliser les méthodes et non pas les variable de classe tel que @session ou @request.
ActiveSupport
- Il est possible de faire en sorte qu’une constante soit réinitialisé après chaque requête avec Module#unloadable.
- Avec Module#alias_attribute il est possible de créer des alias pour les attributs.
- Enumerable#sum calcule une somme depuis un Array.
- Array#to_s(:db) produit une liste séparé par des virgules.
- Il est maintenant possible d’utiliser Module#alias_method_chain au lieu de deux fois Module#alias_method.
- Division dûn Array avec split.
- Création d’un Hash avec from_xml.
Rails, version 1.1.2
Les versions 1.1.1 et 1.1.2 de Rails sont sorties rapidement afin de corriger quelques bug et améliorer la compatibilité des applications tournant sur 1.1.0.
La version 1.2.0 est lancé dans le trunk de subversion, une branche stable a été créé afin de pouvoir corriger d’éventuelle problèmes sur la version actuelle mais plus aucune nouvelle fonctionnalité ne sera ajouté.
Rails 1.1, quoi de neuf ?
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/--repeatsur 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_fixturesdeviensdb:fixtures:load. Les anciens nom sont toutefois encore utilisable etrake --tasksvous donnera la liste des nouveaux noms. A noté que db:fixtures:load FIXTURES=peoplepermet 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.