FieldFactory   A
last analyzed

Complexity

Total Complexity 9

Size/Duplication

Total Lines 62
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
eloc 25
dl 0
loc 62
ccs 0
cts 26
cp 0
rs 10
c 0
b 0
f 0
wmc 9

6 Methods

Rating   Name   Duplication   Size   Complexity  
A createDataManager() 0 6 1
A __call() 0 6 1
A createFormField() 0 6 1
A createController() 0 3 1
A create() 0 13 3
A __construct() 0 7 2
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