You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
106 lines
3.1 KiB
PHP
106 lines
3.1 KiB
PHP
<?php
|
|
|
|
namespace jrosset\CliProgram\CommandCall;
|
|
|
|
use Arrayy\Arrayy;
|
|
use jrosset\CliProgram\CliHelper;
|
|
use Symfony\Component\Console\Application;
|
|
use Symfony\Component\Console\Command\Command;
|
|
use Symfony\Component\Console\Input\ArrayInput;
|
|
use Symfony\Component\Console\Input\InputInterface;
|
|
use Symfony\Component\Console\Output\OutputInterface;
|
|
use Throwable;
|
|
|
|
/**
|
|
* A call to a command
|
|
*/
|
|
class CommandCall {
|
|
/**
|
|
* @var string The command name
|
|
*/
|
|
private string $commandName;
|
|
/**
|
|
* @var CommandArgumentList The command arguments
|
|
*/
|
|
private CommandArgumentList $commandArguments;
|
|
|
|
/**
|
|
* @param string|Command $commandName The new command name
|
|
* @param CommandArgumentList|Arrayy<string, mixed>|null $commandArguments The command new arguments
|
|
*/
|
|
public function __construct (string|Command $commandName, CommandArgumentList|Arrayy|null $commandArguments = null) {
|
|
$this->setCommandName($commandName);
|
|
$this->setCommandArguments($commandArguments ?? new CommandArgumentList());
|
|
}
|
|
|
|
/**
|
|
* Generate the input for the command call
|
|
*
|
|
* @return InputInterface Generate the input for the command call
|
|
*/
|
|
public function generateInput (): InputInterface {
|
|
return new ArrayInput(
|
|
array_merge(
|
|
[
|
|
'command' => $this->getCommandName(),
|
|
],
|
|
$this->getCommandArguments()->getArguments()
|
|
)
|
|
);
|
|
}
|
|
/**
|
|
* Run the command
|
|
*
|
|
* @param Application $app The application
|
|
* @param OutputInterface $output The output
|
|
*
|
|
* @return int The command return code
|
|
*
|
|
* @throws Throwable If an error occurs
|
|
*/
|
|
public function run (Application $app, OutputInterface $output): int {
|
|
return $app->doRun($this->generateInput(), $output);
|
|
}
|
|
|
|
/**
|
|
* The command name
|
|
*
|
|
* @return string The command name
|
|
*/
|
|
public function getCommandName (): string {
|
|
return $this->commandName;
|
|
}
|
|
/**
|
|
* Set the command name
|
|
*
|
|
* @param string|Command $commandName The new command name
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setCommandName (string|Command $commandName): self {
|
|
$this->commandName = $commandName instanceof Command
|
|
? CliHelper::getCommandNameFromClass($commandName->getApplication(), $commandName::class)
|
|
: $commandName;
|
|
return $this;
|
|
}
|
|
|
|
/**
|
|
* The command arguments
|
|
*
|
|
* @return Arrayy<string, mixed> The command arguments
|
|
*/
|
|
public function getCommandArguments (): CommandArgumentList {
|
|
return $this->commandArguments;
|
|
}
|
|
/**
|
|
* Set the command arguments
|
|
*
|
|
* @param CommandArgumentList|Arrayy $commandArguments The command new arguments
|
|
*
|
|
* @return $this
|
|
*/
|
|
public function setCommandArguments (CommandArgumentList|Arrayy $commandArguments): self {
|
|
$this->commandArguments = $commandArguments instanceof CommandArgumentList ? $commandArguments : new CommandArgumentList($commandArguments);
|
|
return $this;
|
|
}
|
|
} |