dynamisme du langage et patch

Posted by Fabien Jakimowicz Thu, 17 Apr 2008 22:32:00 GMT

 Développant un projet faisant un appel à un webservice pour un client, je dois passer des Arrays tel un formulaire html classique. J’ai donc naturellement utilisé les fonction réseau du langage Ruby, vu que le framework que j’utilise pour ce projet n’est autre que le Ruby on Rails. Je me retrouve donc avec une librairie maison pour gérer mes appels vers ce webservice, mais petite surprise dans l’encodage des fameux Arrays : les entrées du tableaux sont simplement concaténées les unes aux autres.

On est loin de ce que devrait faire un Array dans ce cas précis !

 Pour rappel, un Array nommé test avec 3 valeurs passé dans une requête POST devrait ressembler à ceci :

test[]=one&test[]=two&test[]=three

En fouillant quelque peu sur le net, on trouve en effet mention de ce bug dans la fonction censée encoder les paramètres dans un format de formulaire web. Bug ouvert il y a environ un an et toujours pas fermé bien que le patch ait été posté. On trouve même un exemple du comportement normal avec … PHP.

Ne souhaitant pas modifier les sources du langage installé sur mon système pour éviter de devoir reproduire la même chose sur les serveurs en production, j’ai décidé de tirer partie du côté dynamique du Ruby en redéfinissant la fonction dans ma petite librairie.

 

module Net::HTTPHeader
  def set_form_data(params, sep = '&')
    params_array = params.map do |k,v| 
      v.inject([]){|c, val| c << "#{urlencode(k.to_s)}=#{urlencode(val.to_s)}"}.join(sep)
    end
    self.body = params_array.join(sep)
    self.content_type = 'application/x-www-form-urlencoded'
  end
end

 

Ca fait vraiment plaisir de travailler avec un langage certes imparfait mais qui permet des corrections dynamiques sans hack immonde ou patch totalement horrible à maintenir en production.

Posted in | no comments | Tags , , | atom

Trackbacks

Use the following link to trackback from your own site:
http://fabien.jakimowicz.com/trackbacks?article_id=dynamisme-du-langage-et-patch&day=18&month=04&year=2008

Comments

Leave a response

Leave a comment