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