def _hook_after_method(method, hook, opts = {})
      return false if method == hook
      _add_hooked_method(:after, hook, method)
      original = instance_method(method)
      @_defining_hook = true
      define_method(method) do |*args, &block|
        rtr = original.bind(self).call(*args, &block)
        if opts[:send_args]
          (hook.is_a?(Proc) ? hook : method(hook)).call(*args)
        elsif opts[:send_return] || opts[:send_value]
          result = (hook.is_a?(Proc) ? hook : method(hook)).call(rtr)
          rtr = result if opts[:modify_value] || opts[:modify_return]
        elsif opts[:send_return_ary] || opts[:send_value_ary]
          result = (hook.is_a?(Proc) ? hook : method(hook)).call(*rtr)
          rtr = result if opts[:modify_value] || opts[:modify_return]
        elsif opts[:send_all]
          result = (hook.is_a?(Proc) ? hook : method(hook)).call(args: args, value: rtr, method: method)
        else
          (hook.is_a?(Proc) ? hook : method(hook)).call
        end
        rtr
      end
      @_defining_hook = false
      true
    end
def _hook_after_method(method, hook, opts = {})
      return false if method == hook
      _add_hooked_method(:after, hook, method)
      original = instance_method(method)
      @_defining_hook = true
      define_method(method) do |*args, &block|
        rtr = original.bind(self).call(*args, &block)
        if opts[:send_args]
          (hook.is_a?(Proc) ? hook : method(hook)).call(*args)
        elsif opts[:send_return] || opts[:send_value]
          result = (hook.is_a?(Proc) ? hook : method(hook)).call(rtr)
          rtr = result if opts[:modify_value] || opts[:modify_return]
        elsif opts[:send_return_ary] || opts[:send_value_ary]
          result = (hook.is_a?(Proc) ? hook : method(hook)).call(*rtr)
          rtr = result if opts[:modify_value] || opts[:modify_return]
        elsif opts[:send_all]
          result = (hook.is_a?(Proc) ? hook : method(hook)).call(args: args, value: rtr, method: method)
        else
          (hook.is_a?(Proc) ? hook : method(hook)).call
        end
        rtr
      end
      @_defining_hook = false
      true
    end
Current opts:
 send_args - Sends the arguments of the method to the after method.
 send_value - Sends the return value of the method to the hook method.
 send_value_ary - Sends the return value of the method to the hook method
 =>                with the splat operator.
 modify_value - Opts must also include one of the two above. Passes the returned
 =>              value of the method to the hook and returns the hooks value
 =>              rather than the original methods value.
 send_all     - Sends a hash containing the args, method and value (return).