Справочная информация:
У меня есть модуль, который объявляет несколько методов экземпляра
module UsefulThings
def get_file; ...
def delete_file; ...
def format_text(x); ...
end
И я хочу вызвать некоторые из этих методов из класса. Как обычно вы делаете это в рубине:
class UsefulWorker
include UsefulThings
def do_work
format_text("abc")
...
end
end
Проблема
include UsefulThings
содержит все методы из UsefulThings
. В этом случае я хочу только format_text
и явно не хочу get_file
и delete_file
.
Я вижу несколько возможных решений:
- Как-то вызывать метод непосредственно на модуле, не включая его в любом месте
- Я не знаю, как это сделать. (Отсюда этот вопрос)
- Как-то включить
UsefulThings
и использовать только некоторые из них- Я также не знаю, как это сделать/если это можно сделать
- Создайте прокси-класс, включите
UsefulThings
в него, затем делегируйтеformat_text
этому экземпляру прокси-сервера- Это сработает, но анонимные прокси-классы - это взломать. Тьфу.
- Разделить модуль на 2 или более меньших модуля
- Это также сработает, и, вероятно, это лучшее решение, о котором я могу думать, но я бы предпочел избежать его, так как я бы получил множество десятков и десятков модулей - управление этим было бы обременительным
Почему в одном модуле существует множество несвязанных функций? Это ApplicationHelper
из приложения rails, которое наша команда де-факто решила как свалку для чего-то, что недостаточно для того, чтобы принадлежать где-либо еще. Чаще всего используются автономные утилиты, которые используются повсеместно. Я мог бы разбить его на отдельных помощников, но их было бы 30, каждый из которых по 1 методу каждый... это кажется непродуктивным.