Я должен добавить методы к классу во время выполнения.
class ExtendableClass
end
Методы для добавления объявлены в независимых классах.
module ExtensionClassOne
def method_one
end
end
module ExtensionClassTwo
def method_two
end
end
Я ищу (элегантный) механизм для добавления всех методов класса расширения в ExtendableClass
.
Подход 1
Я думаю, что в явно включены классы расширения , например:
ExtendableClass.send( :include, ExtensionClassOne )
ExtendableClass.send( :include, ExtensionClassTwo )
но выглядит немного вынужденным вызывать этот закрытый метод каждый раз, когда я определяю новый класс расширения .
Подход 2
Итак, я искал автоматический способ include
этого метода для моего ExtendableClass
класса.
Я думаю, объявить конкретного предка для этого классов расширения :
class ExtensionClassOne < Extension
def method_one
end
end
и тогда мне понадобится механизм, чтобы узнать всех потомков класса ... что-то вроде опозита предков .
Как только у меня есть этот список, я легко могу ExtendableClass.include
весь список классов. Даже если мне придется вызывать приватный метод здесь.
Подход 3
Также наследуя от Extension
класса и обнаруживает во время объявления, когда этот класс используется в качестве предка . То, как ActiveSupport.included метод работает, как привязка события . Затем сделайте include
там.
Любое решение для реализации подход 2 или подход 3 ? Вы рекомендуете подход 1 ? Новые подходы?