Passed
Pull Request — master (#67)
by Daniel
05:36
created

ApiResourceRouteFinder::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 0
cts 2
cp 0
crap 2
rs 10
c 0
b 0
f 0
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\Helper\Collection;
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