Class: ActiveSupport::ExecutionWrapper
- Includes:
- Callbacks
- Defined in:
- lib/active_support/execution_wrapper.rb
Defined Under Namespace
Classes: CompleteHook, RunHook
Constant Summary collapse
- Null =
:nodoc:
Object.new
Constants included from Callbacks
Callbacks::CALLBACK_FILTER_TYPES
Class Method Summary collapse
-
.active? ⇒ Boolean
:nodoc:.
-
.active_key ⇒ Object
:nodoc:.
-
.error_reporter ⇒ Object
:nodoc:.
-
.perform ⇒ Object
:nodoc:.
-
.register_hook(hook, outer: false) ⇒ Object
Register an object to be invoked during both the
runandcompletesteps. -
.run!(reset: false) ⇒ Object
Run this execution.
- .to_complete(*args, &block) ⇒ Object
- .to_run(*args, &block) ⇒ Object
-
.wrap(source: "application.active_support") ⇒ Object
Perform the work in the supplied block as an execution.
Instance Method Summary collapse
-
#complete ⇒ Object
:nodoc:.
-
#complete! ⇒ Object
Complete this in-flight execution.
-
#run ⇒ Object
:nodoc:.
-
#run! ⇒ Object
:nodoc:.
Methods included from Callbacks
Methods included from Concern
#append_features, #class_methods, extended, #included, #prepend_features, #prepended
Class Method Details
.active? ⇒ Boolean
:nodoc:
118 119 120 |
# File 'lib/active_support/execution_wrapper.rb', line 118 def self.active? # :nodoc: IsolatedExecutionState.key?(active_key) end |
.active_key ⇒ Object
:nodoc:
114 115 116 |
# File 'lib/active_support/execution_wrapper.rb', line 114 def self.active_key # :nodoc: @active_key ||= :"active_execution_wrapper_#{object_id}" end |
.error_reporter ⇒ Object
:nodoc:
110 111 112 |
# File 'lib/active_support/execution_wrapper.rb', line 110 def self.error_reporter # :nodoc: ActiveSupport.error_reporter end |
.perform ⇒ Object
:nodoc:
100 101 102 103 104 105 106 107 108 |
# File 'lib/active_support/execution_wrapper.rb', line 100 def self.perform # :nodoc: instance = new instance.run begin yield ensure instance.complete end end |
.register_hook(hook, outer: false) ⇒ Object
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.)
50 51 52 53 54 55 56 57 58 |
# File '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!(reset: false) ⇒ Object
Run this execution.
Returns an instance, whose complete! method must be invoked after the work has been performed.
Where possible, prefer wrap.
66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File '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 |
.to_complete(*args, &block) ⇒ Object
21 22 23 |
# File 'lib/active_support/execution_wrapper.rb', line 21 def self.to_complete(*args, &block) set_callback(:complete, *args, &block) end |
.to_run(*args, &block) ⇒ Object
17 18 19 |
# File '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") ⇒ Object
Perform the work in the supplied block as an execution.
86 87 88 89 90 91 92 93 94 95 96 97 98 |
# File '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 |
Instance Method Details
#complete ⇒ Object
:nodoc:
141 142 143 |
# File 'lib/active_support/execution_wrapper.rb', line 141 def complete # :nodoc: run_callbacks(:complete) end |
#complete! ⇒ Object
Complete this in-flight execution. This method must be called exactly once on the result of any call to run!.
Where possible, prefer wrap.
135 136 137 138 139 |
# File 'lib/active_support/execution_wrapper.rb', line 135 def complete! complete ensure IsolatedExecutionState.delete(self.class.active_key) end |
#run ⇒ Object
:nodoc:
127 128 129 |
# File 'lib/active_support/execution_wrapper.rb', line 127 def run # :nodoc: run_callbacks(:run) end |
#run! ⇒ Object
:nodoc:
122 123 124 125 |
# File 'lib/active_support/execution_wrapper.rb', line 122 def run! # :nodoc: IsolatedExecutionState[self.class.active_key] = self run end |