RefreshSameCommand   A
last analyzed

Complexity

Total Complexity 4

Size/Duplication

Total Lines 38
Duplicated Lines 0 %

Test Coverage

Coverage 93.75%

Importance

Changes 3
Bugs 0 Features 0
Metric Value
eloc 11
c 3
b 0
f 0
dl 0
loc 38
ccs 15
cts 16
cp 0.9375
rs 10
wmc 4

3 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A getQuery() 0 3 1
A command() 0 16 2
1
<?php
2
3
namespace BEAR\QueryRepository;
4
5
use BEAR\Resource\ResourceObject;
6
use Ray\Aop\MethodInvocation;
7
use ReflectionException;
8
use function array_values;
9
use function call_user_func_array;
10
use function is_callable;
11
12
// phpcs:ignoreFile SlevomatCodingStandard.TypeHints.DeclareStrictTypes.DeclareStrictTypesMissing -- for call_user_func_array
13
14
final class RefreshSameCommand implements CommandInterface
15
{
16
    public function __construct(
17
        private readonly QueryRepositoryInterface $repository,
18
        private readonly MatchQueryInterface $matchQuery
19
    ){
20 11
    }
21
22 11
    /**
23 11
     * @return void
24
     */
25
    #[\Override]
26
    public function command(MethodInvocation $invocation, ResourceObject $ro)
27
    {
28
        unset($invocation);
29 8
        $getQuery = $this->getQuery($ro);
30
        $delUri = clone $ro->uri;
31 8
        $delUri->query = $getQuery;
32 8
33
        // delete data in repository
34
        $this->repository->purge($delUri);
35 8
36 8
        // GET for re-generate (in interceptor)
37 8
        $ro->uri->query = $getQuery;
38 7
        $get = [$ro, 'onGet'];
39 7
        if (is_callable($get)) {
40
            call_user_func_array($get, array_values($getQuery));
41
        }
42 7
    }
43
44
    /**
45 7
     * @return array<string, mixed>
46 7
     *
47 7
     * @throws ReflectionException
48
     */
49
    private function getQuery(ResourceObject $ro): array
50
    {
51
        return $this->matchQuery->__invoke($ro);
52
    }
53
}
54