Я пытаюсь сделать что-то, что мне кажется довольно простым, но я не могу найти способ сделать это СУХИМ.
Это код, который у меня был изначально:
мой первый рабочий
class WorkerOne < BaseWorker
def perform
# do stuff
rescue *exceptions_to_rescue_with_error => error
job_error(error, try_later: false)
rescue *exceptions_to_rescue_with_error_and_try_later => error
job_error(error, try_later: true)
rescue *exceptions_to_rescue_with_warning => message
job_warning(message, try_later: false)
end
end
мой второй рабочий
class WorkerTwo < BaseWorker
def perform
# do stuff
rescue *exceptions_to_rescue_with_error => error
job_error(error, try_later: false)
rescue *exceptions_to_rescue_with_error_and_try_later => error
job_error(error, try_later: true)
rescue *exceptions_to_rescue_with_warning => message
job_warning(message, try_later: false)
end
end
родительский класс
class BaseWorker
def exceptions_to_rescue_with_error
[
Exceptions::SomeOtherError,
ActiveRecord::RecordNotFound
]
end
def exceptions_to_rescue_with_error_and_try_later
[
Exceptions::SomeError1,
Exceptions::SomeError2,
]
end
def exceptions_to_rescue_with_warning
[
Exceptions::SomeWarning
]
end
end
Это метод, который я добавляю в BaseWorker, чтобы он работал:
def self.with_job_rescue_for_perfom
define_method(:perform) do |*args, &block|
self.perform(*args, &block)
rescue *exceptions_to_rescue_with_error => error
job_error(error, try_later: false)
rescue *exceptions_to_rescue_with_error_to_try_later => error
job_error(error, try_later: true)
rescue *exceptions_to_rescue_with_warning => message
job_warning(message, try_later: false)
end
end
end
Я застрял там и не вижу, куда мне заглядывать дальше. Кажется, что используемый метод здесь не работает для меня, так как я не использую модуль.
Есть идеи?