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

Vivre avec Edge (ou quoi de neuf dans Rails Edge) #2 -amélioration des performances

traduction de Vivre avec Edge #2

La première news Vivre avec edge a parlé des changement de l'API depuis Rails 2.1, et durant cette news, les améliorations de performances seront indiqué comme promis.

En avant...

Les templates Erb plus rapide

Jeremy Kemper a rendu le processus d'Erb plus efficace, spécialement les méthodes d'helper concat et capture.

Le "spécial" Erb _erbout a été remplacé par une variable d'instance qui permet ceci:

  • Meilleur performance (mémoire) parce que bindings ne pas pas longtemps autour
  • Moins de d'évaluation qui est généralement couteux.
  • Il n'y a pas besoin de séparer la variable _erbout quand vous remplacer un nouveau buffer (de string)
  • Le buffer est généralement disponible via une méthode output_buffer écriture et lecture (alors vous pouvez les overrider si vous le souhaitez)

Changesets en relation: 933697a - 0bdb7d3 - 4d4c8e2

Les helpers JavaScript et les partials sont plus rapide.

L'initialisation des templates partial et des helpers Javascript ont été refactoré et optimisé pour une meilleure vite et efficacité grâce à Jeremy Kemper. Quelque optimisations de Jérémy ont été commité récement. Vérfiiez avec les commits de Rails (comme pour tout projet Open Source de qualité) - Vous apprendrez plein de chose.

Changesets en relation: partialsJavaScript helpers

Accélération de la méthode RecordIdentifier

Le RecordIdentifier est plus rapide avec la simple utilisation de memo-ization, réduisant ainsi l'utilisation des Inflections entre autre. Le RecordIdentifier est largement utilisé dans le cache des clé, des chemins des templates de partial, et dans la plus part des endroit où vous identifiez un model ActiveRecord sans le savoir avec ton id actuel.

Changesets en relation par Jeremy Kemper: c1a9820566d717

[...]
Published on Dim 29 juin 2008 12:42
0 commentaires

Vivre avec Edge (ou quoi de neuf dans Rails Edge) #1 - changement d'API et des tests de performances

Voici la nouvelle traduction de Vivre avec Edge. Par contre, cette fois ci, comme annoncé dans cette news, cette news est issu du blog officiel de rubyonrails et non plus du blog de Chu Yeow

Comme Gregg Pollack l'indique il y a une semaine, Je conserve une note hebdomadaire au sujet des changements de edge Rails. C'est la première fois que Living on the Edge(of Rails) est apparu officiellement sur le blog officiel de Ruby on Rails.

Living on the Edge est une note hebdomadaire que je mettais sur mon propre blog après plusieurs récupération par Gregg Pollack of Rails Envy depuis décembre 2007. J'avais l'habitude d'être une contributeur actif de rails et non pas trop une personne qui réfléchis. Gregg et Jason ont été génial de m'ajouter à leur podcast hebdomadaire.

Et maintenant je suis ici, alors je vais essayer de faire de mon mieux et n'hésitez pas à être très critique pour que ça soit utile pour vous. Quand je blogguais cela dans mon petit blog personnel, ce n'était pas vital d'avoir une audience large et significative (NdT: Au moins sur ce blog ça reste toujours le cas). Laissez vos suggestions et critique dans les commentaires. Ils seront grandement appréciés.

De toutes façon il y a eu énormément de nouveauté durant les deux semaines après la release de Rails 2.1, changement de l'API et amélioration des performances. Donc au lieu de faire une très gros post, j'ai décidé de le séparé en 2 posts pour les nouveautés et changement d'API et les améliorations de performances. Dans ce post, je parlerais des nouveautés et changement de l'API

Changements mineurs de l'API

Commençons avec les changements mineurs de l'API.

link_to peux désormais prendre un block

Le helper link_to peux désormais prendre en argument un block. Utile dans les cas où vous avez long texte d'hyperlien avec des variables.:

<% link_to(@profile) do %>

  <strong><%= @profile.name %></strong> -
  <span>Status: <%= @profile.status %></span>
<% end %>

Certaine personne trouve cela plus propre que:

<%= link_to "<strong>#{@profile.name}</strong> -- <span>Status: #{@profile.status}</span>", @profile %>

Ce changement a été apporté par Sam Stephenson (du fameux Prototype) et DHH.

Changeset details

