def run_hook(hook, *args)
      hook.is_a?(Symbol) ? send(hook, *args) : instance_exec(*args, &hook)
    end
def run_hook(hook, *args)
      hook.is_a?(Symbol) ? send(hook, *args) : instance_exec(*args, &hook)
    end
Internal: Run an individual hook. The "run_hook" method is the common
 interface by which an individual hook is run. If the given hook is a
 symbol, the method is invoked whether public or private. If the hook is a
 proc, the proc is evaluated in the context of the current instance.

 hook - A Symbol or Proc hook.
 args - Zero or more arguments to be passed as block arguments into the
        given block or as arguments into the method described by the given
        Symbol method name.

 Returns nothing.