/** * @return array list of invalid $assoc_args keys to unset */ private function validate_args($args, $assoc_args, $extra_args) { $synopsis = $this->get_synopsis(); if (!$synopsis) { return array(); } $validator = new Terminus\SynopsisValidator($synopsis); $cmd_path = implode(' ', get_path($this)); foreach ($validator->get_unknown() as $token) { Terminus::log('warning', "The `{cmd}` command has an invalid synopsis part: {token}", array('cmd' => $cmd_path, 'token' => $token)); } if (!$validator->enough_positionals($args)) { $this->show_usage(); exit(1); } if ($this->name != 'help') { $invalid = $validator->invalid_positionals($args); if ($invalid) { throw new TerminusException("Invalid positional value: {invalid}", array('invalid' => $invalid)); } } $unknown_positionals = $validator->unknown_positionals($args); if (!empty($unknown_positionals)) { throw new TerminusException('Too many positional arguments: {args}', array('args' => implode(' ', $unknown_positionals))); } list($errors, $to_unset) = $validator->validate_assoc(array_merge(Terminus::get_config(), $extra_args, $assoc_args)); foreach ($validator->unknown_assoc($assoc_args) as $key) { $errors['fatal'][] = "unknown --{$key} parameter"; } if (!empty($errors['fatal'])) { $out = 'Parameter errors:'; foreach ($errors['fatal'] as $error) { $out .= "\n " . $error; } throw new TerminusException($out); } foreach ($errors['warning'] as $warning) { Terminus::log('warning', $warning); } return $to_unset; }
/** * Decides which arguments are invalid for this command * * @param array $args Array of command line non-params and non-flags * @param array $assoc_args Array of command line params and flags * @return array A list of invalid $assoc_args keys to unset * @throws TerminusException */ private function validateArgs($args, $assoc_args) { $synopsis = $this->getSynopsis(); if (!$synopsis) { return array(); } $validator = new SynopsisValidator($synopsis); $cmd_path = implode(' ', getPath($this)); foreach ($validator->getUnknown() as $token) { $this->logger->warning('The `{cmd}` command has an invalid synopsis part: {token}', array('cmd' => $cmd_path, 'token' => $token)); } if (!$validator->enoughPositionals($args)) { throw new TerminusException($this->getUsage()); exit(1); } if ($this->name != 'help') { $invalid = $validator->invalidPositionals($args); if ($invalid) { throw new TerminusException('Invalid positional value: {invalid}', compact('invalid'), 1); } } $unknownPositionals = $validator->unknownPositionals($args); if (!empty($unknownPositionals)) { throw new TerminusException('Too many positional arguments: {args}', ['args' => implode(' ', $unknownPositionals)], 1); } list($errors, $to_unset) = $validator->validateAssoc(array_merge($this->config, $assoc_args)); foreach ($validator->unknownAssoc($assoc_args) as $key) { $errors['fatal'][] = "unknown --{$key} parameter"; } if (!empty($errors['fatal'])) { $out = 'Parameter errors:'; foreach ($errors['fatal'] as $error) { $out .= "\n " . $error; } throw new TerminusException($out, [], 1); } foreach ($errors['warning'] as $warning) { $this->logger->warning($warning); } return $to_unset; }