ActiveRecord::Base#merge_conditions fait maintenant partie de l'API public

Jeremy Kemper a rendu public la méthode ActiveRecord::Base#merge_conditions.

C'est vraiment très pratique si vous avez des conditions issues de multiples sources ou qui se combine pour différentes raisons.

Post.merge_conditions(
  {:title => 'Lucky ☆ Star'},
  ['rating IN (?)', 1..5]
)
=> "(`posts`.`title` = 'Lucky ☆ Star') AND (rating IN (1,2,3,4,5))"

Notez bien que cela merge uniquement avec un boolean SQL AND (pas ORs).

Changeset details

Les associations peuvent prendre une option :validate

les associations peuvent désormais accepter une option c:validate comme ceci:

class Anime < ActiveRecord::Base
  has_many :characters, :validate => true
end

Cela indique à ActiveRecord de valider l'association characters quand vous enregistrer le model Anime - exactement comment fonctionnait :validates_associated. La valeur par défaut est false, qui est le comportement actuel dans Rails 2.1 et plus récent, donc pas d'agitation à avoir. Cela fonctionne pour toutes les autre associations comme (has_one, belongs_to, has_and_belongs_to_many).

Merci à Jan De Poorter et Pratik Naik pour cela, qui permette aussi de résoudre un mauvais bug.

Changeset detailsTicket

ActiveSupport::StringInquirer et avantage de la méthode Rails.env.development?

David Heinemeier Hansson (généralement abbrégé par DHH – désolé!) a récemment ajouté un sous-classe à String, ActiveSupport::StringInquirer qui permet de faire ceci:

s = ActiveSupport::StringInquirer.new('awesome')
=> "awesome" 
s.awesome?
=> true
s.sucks?
=>; false

Une utilisation immédiate de cette classe est quand vous voulez vérifier l'environnement de votre application en fonctionnement : Rails.env est enrobé en StringInquirer alors vous pouvez utiliser des méthodes comme Rails.env.development? et Rails.env.production?.

Changeset details

Core extensions: Object#present? et Enumerable#many?

DHH a aussi ajouté une extensions au core. C'est quelque peu trivial, mais peu rendre le code plus lisible. Le première est Object#present?, qui est essentiellement !Object#blank?

[].present?
=> false
[1, 2].present?
=> true
"".present?
=> false
"i'm here".present?
=> true

Une extension Enumerable#many? a aussi été ajouté qui réalise simplement un test conditionnel sur enumerable.size > 1:

[].many?
=> false
[:just_me].many?
=> false
[:just_me, 'my_friend'].many?
=> true

Object#present? changesetEnumerable#many? changeset

Syntaxe de block déclaratif pour l'écriture de tests

DHH s'est inspiré de Jay Fields quand il commita cette nouvelle syntaxe. Vous pouvez maintenant écrire vos tests (Test::Unit) avec un style de block déclaratif comme :

test "an anime should be invalid if any of its characters are invalid" do
  # Your usual test code here.
end

J'utilise rarement Test::Unit (sauf pour soumettre des patchs à Rails) et préfère RSpec – Ce style déclaratif pour écrire des tests est vraiment plus lisible.

Tous les tests générés par Rails utilisent désormais cette syntaxe.

Changeset details

Performance tests

Jeremy Kemper a fait un travail en profondeur pour optimiser et améliorer les performances de Rails, alors c'est sans surprise que cela a été introduit comme nouveau type de test d'intégration. Les tests de performances.

Vous pouvez utiliser le générateur de test de performance (ajouté par Pratik dans 23232a) pour générer des tests de performances.

script/generate performance_test LoginStories

Le lancement du test de performance nécessite ruby-prof >= 0.6.1, qui n'est pas encore sortie. Mais vous pouvez récupérer sa version en développement à partir des sources et en installant vous même le gem (Je vous conseille de récupérer le ruby-prof que Jeremy a forké). Il est intéressant de remarquer qu'avec la sortie de ruby-prof 0.6.1, ruby-prof supportera le profiling des tests écrits avec Test::Unit

