Code Coverage
 
Lines
Branches
Paths
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
10 / 10
55.56% covered (warning)
55.56%
5 / 9
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
NickComposer
100.00% covered (success)
100.00%
18 / 18
100.00% covered (success)
100.00%
10 / 10
55.56% covered (warning)
55.56%
5 / 9
100.00% covered (success)
100.00%
2 / 2
7.19
100.00% covered (success)
100.00%
1 / 1
 __construct
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
100.00% covered (success)
100.00%
1 / 1
1
 compose
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
9 / 9
50.00% covered (danger)
50.00%
4 / 8
100.00% covered (success)
100.00%
1 / 1
6.00
1<?php
2
3namespace App\Service\Nick;
4
5use App\Dto\Result\ComposedNick;
6use App\Entity\GrammaticalRole;
7use App\Entity\Qualifier;
8use App\Entity\Subject;
9use App\Enum\Lang;
10use App\Enum\QualifierPosition;
11use App\Enum\WordGender;
12use Psr\Container\ContainerInterface;
13use Symfony\Component\DependencyInjection\Attribute\AutowireLocator;
14
15/**
16 * Nick composer.
17 *
18 * @author Wilhelm Zwertvaegher
19 */
20readonly class NickComposer implements NickComposerInterface
21{
22    public function __construct(
23        #[AutowireLocator('app.composer_rules', indexAttribute: 'index')]
24        private ContainerInterface $composerRules,
25        private WordFormatterInterface $wordFormatter,
26    ) {
27    }
28
29    /**
30     *  Build an actual Nick from a Subject, Qualifier, lang and gender
31     *  In this case, put words in the right order, delegate words formatting, and applying specific rules if available.
32     */
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
38            $grammaticalRoles[] = $qualifier;
39        } else {
40            array_unshift($grammaticalRoles, $qualifier);
41        }
42
43        // get an array of formated GeneratedNickWord
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
59            return $composer->apply($composedNick, $targetGender);
60        }
61
62        return $composedNick;
63    }
64}

Paths

Below are the source code lines that represent each code path as identified by Xdebug. Please note a path is not necessarily coterminous with a line, a line may contain multiple paths and therefore show up more than once. Please also be aware that some paths may include implicit rather than explicit branches, e.g. an if statement always has an else as part of its logical flow even if you didn't write one.

NickComposer->__construct
22    public function __construct(
23        #[AutowireLocator('app.composer_rules', indexAttribute: 'index')]
24        private ContainerInterface $composerRules,
25        private WordFormatterInterface $wordFormatter,
26    ) {
27    }
NickComposer->compose
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
38            $grammaticalRoles[] = $qualifier;
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
59            return $composer->apply($composedNick, $targetGender);
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
38            $grammaticalRoles[] = $qualifier;
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
62        return $composedNick;
63    }
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
38            $grammaticalRoles[] = $qualifier;
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
59            return $composer->apply($composedNick, $targetGender);
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
38            $grammaticalRoles[] = $qualifier;
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
62        return $composedNick;
63    }
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
40            array_unshift($grammaticalRoles, $qualifier);
41        }
42
43        // get an array of formated GeneratedNickWord
44        $formattedWords = array_map(
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
59            return $composer->apply($composedNick, $targetGender);
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
40            array_unshift($grammaticalRoles, $qualifier);
41        }
42
43        // get an array of formated GeneratedNickWord
44        $formattedWords = array_map(
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
62        return $composedNick;
63    }
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
40            array_unshift($grammaticalRoles, $qualifier);
41        }
42
43        // get an array of formated GeneratedNickWord
44        $formattedWords = array_map(
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
59            return $composer->apply($composedNick, $targetGender);
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
 
40            array_unshift($grammaticalRoles, $qualifier);
41        }
42
43        // get an array of formated GeneratedNickWord
44        $formattedWords = array_map(
 
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
 
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
 
62        return $composedNick;
63    }
{closure:/home/runner/work/nick-me/nick-me/backend/src/Service/Nick/NickComposer.php:45-45}
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
{main}
3namespace App\Service\Nick;
4
5use App\Dto\Result\ComposedNick;
6use App\Entity\GrammaticalRole;
7use App\Entity\Qualifier;
8use App\Entity\Subject;
9use App\Enum\Lang;
10use App\Enum\QualifierPosition;
11use App\Enum\WordGender;
12use Psr\Container\ContainerInterface;
13use Symfony\Component\DependencyInjection\Attribute\AutowireLocator;
14
15/**
16 * Nick composer.
17 *
18 * @author Wilhelm Zwertvaegher
19 */
20readonly class NickComposer implements NickComposerInterface
21{
22    public function __construct(
23        #[AutowireLocator('app.composer_rules', indexAttribute: 'index')]
24        private ContainerInterface $composerRules,
25        private WordFormatterInterface $wordFormatter,
26    ) {
27    }
28
29    /**
30     *  Build an actual Nick from a Subject, Qualifier, lang and gender
31     *  In this case, put words in the right order, delegate words formatting, and applying specific rules if available.
32     */
33    public function compose(Subject $subject, Qualifier $qualifier, Lang $lang, WordGender $targetGender): ComposedNick
34    {
35        // put grammatical roles in the right order
36        $grammaticalRoles = [$subject];
37        if (QualifierPosition::AFTER === $qualifier->getPosition()) {
38            $grammaticalRoles[] = $qualifier;
39        } else {
40            array_unshift($grammaticalRoles, $qualifier);
41        }
42
43        // get an array of formated GeneratedNickWord
44        $formattedWords = array_map(
45            fn (GrammaticalRole $grammaticalRole) => $this->wordFormatter->format($grammaticalRole, $targetGender),
46            $grammaticalRoles
47        );
48
49        // assemble formated GeneratedNickWord and metadata (gender and offense level)
50        $composedNick = new ComposedNick(
51            $targetGender,
52            $subject->getWord()->getOffenseLevel(),
53            $formattedWords
54        );
55
56        // apply composing rules if available before returning
57        $composer = $this->composerRules->has($lang->value) ? $this->composerRules->get($lang->value) : null;
58        if ($composer) {
59            return $composer->apply($composedNick, $targetGender);
60        }
61
62        return $composedNick;
63    }