Arrière-plan:
J'ai un module qui déclare un certain nombre de méthodes d'instance
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
Et je tiens à appeler certains de ces méthodes au sein d'une classe. Comment vous le feriez normalement ce en ruby, c'est comme ceci:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
Problème
include UsefulThings
apporte à tous des méthodes d' UsefulThings
. Dans ce cas, je veux seulement format_text
et expressément ne pas vouloir get_file
et delete_file
.
Je vois plusieurs solutions possibles à cela:
- En quelque sorte appeler la méthode directement sur le module sans l'inclure n'importe où
- Je ne sais pas comment/si cela peut être fait. (D'où cette question)
- En quelque sorte comprennent
Usefulthings
et seulement d'amener quelques-uns de ses méthodes- Aussi, je ne sais pas comment/si cela peut être fait
- Créer une classe proxy, comprennent
UsefulThings
en, puis déléguéformat_text
de proxy instance- Ce serait le travail, mais proxy anonyme des classes est un hack. Beurk.
- Diviser le module en 2 ou plusieurs modules plus petits
- Ce serait également le travail, et est probablement la meilleure solution je pense, mais je préfère éviter, autant que je l'aimerais jusqu'à la fin avec la prolifération des dizaines et des dizaines de modules - gestion ce serait lourd
Pourquoi il y a beaucoup de fonctions sans rapport dans un module unique? Il est ApplicationHelper
à partir d'une application rails, notre équipe a de facto décidé que le dépotoir de ce qui n'est pas assez spécifique appartiennent partout ailleurs. Surtout utilitaire autonome des méthodes qui sont utilisés partout. Je pourrais le briser en deux assistants, mais il faudrait être de 30 d'entre eux, le tout avec la méthode 1 de chaque... cela semble improductif
Merci à l'avance!