Passed
Pull Request — master (#14)
by Alexander
02:40
created

InvalidMiddlewareDefinitionException   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Test Coverage

Coverage 91.67%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 9
eloc 20
c 1
b 0
f 0
dl 0
loc 44
ccs 22
cts 24
cp 0.9167
rs 10

2 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 10 2
B convertDefinitionToString() 0 27 7
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Yiisoft\Middleware\Dispatcher;
6
7
use InvalidArgumentException;
8
use function get_class;
9
use function is_array;
10
use function is_object;
11
use function is_string;
12
13
final class InvalidMiddlewareDefinitionException extends InvalidArgumentException
14
{
15
    /**
16
     * @param array|callable|string $middlewareDefinition
17
     */
18 10
    public function __construct($middlewareDefinition)
19
    {
20 10
        $message = 'Parameter should be either PSR middleware class name or a callable.';
21
22 10
        $definitionString = $this->convertDefinitionToString($middlewareDefinition);
23 10
        if ($definitionString !== null) {
24 10
            $message .= ' Got ' . $definitionString . '.';
25
        }
26
27 10
        parent::__construct($message);
28 10
    }
29
30 10
    private function convertDefinitionToString($middlewareDefinition): ?string
31
    {
32 10
        if (is_object($middlewareDefinition)) {
33 2
            return 'an instance of "' . get_class($middlewareDefinition) . '"';
34
        }
35
36 8
        if (is_string($middlewareDefinition)) {
37 3
            return '"' . $middlewareDefinition . '"';
38
        }
39
40 5
        if (is_array($middlewareDefinition)) {
41 5
            $items = $middlewareDefinition;
42 5
            foreach ($middlewareDefinition as $key => $item) {
43 5
                if (!is_string($item)) {
44
                    return null;
45
                }
46
            }
47 5
            array_walk($items, static function (&$item, $key) {
48 5
                $item = '"' . $item . '"';
49 5
                if (is_string($key)) {
50 2
                    $item = '"' . $key . '" => ' . $item;
51
                }
52 5
            });
53 5
            return '[' . implode(', ', $items) . ']';
54
        }
55
56
        return null;
57
    }
58
}
59