Смешивание методов в собственном классе текущего класса - PullRequest
0 голосов
/ 06 августа 2011

Я реализую полудублированный конвейер 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?

1 Ответ

1 голос
/ 06 августа 2011

Не уверен, что я вас хорошо понимаю (больше кода, пожалуйста), но вы не можете сделать что-то вроде этого:

module M
  def M.included(c)
    class << c.class
      def foo
        "foo"
      end
    end
  end
end
...