Je comprends qu'il est possible de décorer des méthodes avec des crochets avant et après en rubis, mais est-il possible de le faire pour chaque ligne d'une méthode donnée? Par exemple, j'ai un test d'automatisation et je veux vérifier qu'après chaque étape il n'y a pas d'erreur affichée sur la page. L'erreur est montrée comme un div rouge et n'est pas visible par Ruby comme raise
ou n'importe quoi de pareil, donc je dois le vérifier manuellement (il y a plusieurs autres cas d'utilisation aussi).Est-il possible d'exécuter du code après chaque ligne dans Ruby?
Je comprends qu'il pourrait être possible d'utiliser set_trace_func
. Mais je pense que cela peut apporter plus de problèmes que d'avantages car cela fonctionne sur l'ensemble de l'arbre d'appel (et nécessite que je le filtre moi-même).
UPDATE (clarification):
Je suis intéressé à intercepter toutes les actions (ou appels) qui sont effectués au sein une méthode donnée. Cela signifie qu'un nombre indéterminé de classes est appelé, donc je ne peux pas intercepter un ensemble donné de classes/méthodes.
je crois comprendre que TracedObject (http://books.google.ru/books?id=jcUbTcr5XWwC&pg=PA286?) peut intercepter tous les appels à une méthode de classe donnée, mais que se passe-t-il si je veux intercepter tous les appels d'une méthode spécifique? La méthode en question peut appeler plus d'une classe, donc il me demande essentiellement d'envelopper toutes les classes appelées dans TracedObjects (ce qui semble un peu impossible en tant que solution générale)? –
Si vous êtes intéressé par une seule méthode, il vous suffit de filtrer pour cela dans 'method_missing'; mais vous avez déclaré que vous n'aimez pas l'idée du filtrage. Vous avez raison que ce serait une solution inélégante à difficile pour une méthode qui messages sur plusieurs classes. Vous devriez peut-être modifier la question pour ajouter cette deuxième exigence (sur plusieurs classes). – Pinochle
Je suis intéressé par les appels sortants d'une seule méthode, pas les appels entrants à elle. Ou je veux intercepter chaque ligne de la méthode originale, comme décrit dans la question originale. –