def unsubscribe(*args)
      @_event_handlers ||= Event.new_event_handlers

      case args.size
        when 1
          case args.first
            when Subscription
              # Delete specific event handler.
              subscription = args.first
              raise ArgumentError, "Incorrect publisher for #{Subscription}: #{subscription.publisher}" unless subscription.publisher == self
              unsubscribe subscription.event, subscription.handler
            when Proc, Method
              # Delete first events that use the handler.
              handler = args.first
              !!@_event_handlers.find {|_, handlers| handlers.delete handler }
            else
              raise TypeError, "handler must be a #{Subscription}, Block or Method: #{args.first}"
          end
        when 2
          event, handler = args
          raise TypeError, "event name must be a Symbol: #{event}" unless event.is_a? Symbol
          raise TypeError, "handler name must be a Proc/Method: #{handler}" unless handler.is_a? Proc or handler.is_a? Method
          !!@_event_handlers[event].delete(handler)
        else
          raise ArgumentError, "Requires 1..2 arguments, but received #{args.size} arguments"
      end
    end
def unsubscribe(*args)
      @_event_handlers ||= Event.new_event_handlers

      case args.size
        when 1
          case args.first
            when Subscription
              # Delete specific event handler.
              subscription = args.first
              raise ArgumentError, "Incorrect publisher for #{Subscription}: #{subscription.publisher}" unless subscription.publisher == self
              unsubscribe subscription.event, subscription.handler
            when Proc, Method
              # Delete first events that use the handler.
              handler = args.first
              !!@_event_handlers.find {|_, handlers| handlers.delete handler }
            else
              raise TypeError, "handler must be a #{Subscription}, Block or Method: #{args.first}"
          end
        when 2
          event, handler = args
          raise TypeError, "event name must be a Symbol: #{event}" unless event.is_a? Symbol
          raise TypeError, "handler name must be a Proc/Method: #{handler}" unless handler.is_a? Proc or handler.is_a? Method
          !!@_event_handlers[event].delete(handler)
        else
          raise ArgumentError, "Requires 1..2 arguments, but received #{args.size} arguments"
      end
    end
@overload unsubscribe(subscription)
   Unsubscribe from a #{Subscription}, as returned from {#subscribe}
   @param subscription [Subscription]
   @return [Boolean] true if the handler was able to be deleted.

 @overload unsubscribe(handler)
   Unsubscribe from first event this handler has been used to subscribe to..
   @param handler [Block, Method] Event handler used.
   @return [Boolean] true if the handler was able to be deleted.

 @overload unsubscribe(event, handler)
   Unsubscribe from specific handler on particular event.
   @param event [Symbol] Name of event originally subscribed to.
   @param handler [Block, Method] Event handler used.
   @return [Boolean] true if the handler was able to be deleted.