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