Mes premières pensées sont quelque chose comme ceci:Comment exécuter du code avant et après une méthode dans une sous-classe?
class AbstractBuilder
attr_reader :time_taken
def build_with_timer
started_at = Time.now
build
@time_taken = Time.now - started_at
end
def build
raise 'Implement this method in a subclass'
end
end
class MyBuilder < AbstractBuilder
def build
sleep(5)
end
end
builder = MyBuilder.new.build_with_timer
puts builder.time_taken
Je pense qu'il ya une meilleure façon qui offre une meilleure flexibilité, par exemple idéalement, je voudrais appeler « construire » sur une instance de MyBuilder au lieu de 'build_with_timer' et ont toujours le temps d'exécution enregistré. J'ai envisagé d'utiliser alias_method depuis initialize ou même en utilisant un module mixin à la place de l'héritage de classe qui remplacerait la méthode de construction appelant super au milieu (je ne sais pas si cela fonctionnerait). Avant de descendre dans le trou du lapin, je pensais voir s'il y avait une pratique établie.
Pour clarifier je veux définir une méthode, d'un nom connu, dans une sous-classe qui est enveloppée de façon transparente (avant et après) avec le code défini dans la classe de base. J'ai besoin de moins de flexibilité/de surcharge que les filtres ActiveRecord. – Kris
https://github.com/PragTob/after_do – Kris