Je voudrais mettre du code dans le module qui génère une erreur si certaines méthodes ne sont pas définies. Ce module repose sur la définition externe de cette méthode, car l'implémentation de cette méthode est différente pour toutes les classes. Ce code aiderait les développeurs à savoir très tôt qu'ils ont oublié d'implémenter la méthode plutôt que d'essayer d'utiliser les fonctionnalités du module.Ruby: Augmenter l'erreur dans le module si la méthode de classe n'est pas trouvée
module MyModule
def self.included(klass)
raise "MyModule: please `def my_method` on #{klass}" unless klass.respond_to?(:my_method)
end
end
je peux facilement lever une erreur si une méthode ne se définit pas la définition donnée d'un module, cependant, puisque la plupart des modules sont inclus dans la partie supérieure d'un fichier, il est probable que ma méthode requise est définie dans la classe, mais pas avant que mon module soit inclus.
class MyClass
include MyModule
def self.my_method
# ...
end
end
Cela soulèverait encore une erreur :(
Est-il possible de soulever une erreur que si la méthode ne se définit pas vraiment dans la définition de classe? Presque besoin d'un rappel class.onload de toutes sortes. Si pas d'autres idées sur la façon d'atténuer les possibilités qu'un programmeur pourrait inclure notre module sans définir cette méthode nécessaire?
Je suis familier avec les classes propres, et oui j'essaye de faire quelque chose comme la vérification de méthode statique. Un de mes collègues a souligné que nous pourrions faire passer cette attente dans les tests pour les modèles implémentant MyModule. Nous pourrions avoir une macro acts_as_my_module que nous pouvons mixer avec tous les modèles/specs. Toujours pas se plaindre aussi fort, et nécessite un dévouement de programmeur supplémentaire, mais est le plus ruby-esque – Schneems
Si vous utilisez rspec, vous pouvez faire quelque chose comme ça http://relishapp.com/rspec/rspec-core/v/ 2-6/dir/example-groups/shared-examples – Schneems
Tout bien considéré, vous voulez probablement un outil qui s'exécute dans le cadre de votre déploiement et arrête le déploiement s'il y a un problème comme celui-ci. Il semble que vous le sachiez déjà, mais espérais une alternative :-) – Pat