Methods

Included Modules

Class Public methods

register_hook(hook, outer: false)

Register an object to be invoked during both the run and complete steps.

hook.complete will be passed the value returned from hook.run, and will only be invoked if run has previously been called. (Mostly, this means it won’t be invoked if an exception occurs in a preceding to_run block; all ordinary to_complete blocks are invoked in that situation.)

πŸ“ Source code
# 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
πŸ”Ž See on GitHub

run!(reset: false)

Run this execution.

Returns an instance, whose complete! method must be invoked after the work has been performed.

Where possible, prefer wrap.

πŸ“ Source code
# 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
πŸ”Ž See on GitHub

to_complete(*args, &block)

πŸ“ Source code
# File activesupport/lib/active_support/execution_wrapper.rb, line 21
    def self.to_complete(*args, &block)
      set_callback(:complete, *args, &block)
    end
πŸ”Ž See on GitHub

to_run(*args, &block)

πŸ“ Source code
# File activesupport/lib/active_support/execution_wrapper.rb, line 17
    def self.to_run(*args, &block)
      set_callback(:run, *args, &block)
    end
πŸ”Ž See on GitHub

wrap(source: "application.active_support")

Perform the work in the supplied block as an execution.

πŸ“ Source code
# 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 => error
        error_reporter&.report(error, handled: false, source: source)
        raise
      ensure
        instance.complete!
      end
    end
πŸ”Ž See on GitHub

Instance Public methods

complete!()

Complete this in-flight execution. This method must be called exactly once on the result of any call to run!.

Where possible, prefer wrap.

πŸ“ Source code
# File activesupport/lib/active_support/execution_wrapper.rb, line 135
    def complete!
      complete
    ensure
      IsolatedExecutionState.delete(self.class.active_key)
    end
πŸ”Ž See on GitHub