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 8
CRAP Score 2.0054

Importance

Changes 2
Bugs 0 Features 0
Metric Value
cc 2
eloc 10
c 2
b 0
f 0
nc 2
nop 2
dl 0
loc 16
ccs 8
cts 9
cp 0.8889
crap 2.0054
rs 9.9332
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