Skip to content

Commit

Permalink
Store class and bundle alias as member variables
Browse files Browse the repository at this point in the history
Compute bundle alias through getAlias call on bundle base class
Handle command not in a bundle
  • Loading branch information
Raphaël Gertz committed Dec 8, 2024
1 parent 2a48292 commit d23e619
Showing 1 changed file with 55 additions and 10 deletions.
65 changes: 55 additions & 10 deletions Command.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,39 @@
* {@inheritdoc}
*/
class Command extends BaseCommand {
/**
* Alias string
*/
protected string $alias = '';

/**
* Bundle string
*/
protected string $bundle = '';

/**
* {@inheritdoc}
*/
public function __construct(protected ?string $name = null) {
//Get class
$class = strrchr(static::class, '\\', true);

//Without command name
if (substr(static::class, -strlen('\\Command')) !== '\\Command') {
$class = strrchr($class, '\\', true);
}

//Set bundle
$this->bundle = strtolower($class);

//With full class name
if (class_exists($class .= '\\'.str_replace('\\', '', $class)) && method_exists($class, 'getAlias')) {
//Set alias
$this->alias = call_user_func([$class, 'getAlias']);
}

//Fix name
$this->name = $this->name ?? static::getName();
$this->name = $this->name ?? static::getName($this->alias);

//Call parent constructor
parent::__construct($this->name);
Expand All @@ -44,11 +71,13 @@ public function __construct(protected ?string $name = null) {
}

/**
* Return the command name
*
* {@inheritdoc}
*
* Return the command name
* @param ?string $alias The bundle alias
*/
public function getName(): string {
public function getName(?string $alias = null): string {
//With namespace
if ($npos = strrpos(static::class, '\\')) {
//Set name pos
Expand All @@ -58,17 +87,33 @@ public function getName(): string {
$npos = 0;
}

//Set bundle pos
$bpos = strlen(static::class) - $npos;

//With trailing command
if (substr(static::class, -strlen('Command'), strlen('Command')) === 'Command') {
//Set bundle pos
$bpos = strlen(static::class) - $npos - strlen('Command');
//Without bundle
} else {
//Set bundle pos
$bpos = strlen(static::class) - $npos;
//Fix bundle pos
$bpos -= strlen('Command');
}

//Without alias
if ($alias === null) {
//Get class
$class = strrchr(static::class, '\\', true);

//Without command name
if (substr(static::class, -strlen('\\Command')) !== '\\Command') {
$class = strrchr($class, '\\', true);
}

//With full class name
if (class_exists($class .= '\\'.str_replace('\\', '', $class)) && method_exists($class, 'getAlias')) {
//Set alias
$alias = call_user_func([$class, 'getAlias']);
}
}

//Return command alias
return RapsysPackBundle::getAlias().':'.strtolower(substr(static::class, $npos, $bpos));
return ($alias?$alias.':':'').strtolower(substr(static::class, $npos, $bpos));
}
}

0 comments on commit d23e619

Please sign in to comment.