public function dispatch()
    {
        $arguments = $this->rawArguments;
        $this->scriptPath = array_shift($arguments);
        $this->command = array_shift($arguments);
        $this->arguments = $this->parseArguments($arguments);

        if (!$this->command) {
            $this->outputError('No command given');
            $this->command = 'help';
        }

        $commandName = $this->command . 'Command';
        if (is_callable([$this, $commandName])) {
            $exitCode = call_user_func_array([$this, $commandName], $this->arguments);
        } else {
            $this->outputError('Command ' . $this->command . ' could not be found');
            $exitCode = 1;
        }
        die($exitCode);
    }