Passed
Push — master ( 43a943...86b561 )
by Daniel
12:01
created

ApiResourceRouteFinder   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 22
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 10
dl 0
loc 22
ccs 0
cts 10
cp 0
rs 10
c 0
b 0
f 0
wmc 4

2 Methods

Rating   Name   Duplication   Size   Complexity  
A findByIri() 0 13 3
A __construct() 0 3 1
1
<?php
2
3
/*
4
 * This file is part of the Silverback API Components Bundle Project
5
 *
6
 * (c) Daniel West <[email protected]>
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
declare(strict_types=1);
13
14
namespace Silverback\ApiComponentsBundle\Utility;
15
16
use Silverback\ApiComponentsBundle\Exception\InvalidArgumentException;
17
use Symfony\Component\Routing\Exception\ExceptionInterface as RoutingExceptionInterface;
18
use Symfony\Component\Routing\RouterInterface;
19
20
/**
21
 * @author Daniel West <[email protected]>
22
 */
23
final class ApiResourceRouteFinder
24
{
25
    private RouterInterface $router;
26
27
    public function __construct(RouterInterface $router)
28
    {
29
        $this->router = $router;
30
    }
31
32
    public function findByIri(string $iri): array
33
    {
34
        try {
35
            $parameters = $this->router->match($iri);
36
        } catch (RoutingExceptionInterface $e) {
37
            throw new InvalidArgumentException(sprintf('No route matches "%s".', $iri), $e->getCode(), $e);
38
        }
39
40
        if (!isset($parameters['_api_resource_class'])) {
41
            throw new InvalidArgumentException(sprintf('No resource associated to "%s".', $iri));
42
        }
43
44
        return $parameters;
45
    }
46
}
47