class GraphqlRails::Controller::ActionHooksRunner
runs {before/around/after}_action controller hooks
Attributes
action_name[R]
controller[R]
Public Class Methods
new(action_name:, controller:)
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 7 def initialize(action_name:, controller:) @action_name = action_name @controller = controller end
Public Instance Methods
call(&block)
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 12 def call(&block) result = nil run_action_hooks(:before) run_around_action_hooks { result = controller.instance_exec(&block) } run_action_hooks(:after) result end
Private Instance Methods
all_around_hooks()
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 24 def all_around_hooks controller_configuration.action_hooks_for(:around, action_name) end
controller_configuration()
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 28 def controller_configuration controller.class.controller_configuration end
execute_hook(action_hook, &block)
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 43 def execute_hook(action_hook, &block) if action_hook.anonymous? controller.instance_exec(controller, *block, &action_hook.action_proc) else controller.send(action_hook.name, &block) end end
run_action_hooks(hook_type)
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 51 def run_action_hooks(hook_type) action_hooks = controller_configuration.action_hooks_for(hook_type, action_name) action_hooks.each { |hook| execute_hook(hook) } end
run_around_action_hooks(around_hooks = all_around_hooks) { || ... }
click to toggle source
# File lib/graphql_rails/controller/action_hooks_runner.rb, line 32 def run_around_action_hooks(around_hooks = all_around_hooks, &block) pending_around_hooks = around_hooks.clone action_hook = pending_around_hooks.shift if action_hook execute_hook(action_hook) { run_around_action_hooks(pending_around_hooks, &block) } else yield end end