Вот в чем дело: мне нужно расширить определенные экземпляры класса Box с помощью некоторых методов.Методы, которые мне нужно включить, живут внутри модулей, и я хочу, чтобы экземпляр Box мог включать модули динамически.Теперь я использую крюк с eval:
class Box
def after_initialize
if self.injected_module.present?
eval("class << self; include #{self.injected_module}; end")
end
end
end
Он работает довольно хорошо, но я действительно чувствую себя грязным, когда использую eval .Я ищу что-то вроде этого:
module_to_inject = self.injected_module
self.eigenclass.class_eval do
include module_to_inject
end
, но я не могу заставить собственный класс запускать class_eval без монтирования патчей, например:
class Box; def eigenclass; class << self; self; end end end
Есть ли для меня красивый (и надежный) способ сделать это?