Spec-Zone.ru › Ruby on Rails 8.1

класс ActiveSupport::ExecutionWrapper

Родительский класс:
Object
Подключённые модули:
ActiveSupport::Callbacks

Публичные методы класса

register_hook (hook, outer: false) Показать исходный код
# File activesupport/lib/active_support/execution_wrapper.rb, line 50
def self.register_hook(hook, outer: false)
  if outer
    to_run RunHook.new(hook), prepend: true
    to_complete :after, CompleteHook.new(hook)
  else
    to_run RunHook.new(hook)
    to_complete CompleteHook.new(hook)
  end
end

Зарегистрировать объект для вызова на этапах run и complete.

hook.complete будет передано значение, возвращённое hook.run, и оно будет вызвано, только если ранее был вызван run. (В основном это означает, что оно не будет вызвано, если в предшествующем блоке to_run возникнет исключение; в такой ситуации вызываются все обычные блоки to_complete.)

run! (reset: false) Показать исходный код
# File activesupport/lib/active_support/execution_wrapper.rb, line 66
def self.run!(reset: false)
  if reset
    lost_instance = IsolatedExecutionState.delete(active_key)
    lost_instance&.complete!
  else
    return Null if active?
  end

  new.tap do |instance|
    success = nil
    begin
      instance.run!
      success = true
    ensure
      instance.complete! unless success
    end
  end
end

Выполнить этот процесс.

Возвращает экземпляр, метод complete! которого должен быть вызван после выполнения работы.

По возможности используйте wrap.

to_complete (*args, &block) Показать исходный код
# File activesupport/lib/active_support/execution_wrapper.rb, line 21
def self.to_complete(*args, &block)
  set_callback(:complete, *args, &block)
end
to_run (*args, &block) Показать исходный код
# File activesupport/lib/active_support/execution_wrapper.rb, line 17
def self.to_run(*args, &block)
  set_callback(:run, *args, &block)
end
wrap (source: "application.active_support") { || ... } Показать исходный код
# File activesupport/lib/active_support/execution_wrapper.rb, line 86
def self.wrap(source: "application.active_support")
  return yield if active?

  instance = run!
  begin
    yield
  rescue Exception => error
    error_reporter&.report(error, handled: false, source: source)
    raise
  ensure
    instance.complete!
  end
end

Выполнить работу в предоставленном блоке как процесс.

Публичные методы экземпляра

complete! () Показать исходный код
# File activesupport/lib/active_support/execution_wrapper.rb, line 135
def complete!
  complete
ensure
  IsolatedExecutionState.delete(self.class.active_key)
end

Завершить выполняющийся процесс. Этот метод должен быть вызван ровно один раз для результата любого вызова run!.

По возможности используйте wrap.

© 2004–2021 David Heinemeier Hansson
Licensed under the MIT License.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API