FieldFactory::create()   A
last analyzed

Complexity

Conditions 3
Paths 4

Size

Total Lines 13
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 12

Importance

Changes 0
Metric Value
cc 3
eloc 6
nc 4
nop 1
dl 0
loc 13
ccs 0
cts 7
cp 0
crap 12
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace WebTheory\Saveyour\Factory;
4
5
use WebTheory\Factory\Traits\SmartFactoryTrait;
6
use WebTheory\Saveyour\Contracts\Controller\FormFieldControllerInterface;
7
use WebTheory\Saveyour\Contracts\Data\FieldDataManagerInterface;
8
use WebTheory\Saveyour\Contracts\Factory\FieldDataManagerResolverFactoryInterface as iDataManagerFactory;
9
use WebTheory\Saveyour\Contracts\Factory\FormFieldResolverFactoryInterface as iFormFieldFactory;
10
use WebTheory\Saveyour\Contracts\Field\FormFieldInterface;
11
use WebTheory\Saveyour\Controller\FormFieldController;
12
13
class FieldFactory
14
{
15
    use SmartFactoryTrait;
0 ignored issues
show
Bug introduced by
The trait WebTheory\Factory\Traits\SmartFactoryTrait requires the property $name which is not provided by WebTheory\Saveyour\Factory\FieldFactory.
Loading history...
16
17
    protected iFormFieldFactory $formFieldFactory;
18
19
    protected iDataManagerFactory $dataManagerFactory;
20
21
    protected $controller = FormFieldController::class;
22
23
    public function __construct(iFormFieldFactory $formFieldFactory, iDataManagerFactory $dataManagerFactory, ?string $controller = null)
24
    {
25
        $this->formFieldFactory = $formFieldFactory;
26
        $this->dataManagerFactory = $dataManagerFactory;
27
28
        if (isset($controller)) {
29
            $this->controller = $controller;
30
        }
31
    }
32
33
    public function create(array $args): FormFieldControllerInterface
34
    {
35
        if (isset($args['type'])) {
36
            $args['form_field'] = $this->createFormField($args['type']);
37
        }
38
39
        if (isset($args['data'])) {
40
            $args['data_manager'] = $this->createDataManager($args['data']);
41
        }
42
43
        unset($args['type'], $args['data']);
44
45
        return $this->createController($args);
46
    }
47
48
    protected function createController(array $args): FormFieldControllerInterface
49
    {
50
        return $this->build($this->controller, $args);
51
    }
52
53
    protected function createFormField(array $args): FormFieldInterface
54
    {
55
        $type = $args['@create'];
56
        unset($args['@create']);
57
58
        return $this->formFieldFactory->create($type, $args);
59
    }
60
61
    protected function createDataManager(array $args): FieldDataManagerInterface
62
    {
63
        $manager = $args['@create'];
64
        unset($args['@create']);
65
66
        return $this->dataManagerFactory->create($manager, $args);
67
    }
68
69
    public function __call($name, $args)
70
    {
71
        $args = $args[0];
72
        $args['type']['@create'] = $this->getArg($name);
73
74
        return $this->create($args);
75
    }
76
}
77