FakerGeneratorFactory   A
last analyzed

Complexity

Total Complexity 6

Size/Duplication

Total Lines 39
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 39
rs 10
wmc 6

1 Method

Rating   Name   Duplication   Size   Complexity  
A getGenerator() 0 32 6
1
<?php
2
3
namespace WebnetFr\DatabaseAnonymizer\GeneratorFactory;
4
5
use Faker\Factory;
6
use WebnetFr\DatabaseAnonymizer\Exception\MissingFormatterException;
7
use WebnetFr\DatabaseAnonymizer\Exception\UnsupportedGeneratorException;
8
use WebnetFr\DatabaseAnonymizer\Generator\FakerGenerator;
9
use WebnetFr\DatabaseAnonymizer\Generator\GeneratorInterface;
10
11
/**
12
 * Creates various generators based on faker providers.
13
 *
14
 * @author Vlad Riabchenko <[email protected]>
15
 */
16
class FakerGeneratorFactory extends Factory implements GeneratorFactoryInterface
17
{
18
    const DEFAULT_LOCALE = 'en_US';
19
20
    /**
21
     * {@inheritdoc}
22
     */
23
    public function getGenerator(array $config): GeneratorInterface
24
    {
25
        $generatorKey = $config['generator'];
26
        if ('faker' !== $generatorKey) {
27
            throw new UnsupportedGeneratorException($generatorKey.' generator is not known');
28
        }
29
30
        $formatter = $config['formatter'] ?? null;
31
        if (!$formatter) {
32
            throw new MissingFormatterException('You need to chose a "formatter" for "faker" generator');
33
        }
34
35
        $locale = $config['locale'] ?? self::DEFAULT_LOCALE;
36
        $generator = Factory::create($locale);
37
38
        $seed = $config['seed'] ?? false;
39
        if ($seed) {
40
            $generator->seed($seed);
41
        }
42
43
        if ($config['unique'] ?? false) {
44
            $generator = $generator->unique();
45
        }
46
47
        $optional = $config['optional'] ?? false;
48
        if ($optional) {
49
            $generator = $generator->optional($optional);
50
        }
51
52
        $arguments = $config['arguments'] ?? [];
53
54
        return new FakerGenerator($generator, $formatter, $arguments, $config);
55
    }
56
}
57