Methods

Included Modules

Attributes

[RW] active

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 49
    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 65
    def self.run!(reset: false)
      if reset
        lost_instance = active.delete(Thread.current)
        lost_instance.complete! unless lost_instance.nil?
      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 20
    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 16
    def self.to_run(*args, &block)
      set_callback(:run, *args, &block)
    end
🔎 See on GitHub

wrap()

Perform the work in the supplied block as an execution.

📝 Source code
# File activesupport/lib/active_support/execution_wrapper.rb, line 85
    def self.wrap
      return yield if active?

      instance = run!
      begin
        yield
      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 120
    def complete!
      run_callbacks(:complete)
    ensure
      self.class.active.delete Thread.current
    end
🔎 See on GitHub