Lorem   A
last analyzed

Complexity

Total Complexity 22

Size/Duplication

Total Lines 153
Duplicated Lines 0 %

Test Coverage

Coverage 88%

Importance

Changes 0
Metric Value
wmc 22
eloc 90
dl 0
loc 153
ccs 44
cts 50
cp 0.88
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A paragraph() 0 11 3
B text() 0 33 8
A words() 0 8 2
A randomizeNumberOfElements() 0 3 1
A sentence() 0 14 3
A sentences() 0 8 2
A word() 0 3 1
A paragraphs() 0 8 2
1
<?php
2
3
declare(strict_types = 1);
4
5
namespace DummyGenerator\Core;
6
7
use DummyGenerator\Definitions\Extension\Awareness\GeneratorAwareExtensionInterface;
8
use DummyGenerator\Definitions\Extension\Awareness\GeneratorAwareExtensionTrait;
9
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionInterface;
10
use DummyGenerator\Definitions\Extension\Awareness\RandomizerAwareExtensionTrait;
11
use DummyGenerator\Definitions\Extension\Awareness\ReplacerAwareExtensionInterface;
12
use DummyGenerator\Definitions\Extension\Awareness\ReplacerAwareExtensionTrait;
13
use DummyGenerator\Definitions\Extension\Exception\ExtensionArgumentException;
14
use DummyGenerator\Definitions\Extension\LoremExtensionInterface;
15
16
class Lorem implements
17
    LoremExtensionInterface,
18
    GeneratorAwareExtensionInterface,
19
    RandomizerAwareExtensionInterface,
20
    ReplacerAwareExtensionInterface
