RefreshSameCommand::command()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 16
Code Lines 10

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 10
CRAP Score 2.003

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 2
eloc 10
nc 2
nop 2
dl 0
loc 16
ccs 10
cts 11
cp 0.9091
crap 2.003
rs 9.9332
c 2
b 0
f 0
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 13
        private readonly MatchQueryInterface $matchQuery
19
    ){
20 13
    }
21 13
22
    /**
23 8
     * @return void
24
     */
25 8
    #[\Override]
26 8
    public function command(MethodInvocation $invocation, ResourceObject $ro)
27
    {
28
        unset($invocation);
29 8
        $getQuery = $this->getQuery($ro);
30 8
        $delUri = clone $ro->uri;
31 7
        $delUri->query = $getQuery;
32 7
33
        // delete data in repository
34
        $this->repository->purge($delUri);
35 7
36
        // GET for re-generate (in interceptor)
37
        $ro->uri->query = $getQuery;
38 7
        $get = [$ro, 'onGet'];
39 7
        if (is_callable($get)) {
40 7
            call_user_func_array($get, array_values($getQuery));
41
        }
42 7
    }
43
44
    /**
45
     * @return array<string, mixed>
46
     *
47 8
     * @throws ReflectionException
48
     */
49 8
    private function getQuery(ResourceObject $ro): array
50 8
    {
51 8
        return $this->matchQuery->__invoke($ro);
52 8
    }
53
}
54