Completed
Push — master ( adc131...6e9eb4 )
by Kevin
03:32
created

GeneratorFinderBuilder   A

Complexity

Total Complexity 5

Size/Duplication

Total Lines 79
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 5
dl 0
loc 79
rs 10
c 0
b 0
f 0

4 Methods

Rating   Name   Duplication   Size   Complexity  
A buildFinder() 0 3 1
A buildDefaultFinderBuilder() 0 45 2
A addGenerator() 0 4 1
A __construct() 0 3 1
1
<?php
2
namespace DBFaker\Generators;
3
4
5
use DBFaker\Generators\Conditions\CheckTypeCondition;
6
use DBFaker\Generators\Conditions\ConditionInterface;
7
use Doctrine\DBAL\Types\Type;
8
9
class GeneratorFinderBuilder
10
{
11
12
    /**
13
     * @var array
14
     */
15
    private $generators = [];
16
17
    /**
18
     * GeneratorFinderBuilder constructor.
19
     * @param FakeDataGeneratorInterface[] $generators
20
     */
21
    public function __construct(array $generators)
22
    {
23
        $this->generators = $generators;
24
    }
25
26
27
    /**
28
     * @return GeneratorFinderBuilder
29
     * @throws \DBFaker\Exceptions\UnsupportedDataTypeException
30
     * @throws \Doctrine\DBAL\DBALException
31
     */
32
    public static function buildDefaultFinderBuilder() : GeneratorFinderBuilder
33
    {
34
        $builder = new GeneratorFinderBuilder([]);
35
36
        $typeFactories = [
37
            Type::TARRAY => new ComplexObjectGeneratorFactory(),
38
            Type::SIMPLE_ARRAY => new ComplexObjectGeneratorFactory(0),
39
            Type::JSON_ARRAY => new ComplexObjectGeneratorFactory(2),
40
            Type::JSON => new ComplexObjectGeneratorFactory(2),
41
            Type::OBJECT => new ComplexObjectGeneratorFactory(),
42
43
            Type::BOOLEAN => new SimpleGeneratorFactory('boolean'),
44
45
            Type::DATETIME => new SimpleGeneratorFactory('dateTime'),
46
            Type::DATETIMETZ => new SimpleGeneratorFactory('dateTime'),
47
            Type::DATE => new SimpleGeneratorFactory('dateTime'),
48
            Type::TIME => new SimpleGeneratorFactory('dateTime'),
49
50
            Type::DATETIME_IMMUTABLE => new DateTimeImmutableGeneratorFactory(),
51
            Type::DATE_IMMUTABLE => new DateTimeImmutableGeneratorFactory(),
52
            Type::DATETIMETZ_IMMUTABLE => new DateTimeImmutableGeneratorFactory(),
53
            Type::TIME_IMMUTABLE => new DateTimeImmutableGeneratorFactory(),
54
            Type::DATEINTERVAL => new DateIntervalGeneratorFactory(),
55
56
57
            Type::BIGINT => new NumericGeneratorFactory(),
58
            Type::INTEGER => new NumericGeneratorFactory(),
59
            Type::SMALLINT => new NumericGeneratorFactory(),
60
            Type::FLOAT => new NumericGeneratorFactory(),
61
            Type::DECIMAL => new NumericGeneratorFactory(),
62
63
            Type::STRING => new TextGeneratorFactory(),
64
            Type::TEXT => new TextGeneratorFactory(),
65
66
            Type::GUID => new SimpleGeneratorFactory('uuid')
67
        ];
68
69
        foreach ($typeFactories as $type => $factory) {
70
            $builder->addGenerator(
71
                new CheckTypeCondition(Type::getType($type)),
72
                $factory
73
            );
74
        }
75
76
        return $builder;
77
    }
78
79
    public function addGenerator(ConditionInterface $condition, FakeDataGeneratorFactoryInterface $generator) : GeneratorFinderBuilder
80
    {
81
        array_unshift($this->generators, [$condition, $generator]);
82
        return $this;
83
    }
84
85
    public function buildFinder() : GeneratorFinder
86
    {
87
        return new GeneratorFinder($this->generators);
88
    }
89
90
}