Я реализую полудублированный конвейер Rails путем рефакторинга существующего класса Ruby, скажем, A, который расширяет ActiveRecord, чтобы получить модуль, скажем, M, с общей функциональностью, а затем смешать его в два похожих класса AR, теперь мелкие обертки.
Принимая мясо A и измельчая его в M, методы экземпляра A просто становятся методами в M, а методы класса A переходят в подмодуль ClassMethods в M, чтобы смешаться обратно с A на уровне класса с self. включенный крючок М и удлинение, через хорошо известную идиому.
Однако A - это не просто какой-либо класс - мы используем некоторые из его методов класса из DelayedJob, который не понимает методы класса естественным образом; поэтому мы переместили некоторые оригинальные методы класса A в собственный класс A, определив их как
class A
...
def old_plain_vanilla_class_method
...
end
class << self
def new_eigenclassed_class_method
...
end
...
end
...
end
Вопрос теперь в том, как мы можем представить это в M, чтобы он снова смешался с собственным классом A?