FieldFactory::buildField()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 19

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 19
rs 9.6333
c 0
b 0
f 0
cc 2
nc 2
nop 1
1
<?php
2
3
namespace Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity;
4
5
class FieldFactory
6
{
7
    private $map = [
8
        'string' => 'Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity\StringField',
9
        'int' => 'Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity\IntField',
10
        'double' => 'Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity\DoubleField',
11
        'array' => 'Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity\ArrayField',
12
        'boolean' => 'Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity\BooleanField',
13
        'date' => 'Mdiyakov\DoctrineSolrBundle\Schema\Field\Entity\DateField',
14
    ];
15
16
    /**
17
     * @param string[] $fieldConfig
18
     * @return Field
19
     * @throws \Exception
20
     */
21
    public function buildField($fieldConfig)
22
    {
23
        if (!array_key_exists($fieldConfig['field_type'], $this->map)) {
24
            throw new \Exception(
25
                sprintf('The index field type "%s" is not implemented yet', $fieldConfig['field_type'])
26
            );
27
        }
28
29
        $fieldClass = $this->map[$fieldConfig['field_type']];
30
        /** @var Field $field */
31
        $field = new $fieldClass(
32
            $fieldConfig['entity_field_name'],
33
            $fieldConfig['document_field_name'],
34
            $fieldConfig['entity_primary_key'],
35
            $fieldConfig['priority'],
36
            $fieldConfig['suggester']
37
        );
38
39
        return $field;
40
    }
41
42
43
}