class ActiveJob::Continuation::Step
Active Job Continuation Step
Представляет шаг в возобновляемом задании.
Когда шаг завершается, он записывается в состояние продолжения задания. Если выполнение задания прерывается, оно возобновляется после последнего завершённого шага.
У шагов также может быть необязательный курсор, с помощью которого можно отслеживать ход выполнения шага. Если выполнение задания прерывается во время шага, курсор сохраняется и передаётся при возобновлении задания.
Код шага отвечает за правильное использование курсора, чтобы продолжить выполнение с того места, где оно было прервано.
Атрибуты
Курсор шага.
Имя шага.
Открытые методы класса
# File activejob/lib/active_job/continuation/step.rb, line 25 def initialize(name, cursor, job:, resumed:) @name = name.to_sym @initial_cursor = cursor @cursor = cursor @resumed = resumed @job = job end
Открытые методы экземпляра
# File activejob/lib/active_job/continuation/step.rb, line 49
def advance!(from: nil)
from = cursor if from.nil?
begin
to = from.succ
rescue NoMethodError
raise UnadvanceableCursorError, "Cursor class '#{from.class}' does not implement 'succ'"
end
set! to
end Продвинуть курсор от текущего или указанного значения
Курсор будет продвинут вызовом метода succ для курсора. Если курсор не реализует succ, будет вызвана ошибка UnadvanceableCursorError.
# File activejob/lib/active_job/continuation/step.rb, line 67 def advanced? initial_cursor != cursor end
Был ли курсор продвинут во время выполнения этого задания?
# File activejob/lib/active_job/continuation/step.rb, line 35 def checkpoint! job.checkpoint! end
Проверить, нужно ли прервать задание, и в этом случае вызвать исключение Interrupt. Задание будет повторно поставлено в очередь.
# File activejob/lib/active_job/continuation/step.rb, line 75
def description
"at '#{name}', cursor '#{cursor.inspect}'"
end # File activejob/lib/active_job/continuation/step.rb, line 62 def resumed? @resumed end
Был ли этот шаг возобновлён после предыдущего выполнения задания?
# File activejob/lib/active_job/continuation/step.rb, line 40 def set!(cursor) @cursor = cursor checkpoint! end
Установить курсор и при необходимости прервать задание.
# File activejob/lib/active_job/continuation/step.rb, line 71 def to_a [ name.to_s, cursor ] end
© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.