ServiceContainerHealthCheck   A
last analyzed

Complexity

Total Complexity 5

Size/Duplication

Total Lines 46
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 14
c 1
b 0
f 0
dl 0
loc 46
rs 10
wmc 5

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 6 1
A createQuery() 0 12 2
A assertHealthCheck() 0 6 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Cushon\HealthBundle\Message\QueryFactory;
6
7
use Cushon\HealthBundle\Message\Query\HealthCheck;
8
use Cushon\HealthBundle\Message\QueryFactory\ServiceContainerHealthCheck\Exception\IncorrectQueryType;
9
use Cushon\HealthBundle\Message\QueryFactory\ServiceContainerHealthCheck\Exception\QueryServiceDefinitionNotFound;
10
use Symfony\Component\DependencyInjection\ContainerInterface;
11
12
final class ServiceContainerHealthCheck implements QueryFactory
13
{
14
    private ContainerInterface $container;
15
    private string $definitionName;
16
17
    /**
18
     * @param ContainerInterface $container
19
     * @param string $definitionName
20
     */
21
    public function __construct(
22
        ContainerInterface $container,
23
        string $definitionName = HealthCheck::class
24
    ) {
25
        $this->container = $container;
26
        $this->definitionName = $definitionName;
27
    }
28
29
30
    /**
31
     * @inheritDoc
32
     */
33
    public function createQuery(): HealthCheck
34
    {
35
        if (!$this->container->has($this->definitionName)) {
36
            throw QueryServiceDefinitionNotFound::create($this->container, $this->definitionName);
37
        }
38
39
        /** @var object $query */
40
        $query =  $this->container->get(HealthCheck::class);
41
        $this->assertHealthCheck($query);
42
43
        /** @var HealthCheck $query */
44
        return $query;
45
    }
46
47
    /**
48
     * @param object $query
49
     * @return void
50
     * @psalm-assert HealthCheck $query
51
     */
52
    private function assertHealthCheck(object $query): void
53
    {
54
        if (!$query instanceof HealthCheck) {
55
            throw IncorrectQueryType::create(
56
                HealthCheck::class,
57
                $query
58
            );
59
        }
60
    }
61
}
62