Code Coverage
 
Lines
Functions and Methods
Classes and Traits
Total
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
2 / 2
CRAP
100.00% covered (success)
100.00%
1 / 1
ResourceName
100.00% covered (success)
100.00%
17 / 17
100.00% covered (success)
100.00%
2 / 2
6
100.00% covered (success)
100.00%
1 / 1
 getFallbackText
100.00% covered (success)
100.00%
8 / 8
100.00% covered (success)
100.00%
1 / 1
5
 createFromTuple
100.00% covered (success)
100.00%
9 / 9
100.00% covered (success)
100.00%
1 / 1
1
1<?php
2namespace Apie\Core\Translator\ValueObjects;
3
4use Apie\Core\Actions\BoundedContextEntityTuple;
5use Apie\Core\Attributes\Description;
6use Apie\Core\Attributes\ExampleValue;
7use Apie\Core\Identifiers\SnakeCaseSlug;
8use Apie\Core\Lists\ItemHashmap;
9use Apie\Core\Translator\Enums\Pluralization;
10use ICanBoogie\Inflector;
11
12#[Description('Name of resource')]
13#[ExampleValue('apie.bounded.test.resource.user.name.singular')]
14class ResourceName extends AbstractTranslation
15{
16    protected const MIDDLE_REGEX = 'name';
17
18    public function getFallbackText(string $locale = 'en'): string
19    {
20        $id = $this->prefix->getResourceIdentifier();
21        $plural = $this->suffix->getPluralization();
22        if ($id) {
23            $inflector = Inflector::get($locale);
24            return match ($plural) {
25                Pluralization::Singular => $inflector->singularize(ucfirst($id->humanize())),
26                Pluralization::Plural => $inflector->pluralize(ucfirst($id->humanize())),
27                default => ucfirst($id->humanize()),
28            };
29        }
30        return 'Resource';
31    }
32
33    public static function createFromTuple(BoundedContextEntityTuple $tuple, TranslationStringSuffix $suffix = new TranslationStringSuffix()): static
34    {
35        return new static(
36            new TranslationStringPrefix(
37                $tuple->boundedContext->getId(),
38                SnakeCaseSlug::fromClass($tuple->resourceClass)
39            ),
40            'name',
41            $suffix,
42            new ItemHashmap()
43        );
44    }
45}