Completed
Push — master ( 99f799...7b8dce )
by Andrey
04:09
created

ContextBuilder   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 74
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 5

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 4
c 1
b 0
f 0
lcom 1
cbo 5
dl 0
loc 74
rs 10

4 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 4 1
A addFormForCompare() 0 20 1
A build() 0 4 1
A getComparableForm() 0 4 1
1
<?php
2
/**
3
 * @link    https://github.com/nnx-framework/form-comparator
4
 * @author  Malofeykin Andrey  <[email protected]>
5
 */
6
namespace Nnx\FormComparator\Context;
7
8
use Webmozart\Assert\Assert;
9
use Zend\Form\FormElementManager;
10
use Zend\Form\FormInterface;
11
12
/**
13
 * Class ContextBuilder
14
 *
15
 * @package Nnx\FormComparator\Context
16
 */
17
class ContextBuilder
18
{
19
    /**
20
     * Массив объектов, каждый из которых содержит информацию о том какие формы необходимо сравнивать
21
     *
22
     * @var ComparableForm[]
23
     */
24
    private $comparableForm = [];
25
26
    /**
27
     * @var FormElementManager
28
     */
29
    private $formElementManager;
30
31
    /**
32
     * ContextBuilder constructor.
33
     *
34
     * @param FormElementManager $formElementManager
35
     */
36
    public function __construct(FormElementManager $formElementManager)
37
    {
38
        $this->formElementManager = $formElementManager;
39
    }
40
41
    /**
42
     * Добавить информацию для сравнения форм, полученных в результате наложения информацию из двух разных объектов, на
43
     * заданную форму
44
     *
45
     * @param $formName - имя формы (должна быть зарегестрирована в FormElementManager)
46
     * @param $object1 - первая версия объекта данные из которого накладываются на фомру
47
     * @param $object2 - вторая версия объекта данные из которого накладываются на фомру
48
     */
49
    public function addFormForCompare($formName, $object1, $object2)
50
    {
51
        Assert::string($formName, 'Form name not string');
52
        Assert::notEmpty($formName, 'Form name is empty');
53
54
        Assert::object($object1, 'Data for form(v1) not object');
55
        Assert::object($object2, 'Data for form(v2) not object');
56
57
        /** @var FormInterface $form1 */
58
        $form1 = $this->formElementManager->get($formName);
59
        Assert::isInstanceOf($form1, FormInterface::class, sprintf('%s not implement %s', $formName, FormInterface::class));
60
61
        /** @var FormInterface $form2 */
62
        $form2 = $this->formElementManager->get($formName);
63
64
        $form1->bind($object1);
65
        $form2->bind($object2);
66
67
        $this->comparableForm[] = new ComparableForm($form1, $form2);
68
    }
69
70
    /**
71
     * Создает контекст для сервиса сравнивающего формы
72
     *
73
     * @return Context
74
     */
75
    public function build()
76
    {
77
        return new Context($this);
78
    }
79
80
    /**
81
     * Массив объектов, каждый из которых содержит информацию о том какие формы необходимо сравнивать
82
     *
83
     * @return ComparableForm[]
84
     */
85
    public function getComparableForm()
86
    {
87
        return $this->comparableForm;
88
    }
89
90
}
91