Ils m'ont copiés ?
Quand on regarde le changelog de ruby 1.8.7_preview2, on peu lire ceci :
Mon Oct 15 21:57:07 2007 Akinori MUSHA <knu@iDaemons.org>
* NEWS: Mention ipaddr enhancements.
* lib/ipaddr.rb (in_addr, in6_addr, addr_mask): Make some minor
code optimization.
* lib/ipaddr.rb (<=>): Implement IPAddr#<=> and make IPAddr
comparable.
* lib/ipaddr.rb (succ): Implement IPAddr#succ. You can now create
a range between two IPAddr's, which (Range) object is
enumerable.
* lib/ipaddr.rb (to_range): A new method to create a Range object
for the (network) address.
* lib/ipaddr.rb (coerce_other): Support type coercion and make &,
|, == and include? accept a string or an integer instead of an
IPAddr object as the argument.
* lib/ipaddr.rb (initialize): Give better error messages.
* lib/ipaddr.rb: Improve documentation.
Ce que je voulais vous montrer là dedans, c'est l'ajout des méthodes <=>, succ et to_range à la classe ruby IPAddr. Cela permet de rendre IPAddr comparable et énumérable. Cela permet aussi d'avoir un objet Range entre deux objets IPAddr. C'est tout neuf et ça vient de sortir. Ces méthodes n'étaient pas là avant.
Mon problème (enfin c'est pas un problème, ou alors ça ne regarde que moi), c'est que dans mon exercice fétiche de démo de ruby, ip_detector.rb, je faisais implémenter aux stagiaires ces méthodes. C'était pratique parce que ça permettait de démontrer par l'exemple des conceptes présent dans ruby :
- l'extension de classe : on ajoute simplement des méthodes à une classe ruby quand on en a besoin et sans (trop) se poser de questions
- le duke typing : juste en implémentant <=> et succ. Un objet est énumérable s'il possède les méthodes <=> et succ. On applique cela à IPAddr, alors IPAdrr est énumérable.
- l'objet Range : grace la méthode to_range, on peut créer des ensembles d'IP. Utiliser les ensembles (fermés ou ouverts) est une notion qu'il faut voir en pratique pour bien assimiler.
Maintenant que cela est de base dans ruby, il va falloir que je trouve un autre exercice... :'(
Bon et puis il faut dire que Akinori MUSHA à bien implémenté ces méthodes puisqu'il prend bien en compte les familles d'adresses et qu'il retourne des clones des adresses en paramètre dans la méthode to_range. Ce que je ne faisais pas.





