class ActiveSupport::ExecutionWrapper
Attributes
active[RW]
Public Class Methods
register_hook(hook, outer: false)
click to toggle source
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.)
# File lib/active_support/execution_wrapper.rb, line 30 def self.register_hook(hook, outer: false) if outer run_args = [prepend: true] complete_args = [:after] else run_args = complete_args = [] end to_run(*run_args) do hook_state[hook] = hook.run end to_complete(*complete_args) do if hook_state.key?(hook) hook.complete hook_state[hook] end end end
run!()
click to toggle source
Run this execution.
Returns an instance, whose complete!
method
must be invoked after the work has been performed.
Where possible, prefer wrap
.
# File lib/active_support/execution_wrapper.rb, line 54 def self.run! if active? Null else new.tap do |instance| success = nil begin instance.run! success = true ensure instance.complete! unless success end end end end
to_complete(*args, &block)
click to toggle source
# File lib/active_support/execution_wrapper.rb, line 18 def self.to_complete(*args, &block) set_callback(:complete, *args, &block) end
to_run(*args, &block)
click to toggle source
# File lib/active_support/execution_wrapper.rb, line 14 def self.to_run(*args, &block) set_callback(:run, *args, &block) end
wrap() { || ... }
click to toggle source
Perform the work in the supplied block as an execution.
# File lib/active_support/execution_wrapper.rb, line 71 def self.wrap return yield if active? instance = run! begin yield ensure instance.complete! end end
Public Instance Methods
complete!()
click to toggle source
Complete this in-flight execution. This method must be
called exactly once on the result of any call to run!
.
Where possible, prefer wrap
.
# File lib/active_support/execution_wrapper.rb, line 106 def complete! run_callbacks(:complete) ensure self.class.active.delete Thread.current end
Private Instance Methods
hook_state()
click to toggle source
# File lib/active_support/execution_wrapper.rb, line 113 def hook_state @_hook_state ||= {} end