21
{
22
    use GeneratorAwareExtensionTrait;
23
    use RandomizerAwareExtensionTrait;
24
    use ReplacerAwareExtensionTrait;
25
26
    /** @var string[] */
27
    protected array $workList = [
28
        'alias', 'consequatur', 'aut', 'perferendis', 'sit', 'voluptatem',
29
        'accusantium', 'doloremque', 'aperiam', 'eaque', 'ipsa', 'quae', 'ab',
30
        'illo', 'inventore', 'veritatis', 'et', 'quasi', 'architecto',
31
        'beatae', 'vitae', 'dicta', 'sunt', 'explicabo', 'aspernatur', 'aut',
32
        'odit', 'aut', 'fugit', 'sed', 'quia', 'consequuntur', 'magni',
33
        'dolores', 'eos', 'qui', 'ratione', 'voluptatem', 'sequi', 'nesciunt',
34
        'neque', 'dolorem', 'ipsum', 'quia', 'dolor', 'sit', 'amet',
35
        'consectetur', 'adipisci', 'velit', 'sed', 'quia', 'non', 'numquam',
36
        'eius', 'modi', 'tempora', 'incidunt', 'ut', 'labore', 'et', 'dolore',
37
        'magnam', 'aliquam', 'quaerat', 'voluptatem', 'ut', 'enim', 'ad',
38
        'minima', 'veniam', 'quis', 'nostrum', 'exercitationem', 'ullam',
39
        'corporis', 'nemo', 'enim', 'ipsam', 'voluptatem', 'quia', 'voluptas',
40
        'sit', 'suscipit', 'laboriosam', 'nisi', 'ut', 'aliquid', 'ex', 'ea',
41
        'commodi', 'consequatur', 'quis', 'autem', 'vel', 'eum', 'iure',
42
        'reprehenderit', 'qui', 'in', 'ea', 'voluptate', 'velit', 'esse',
43
        'quam', 'nihil', 'molestiae', 'et', 'iusto', 'odio', 'dignissimos',
44
        'ducimus', 'qui', 'blanditiis', 'praesentium', 'laudantium', 'totam',
45
        'rem', 'voluptatum', 'deleniti', 'atque', 'corrupti', 'quos',
46
        'dolores', 'et', 'quas', 'molestias', 'excepturi', 'sint',
47
        'occaecati', 'cupiditate', 'non', 'provident', 'sed', 'ut',
48
        'perspiciatis', 'unde', 'omnis', 'iste', 'natus', 'error',
49
        'similique', 'sunt', 'in', 'culpa', 'qui', 'officia', 'deserunt',
50
        'mollitia', 'animi', 'id', 'est', 'laborum', 'et', 'dolorum', 'fuga',
51
        'et', 'harum', 'quidem', 'rerum', 'facilis', 'est', 'et', 'expedita',
52
        'distinctio', 'nam', 'libero', 'tempore', 'cum', 'soluta', 'nobis',
53
        'est', 'eligendi', 'optio', 'cumque', 'nihil', 'impedit', 'quo',
54
        'porro', 'quisquam', 'est', 'qui', 'minus', 'id', 'quod', 'maxime',
55
        'placeat', 'facere', 'possimus', 'omnis', 'voluptas', 'assumenda',
56
        'est', 'omnis', 'dolor', 'repellendus', 'temporibus', 'autem',
57
        'quibusdam', 'et', 'aut', 'consequatur', 'vel', 'illum', 'qui',
58
        'dolorem', 'eum', 'fugiat', 'quo', 'voluptas', 'nulla', 'pariatur',
59
        'at', 'vero', 'eos', 'et', 'accusamus', 'officiis', 'debitis', 'aut',
60
        'rerum', 'necessitatibus', 'saepe', 'eveniet', 'ut', 'et',
61
        'voluptates', 'repudiandae', 'sint', 'et', 'molestiae', 'non',
62
        'recusandae', 'itaque', 'earum', 'rerum', 'hic', 'tenetur', 'a',
63
        'sapiente', 'delectus', 'ut', 'aut', 'reiciendis', 'voluptatibus',
64
        'maiores', 'doloribus', 'asperiores', 'repellat',
65
    ];
66
67 10
    public function word(): string
68
    {
69 10
        return $this->randomizer->randomElement($this->workList);
70
    }
71
72 8
    public function words(int $wordCount = 3): array
73
    {
74 8
        $words = [];
75 8
        for ($i = 0; $i < $wordCount; $i++) {
76 8
            $words[] = $this->word();
77
        }
78
79 8
        return $words;
80
    }
81
82 5
    public function sentence(int $wordCount = 6, bool $variableWordCount = true): string
83
    {
84 5
        if ($wordCount <= 0) {
85
            throw new ExtensionArgumentException('$wordCount should be at least 1');
86
        }
87
88 5
        if ($variableWordCount === true) {
89 4
            $wordCount = $this->randomizeNumberOfElements($wordCount);
90
        }
91
92 5
        $words = $this->words($wordCount);
93 5
        $words[0] = ucwords($words[0]);
94
95 5
        return implode(' ', $words) . '.';
96
    }
97
98 3
    public function sentences(int $sentenceCount = 3): array
99
    {
100 3
        $sentences = [];
101 3
        for ($i = 0; $i < $sentenceCount; ++$i) {
102 3
            $sentences[] = $this->sentence();
103
        }
104
105 3
        return $sentences;
106
    }
107
108 2
    public function paragraph(int $sentenceCount = 3, bool $variableSentenceCount = true): string
109
    {
110 2
        if ($sentenceCount <= 0) {
111
            throw new ExtensionArgumentException('$sentenceCount should be at least 1');
112
        }
113
114 2
        if ($variableSentenceCount) {
115 1
            $sentenceCount = $this->randomizeNumberOfElements($sentenceCount);
116
        }
117
118 2
        return implode(' ', $this->sentences($sentenceCount));
119
    }
120
121 1
    public function paragraphs(int $paragraphCount = 3): array
122
    {
123 1
        $paragraphs = [];
124 1
        for ($i = 0; $i < $paragraphCount; ++$i) {
125 1
            $paragraphs[] = $this->paragraph();
126
        }
127
128 1
        return $paragraphs;
129
    }
130
131 1
    public function text(int $maxCharacters = 200): string
132
    {
133 1
        if ($maxCharacters < 5) {
134
            throw new ExtensionArgumentException('$maxCharacters can only generate text of at least 5 characters');
135
        }
136
137 1
        $subtype = ($maxCharacters < 100) ? 'sentence' : 'paragraph';
138 1
        $type = ($maxCharacters < 25) ? 'word' : $subtype;
139
140 1
        $text = [];
141
142
        do {
143 1
            $size = 0;
144
145
            do {
146 1
                $word = ($size ? ' ' : '') . $this->$type();
147 1
                $text[] = $word;
148
149 1
                $size += $this->replacer->strlen($word);
150 1
            } while ($size < $maxCharacters);
151
152 1
            array_pop($text);
153
        } while (empty($text));
154
155 1
        if ($type === 'word') {
156
            // capitalize first letter
157
            $text[0] = ucwords($text[0]);
158
159
            // end sentence with full stop
160
            $text[count($text) - 1] .= '.';
161
        }
162
163 1
        return implode('', $text);
164
    }
165
166 4
    private function randomizeNumberOfElements(int $number): int
167
    {
168 4
        return (int) ($number * $this->randomizer->getInt(60, 140) / 100) + 1;
169
    }
170
}
171