public function bind(InputDefinition $definition)
    {
        $this->arguments = array();
        $this->options = array();
        $this->definition = $definition;

        $packageClass = $this->getPackageClass();

        $options = $packageClass::getOptions();
        $arguments = $packageClass::getArguments();

        foreach ($options as $option) {
            $this->definition->addOption(new InputOption(
                array_get($option, 0, null),
                array_get($option, 1, null),
                array_get($option, 2, null),
                array_get($option, 3, null),
                array_get($option, 4, null)
            ));
        }

        foreach ($arguments as $argument) {
            $this->definition->addArgument(new InputArgument(
                array_get($argument, 0, null),
                array_get($argument, 1, null),
                array_get($argument, 2, null),
                array_get($argument, 3, null)
            ));
        }

        $this->parse();

        if ((count($options) + count($arguments)) == 0 &&
            count($this->arguments) == 2
        ) {
            // The package does not define any arguments or options. We
            // will check to see if the user has not supplied all of
            // the required arguments specified by NewUp. If they
            // haven't, it is most like the install directory.
            // We will add that argument automatically here
            // to make general usage a little bit nicer.
            $this->arguments = array_merge($this->arguments, ['newup-output-directory' => '.']);
        }

    }