Method: GraphQL::Tracing::LegacyHooksTrace::RunHooks.call_hooks
- Defined in:
- lib/graphql/tracing/legacy_hooks_trace.rb
permalink .call_hooks(instrumenters, object, before_hook_name, after_hook_name) ⇒ Object
Call each before hook, and if they all succeed, yield. If they don't all succeed, call after_ for each one that succeeded.
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/graphql/tracing/legacy_hooks_trace.rb', line 37 def call_hooks(instrumenters, object, before_hook_name, after_hook_name) begin successful = [] instrumenters.each do |instrumenter| instrumenter.public_send(before_hook_name, object) successful << instrumenter end # if any before hooks raise an exception, quit calling before hooks, # but call the after hooks on anything that succeeded but also # raise the exception that came from the before hook. rescue GraphQL::ExecutionError => err object.context.errors << err rescue => e raise call_after_hooks(successful, object, after_hook_name, e) end begin yield # Call the user code ensure ex = call_after_hooks(successful, object, after_hook_name, nil) raise ex if ex end end |