Можно ли сделать эту работу, не включая модуль в конце класса и просто включив его в начало?
module VerboseJob
def self.included(job_class)
class << job_class
alias_method :original_perform, :perform
def perform(*args)
JobLogger.verbose { original_perform(*args) }
end
end
end
end
class HelloJob
include VerboseJob
def self.perform(arg1, arg2)
puts "Job invoked with #{arg1} and #{arg2}"
end
end
То, что я хочу, это для HelloJob.perform
для фактического вызова VerboseJob.perform
(который затем вызывает оригинальный метод внутри блока).Поскольку этот модуль включен в начало класса, это не работает, поскольку perform
еще не определено.Перемещение include
в конец работает, но есть ли способ более щадящий?Мне нравится держать все включенные модули в начале моих определений классов.
Я как бы ищу какой-то метод, который вызывается на Module
или Class
, когда он полностью загружен, вместо этогоо том, как это интерпретируется средой выполнения.