Qui n’a pas connu ce bref moment d’hésitation dans IRB ou la console de Rails… on viens d’inscrire le nom d’une classe ou encore d’un objet et on est plus certains du nom de la méthode. Plutôt que de faire TAB + TAB et avoir les 3597 méthodes disponibles pour l’objet et tous ses parents on peut interroger directement l’objet et obtenir les
méthodes disponibles… surtout celles qui sont spécifiques à cet objet. Ruby fournit plusieurs méthodes permettant de faire l’introspection sur les modules, classes et objets. Supposant qu’on veuille connaître les méthodes propres à la classe Time: (Time.methods – Time.superclass.methods).each {|m| puts m } Ce simple code nous retourne les 8 méthodes propres à la classe Time plutôt que les 81 méthodes de la classe Time et de tous ses parents. Maintenant, si vous avez besoins des méthodes d’une instance de la classe Time… supposons x = Time.now x = Time.now (x.methods – x.class.superclass.instance_methods).each {|m| puts m } Ce code retourne les 42 méthodes propres à une instance de Time… plutôt que les 82 méthodes de l’instance et ses parents. Plusieurs détails intéressant sont à remarquer; premièrement pour accéder aux parents (.superclass), on doit d’abord accéder à la classe (.class). On peut aussi interroger les méthodes d’une instance d’une classe sans avoir à l’instancier (.instance_methods). Bien sûr, si les méthodes générées dynamiquement, tel que les méthodes « find_by » du ActiveRecord, ne pourront pas retournées par cette technique mais c’est déjà un bon début lorsqu’on est dans le feu de l’action. à+
Jean-Marc