Attention - Si vous faites un petit code de test (requêtes sur plusieurs actions, quelque soit le cas d'utilisateur que vous voulez testez en performance) et lancez le test. Vous aurez la sortie suivante (si vous avez dirigé la sortie habituel de ruby-prof vers le répertoire test/tmp/performance de votre application Rails):

> ruby performance/login_stories_test.rb 
Loaded suite performance/login_stories_test
Started
LoginStoriesTest#test_homepage (32 ms warmup)
        process_time: 11 ms
              memory: unsupported
             objects: unsupported
.
Finished in 0.870842 seconds.

Les résultats memory et objects ne sont pas supporté, parce que je n'avais pas patché mon interpréteur Ruby au support du proflling de mémoire. Vous aurez besoin de patcher certain interpréteur ruby pour activer le profiling de la mémoire et de GC. Je souhaiterais vous en dire plus à ce sujet, mais je suis en terrain inconnu. Il y a plus de détail ici (en) sur la méthode à suivre pour patcher Ruby pour le profilling de la mémoire. Je laisse les personnes plus qualifiée sur ce sujet expliquer tout ça.

Changeset details

Outro

C'est tout pour le moment concernant les nouvelles fonctionnalités et changement dans Rails depuis Rails 2.1 - Les améliorations de performances arriveront dans un prochain post et j'ai laissé aussi intentionnellement de coté le support de Rack qui n'est que partiellement mergé dans Edge.

Si il y a des erreurs ou que vous avez des suggestions sur comment faire un meilleur post, s'il vous plait indiquez le en commentaire. Toute information sur le patch de l'interpréteur Ruby pour supporter le profiling de la mémoire et aussi le bienvenue. Si j'ai laissé de coté des éléments qui ne vous semblez pas le nécessiter, laisser moi un commentaire.

[...]
Published on Ven 27 juin 2008 05:20
0 commentaires

Vivre avec Rails Edge #22

Traduction de la news #22

Aucun changement hallucinant dans Rails cette semaine avant la RailsConf - Comme Gregg le mentionnait la semaine dernière dans le Rails Envy podcast, ce sont les jours pré-2.1 (Rails 2.1 sera probablement sorti au RailsConf), ce qui sera une façon simple de voir pourquoi. Tous les tests de rails passe désormais sur Ruby 1.9 après un long bug sur #module_eval résolu dans le trunk de Ruby 1.9 (voir ce thread pour plus de détails).

Je serais (pour la première fois) au RailsConf 2008 à Portland, Oregon, ce jeudi prochain - Si quelqu'un souhaite me voir et me reconnaitre avec ma photo de Facebook, s'il vous plait venez me dire salut.

Le rapport de cette semaine couvre les changement du 19 Mai 2008 au 25 Mai 2008 (le jour correspondant à l'enregistrement du Rails Envy podcast).

Les méthodes first et last fonctionnent désormais avec les associations et named_scope

Vous vous souvenez comment le merge du gem has_finder à l'intérieur de rails a permis de faire des choses comme Post.first et Post.last?

Maintenant vous pouvez allez dans l'étape suivant et utiliser les mêmes méthode dans vos association ActiveRecord. Par exemple:

post = Post.find(1)
first_comment = post.comments.first

Si vous avez récement utilisé named_scope, vous pouvez désormais faire ceci:

post.comments.recent.last

Cette belle petite fonctionnalitée a été gentiement apporté par Ryan Bates (oui, le Ryan Bates du fameux Railscasts).

Révision concernant cette fonctionnalités: http://github.com/rails/rails/commit/73c59638549686fccc749ffd3ac53cb533c5fd61

Cache stores a désormais une méthode exist? et ajouté dans le controllers un fragment_exist?

L'enregistreur de cache dans Rails (Memcache, file stores, etc.) peux désormais avoir une méthode exist? qui vérifie si une valeur de cache existe pour la clé de cache. Cela permet aux controllers Rails de disposer d'une méthode fragment_exist? qui permet de vérifier l'existence d'un fragment de cache:

fragment_exist?('example.com/foo/bar')

Cette petite amélioration a été gentiement apporté par José Valim.

Révision concernant cette fonctionnalités: http://github.com/rails/rails/commit/99860b72aebe0348f41e82d4710343498d89a84b#diff-2

Créer un enregistrement d'une association avec un block en argument

Vous pouvez désormez créer des enregistrement pour les associations comment ceci:

post.coments.create!(:title => 'Techcrunch') do |c|
  c.body = "Rails can't scale"
  end

Ceci est ajouté au changement de ActiveRecord::Base.create indiqué précédement.

Ce patch a été réalisé par (encore une fois) Ryan Bates.

Révision concernant cette fonctionnalités: http://github.com/rails/rails/commit/6cba97d2a449faf21aec9fe9d4434067e414226f

Comme toujours, vous pouvez laissez toutes suggestions pour améliorer cette série de Vivre avec Rails.

[...]
Published on Lun 26 mai 2008 20:59
0 commentaires

Vivre avec Rails Edge #21

Traduction de la news #21

C'est une autre semaine au ralenti (seulement 2 changements à noter selon moi) après la sortie de la première Release candidate (RC1) de Rails 2.1. Suivez ce lien pour les instructions d'installation - Mais si vous lisez ce blog n'ayez pas peur (parce que vous savez « vivre avec edge »). Vous pouvez ainsi reporter tous les bugs que vous rencontré lors de la migration vers 2.1 et edge sur le bug tracker de rails - il s'agit d'une RC donc tous les rapports de bugs sont les bienvenue et seront utiles!

Le rapport de cette semaine couvre les changements du 12 Mai 2008 au 18 Mai 2008 (jour correspondant à l'enregistrement de Rails Envy podcast).

caches_action peux être conditionels

caches_action peux désormais prendre une option :if (exactement comme caches_page le fait). Par exemple:

caches_action :index, :if => Proc.new { |c| !c.request.format.json? }

Cette petite amélioration est gentiement apporté par José Valim.

Révision concernant cette fonctionnalitée: http://github.com/rails/rails/commit/7708650f73ddb4db300ea2059c60c1d907a4384e

Bugfix: :select option est désormais parcouru dans les finders d'ActiveRecord en s'assurant que les tables nécessaires sont inclus dans le SQL généré

Post.find(:all, :include => :author, :select => 'posts.*, authors.id as "author_id"', :limit => 2)

Cela générerais la requête SQL suivante:

SELECT posts.*, authors.id as "author_id" FROM "posts" LIMIT 2

Constaté que la table authors n'est pas jointe. Cette erreur est désormais résolu.

Merci à John Devine pour ce bugfix.

Révision concernant cette fonctionnalitée: http://github.com/rails/rails/commit/b28b54cab090bed8f099ef375b419a8f92390dd4

Comme toujours, vous pouvez laissez toutes suggestions pour améliorer cette série de Vivre avec Rails.

[...]
Published on Mer 21 mai 2008 19:00
0 commentaires

Vivre avec Rails Edge #20

Traduction de la news #20

Le rapport de cette semaine couvre les changements du 5 Mai 2008 au 11 Mai 2008 (jour correspondant à l'enregistrement de Rails Envy podcast).

script/dbconsole

Un script script/dbconsole a été ajouté et permet de se connecter à votre base de donnée en utilisant sa console.

Si vous avez par exemple besoin de vous connecter à votre base de donnée MySQL de production (pour mieux comprendre ce qu'il s'y passe!), vous pouvez lancer RAILS_ENV=production script/dbconsole et vous serez loggé à votre base de donnée en utilisant le client en ligne de commande de MySQL. Cela fonctionne aussi avec les bases de donnée PostgreSQL et SQLite.

Pour utiliser ce script dans votre application Rails, n'oubliez pas de lancer rake rails:update:scripts après la mise à jour de votre Rails edge.

Cette jolie petite fonctionnalitée est dû à Steve Purcell, qui avait à l'origine un plugin de console de base de donnée.

Révision concernant cette fonctionnalitée: http://github.com/rails/rails/commit/4a07103687084496b773e18a03b1f2f5e686f7ad

flash.now est désormais accessible dans les tests

C'est quelque chose que beaucoup de dévelopeurs Rails,moi y compris avaient trouvés en écrivant leur test, concernant les messages flash qui n'étaient pas initialisé avec flash.now. Principalement, vous ne pouviez pas tester le contenu de vos flash.now parce qu'ils étaient toujours vide avant que vos tests les atteignent.

# Dans votre controller:
flash.now[:notice] = 'You gotta be kidding me!'

# Dans votre test:
assert_equal 'You gotta be kidding me!', flash.now[:notice]
# FAILS parce que flash.now[:notice] est nil

Andreas Neuhaus a cherché comment cela fonctionne et à défini comment faire un test de flash.now qui fonctionne sans utiliser d'assert_select.

Révision concernant cette fonctionnalitée: http://github.com/rails/rails/commit/74eed6290e63111d1aad2b181692a84f4f040aea

Il n'y a pas grand chose à noté pour cette semaine mais si vous souhaitez connaitre tous les détails, vous souhaiterez probablement parcourir le log des commits Rails. Comme toujours, vous pouvez laissez toutes suggestions pour améliorer cette série de Vivre avec Rails.

[...]
Published on Mar 13 mai 2008 11:59
0 commentaires

Vivre avec Rails Edge #19

Traduction de la news #19

Le rapport de cette semaine couvre les changements du 29 Avril 2008 au 4 Mai 2008 (jour correspondant à l'enregistrement de Rails Envy podcast).

change_table pour les migrations d'ActiveRecord

Merci à Jeff Dean, qui a aussi blogué au sujet de la nouvelle fonctionnalité change_table des migrations d'ActiveRecord. Vous pouvez donc maintenant changer une table avec un block comme ceci :

change_table :videos do |t|
  t.add_timestamps
  t.add_belongs_to :goat
  t.add_string :name, :email, :limit =&gt; 20
  t.remove_column :name, :email # prend de multiples arguments
  t.rename :new_name
  t.string :new_string_column # execute avec le changement de nom de la table
end

Parmis les principaux points à noter :

  • add_XXX permettant d'ajouter une nouvelle colonne, exemple : add_string qui ajoutera un nouveau champs string.
  • Bien-sûr, add_timestamps permet d'ajouter les champs datetime magics created_at et updated_at
  • remove_column peux dorénavant prendre plusieurs arguments.
  • rename qui renommera la table.

Très belle amélioration DRY proposée par Jeff Dean une fois encore.

Révision concernant cette fonctionnalité : http://github.com/rails/rails/commit/96980bd561d79824b6cb6efbcbecdcbf8785d452

ActiveRecord::Base.create prend un block comme ActiveRecord::Base.new

Youpie, maintenant vous pouvez aussi créer (ActiveRecord::Base.create) un objet ActiveRecord avec un block en argument exactement comme vous pouviez le faire avec ActiveRecord::Base.new:

@person = Person.create(params[:person]) do |p|
  p.name = 'Konata Izumi'
  p.age = 17
end

Merci a Adam Meehan pour ce patch.

Révision concernant cette fonctionnalité : http://github.com/rails/rails/commit/dd120ede53eaf71dee76894998a81626b7a689fc

Bugfix: change_column doit permettre d'utiliser :null => true sur les champs qui ne l'étaient pas précédement.

Vous pouvez désormais utiliser change_column dans vos migrations pour modifier une colonne en nullable si elle était précédement NOT NULL.

Ce bugfix est gentiment offert par Nate Wiger.

Révision concernant cette fonctionnalité : http://github.com/rails/rails/commit/10ef65a3b054270ed3d458ec8eb7c2b9a3e638f7

Comme toujours, vous pouvez laissez toutes suggestions pour améliorer cette série de Vive avec Rails.

Enfin merci à Chu Yeow de m'encourager dans la traduction de ses magnifiques news

[...]

Published on Lun 05 mai 2008 11:21
0 commentaires

Vivre avec Rails Edge #18

Traduction de la news #18

Le rapport de cette semaine couvre les changement du 21 Avril 2008 au 27 Avril 2008 (Jour correspondant à l'enregistrement de Rails Envy podcast).

Très peu de chose interressant dans le rapport de cette semaine. Il y a eu principalement un paquet de résolutions de bug et des commits pour la compatibilité avec Ruby 1.8.7.

Introduction d'ActiveResource::Base.timeout et récupération de Timeout::Error dans ActionResource::Connection

I y a 2 changements qui ont été expliqué par Chu Yeow la semaine dernière et ne seront donc pas détaillé. Lisez donc l'article ActiveResource timeouts and why it matters (en)

Le type entier inteligent pour l'adaptater MySQL dans les migrations

L'adaptater MySQL dans Rails fait correspondre la colonne de type integer dans vos migrations aux type smalling, int ou biging dépendant de l'option :limit.

Cela signifie qu'une migration comme ceci:

def self.up
  create_table :searches do |t|
    t.integer :foo, :limit => 2
  end
end

Créera la colonne foo comme un type smallint(2) dans votre base de donnée MySQL (au lieu de int(2) précédement). (Plus d'information sur les types numériques MySQL

Ce path a été réalisé par DHH.

Révision concernant cette fonctionnalité: http://github.com/rails/rails/commit/a37546517dad9f6d9a7de6e1dba4d960909d71e8

Comme toujours, vous pouvez laissez tout suggestion pour améliorer cette série de Vive avec Rails.

[...]
Published on Mar 29 avr 2008 17:25
1 comment

Vivre avec Rails Edge #17

Depuis le début, je suis les news de Chu Yeow concernant les nouveautés intégrés à Rails dans sa version de développement. J'ai décidé d'essayer de vous les traduire régulièrement ici.

Traduction de la news #17

Peu de chose se sont passé cette semaine sur Edge Rails. Il semblerait que nous aillons un nouveau membre dans le Rails core, Joshua Peek. Le nouveau bug tracking de Rails sur Lighthouse est pret à utiliser, donc vous pouvez y soumettre vos patchs et rapport de bug dessus.

Le rapport de cette semaine couvre les changements entre le 14 Avril 2008 et le 20 Avril 2008 (Jour correspondant à l'enregistrement de Rails Envy podcast).

caches_page conditionel

The caches_pages peuvent prendre une option :if pour indiquer quand une pave peux être vraiment caché via une Proc. Vous pouvez maintenant faire ceci par exemple:

caches_page :index, :if => Proc.new { |c| !c.request.format.json? }

Cela met votre index en cache uniquement si le format de la requête n'est pas du JSON.

Cette fonctionnalité a été ajouté par Paul Horsfall.

Révision concernant cette fonctionnalité: http://github.com/rails/rails/commit/14a40804a29a57ad05ca6bffbe1e5334089593a9

Nouvelle ActionView::TestCase pour tester les helpers des vues

Rappelez vous comment vous pouvez actuellement utiliser les classes TestCase spécialisé pour tester les classes Controllers et ActionMailer (en)? Désormai s vous pourrez faire la même chose pour vos helpers de vues Rails avec la nouvelle classe ActionView::TestCase.

Voici un petit exemple:

module PeopleHelper
  def title(text)
    content_tag(:h1, text)
  end
                  
  def homepage_path
    people_path
  end
end
                                               
class PeopleHelperTest > ActionView::TestCase
def setup                                       
  ActionController::Routing::Routes.draw do |map|                        
    map.people 'people', :controller => 'people', :action => 'index'
    map.connect ':controller/:action/:id'
  end
end
              
def test_title                         
  assert_equal "<h1>Ruby on Rails</h1>", title("Ruby on Rails")
end

def test_homepage_path
  assert_equal "/people", homepage_path
end

Remercions Josh Peek pour cette jolie petite amélioration..

mem_cache_store de ActiveSupport::Cache accepte des options

Même si Memcache-client a été ajouté récement à ActiveSupport, on ne pouvait pas spécifié toutes les options de configuration derrière l'ip du serveur memcache. Maintenant vous pouvez passer beaucoup plus d'options comme ceci:

config.action_controller.fragment_cache_store = :mem_cache_store, 'localhost', { :compression => true, :debug => true, :namespace => 'foo' }

Ce patch est de Jonathan Weiss.

Révision concernant cette fonctionnalité: http://github.com/rails/rails/commit/9e1d506a8cfedef2fdd605e4cbf4bf53651ad214

[...]
Published on Jeu 24 avr 2008 19:47
1 comment

Migration basée sur l'heure utc et plus incremental

Depuis la revision r9122, les migrations de Ruby on rails ne sont plus incrémentale comme précédemment. En effet, elles sont désormais basé sur le temps UTC. Cette évolution a comme principale intérêt d'éviter les problèmes de conflits entre différentes branches de développement grâce à un prefix unique.

Désormais lors de la création d'un fichier de migration vous aurez ainsi ceci :

$ ./script/generate migration create_user
      create  db/migrate/20080422122512_create_user.rb

Pour compléter cette évolution, il y a eu l'ajout de 2 nouvelles tâches rake. rake db:migrate:up et rake db:migrate:down. Il faut adjoindre à ces tâche la la variable VERSION étant le numero de la VERSION a ajouter(up) ou enlever(down). Les versions peuvent ainsi être ajoutées ou supprimées indépendamments.

On pouvait avoir cette fonctionnalité dans la version 2.0 de rails avec le plugin enhanced migrations plugin

[...]
Published on Mer 23 avr 2008 21:36
2 commentaires

RSS Follow me on Twitter