CommandCollection   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 0

Test Coverage

Coverage 47.06%

Importance

Changes 0
Metric Value
wmc 4
lcom 1
cbo 0
dl 0
loc 36
ccs 8
cts 17
cp 0.4706
rs 10
c 0
b 0
f 0

3 Methods

Rating   Name   Duplication   Size   Complexity  
A getIterator() 0 4 1
A add() 0 9 2
A all() 0 4 1
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Console;
4
5
use ArrayIterator;
6
use InvalidArgumentException;
7
use Symfony\Component\Console\Command\Command;
8
use Venta\Contracts\Console\CommandCollection as CommandCollectionContract;
9
10
/**
11
 * Class CommandCollection
12
 *
13
 * @package Venta\Console
14
 */
15
final class CommandCollection implements CommandCollectionContract
16
{
17
    /**
18
     * @var string[]
19
     */
20
    private $commands = [];
21
22
    /**
23
     * @inheritDoc
24
     */
25 2
    public function add(string $commandClass)
26
    {
27 2
        if (!is_subclass_of($commandClass, Command::class)) {
28 1
            throw new InvalidArgumentException(
29 1
                sprintf('Provided command "%s" is not subclass of "%s" class.', $commandClass, Command::class)
30
            );
31
        }
32 1
        $this->commands[] = $commandClass;
33 1
    }
34
35
    /**
36
     * @inheritDoc
37
     */
38 1
    public function all(): array
39
    {
40 1
        return array_unique($this->commands);
41
    }
42
43
    /**
44
     * @inheritDoc
45
     */
46
    public function getIterator()
47
    {
48
        return new ArrayIterator($this->all());
49
    }
50
}