Test Failed
Push — master ( 54ff6d...3a08c8 )
by Sergey
02:35
created

ArraySerializer::serializeOptions()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 13
Code Lines 7

Duplication

Lines 0
Ratio 0 %
Metric Value
dl 0
loc 13
rs 9.4285
cc 2
eloc 7
nc 2
nop 1
1
<?php
2
/**
3
 * @author: Viskov Sergey
4
 * @date: 3/14/16
5
 * @time: 12:54 PM
6
 */
7
8
namespace LTDBeget\sphinx\configurator\serializers;
9
10
11
use LTDBeget\sphinx\configurator\Configuration;
12
use LTDBeget\sphinx\configurator\configurationEntities\base\Definition;
13
use LTDBeget\sphinx\configurator\configurationEntities\base\Section;
14
use LTDBeget\sphinx\configurator\configurationEntities\base\Settings;
15
use LTDBeget\sphinx\configurator\exceptions\LogicException;
16
17
/**
18
 * Class ArraySerializer
19
 * serialize Configuration object to array
20
 * @package LTDBeget\sphinx\configurator\serializers
21
 */
22
class ArraySerializer
23
{
24
    /**
25
     * Make array represent of Configuration object
26
     * @param Configuration $configuration
27
     * @return array
28
     */
29
    public static function serialize(Configuration $configuration) : array
30
    {
31
        $serializer                      = new self();
32
        $serializer->objectConfiguration = $configuration;
33
34
        return $serializer->serializeInternal();
35
    }
36
37
    /**
38
     * @internal
39
     * ArraySerializer constructor.
40
     */
41
    private function __construct()
42
    {
43
    }
44
45
    /**
46
     * @internal
47
     * @return array
48
     */
49
    private function serializeInternal() : array
50
    {
51
        $this->serializeSource();
52
        $this->serializeIndex();
53
        $this->serializeIndexer();
54
        $this->serializeSearchhd();
55
        $this->serializeCommon();
56
57
        return $this->arrayConfiguration;
58
    }
59
60
    /**
61
     * @internal
62
     * @throws LogicException
63
     */
64
    private function serializeSource()
65
    {
66
        foreach ($this->objectConfiguration->iterateSource() as $source) {
67
            $this->serializeDefinition($source);
68
        }
69
    }
70
71
    /**
72
     * @internal
73
     * @throws LogicException
74
     */
75
    private function serializeIndex()
76
    {
77
        foreach ($this->objectConfiguration->iterateIndex() as $index) {
78
            $this->serializeDefinition($index);
79
        }
80
    }
81
82
    /**
83
     * @internal
84
     */
85
    private function serializeIndexer()
86
    {
87
        if ($this->objectConfiguration->isHasIndexer()) {
88
            $this->serializeSettings($this->objectConfiguration->getIndexer());
89
        }
90
    }
91
92
    /**
93
     * @internal
94
     */
95
    private function serializeSearchhd()
96
    {
97
        if ($this->objectConfiguration->isHasSearchd()) {
98
            $this->serializeSettings($this->objectConfiguration->getSearchd());
99
        }
100
    }
101
102
    /**
103
     * @internal
104
     */
105
    private function serializeCommon()
106
    {
107
        if ($this->objectConfiguration->isHasCommon()) {
108
            $this->serializeSettings($this->objectConfiguration->getCommon());
109
        }
110
    }
111
112
    /**
113
     * @internal
114
     * @param Definition $definition
115
     * @throws LogicException
116
     */
117
    private function serializeDefinition(Definition $definition)
118
    {
119
        $this->arrayConfiguration[] = [
120
            "type"        => (string) $definition->getType(),
121
            "name"        => (string) $definition->getName(),
122
            "inheritance" => $definition->isHasInheritance() ? $definition->getInheritance() : null,
123
            "options"     => $this->serializeOptions($definition)
124
        ];
125
    }
126
127
    /**
128
     * @internal
129
     * @param Settings $settings
130
     */
131
    private function serializeSettings(Settings $settings)
132
    {
133
        $this->arrayConfiguration[] = [
134
            "type"    => (string) $settings->getType(),
135
            "options" => $this->serializeOptions($settings)
136
        ];
137
    }
138
139
    /**
140
     * @internal
141
     * @param Section $section
142
     * @return array
143
     */
144
    private function serializeOptions(Section $section) : array
145
    {
146
        $options = [];
147
148
        foreach ($section->iterateOptions() as $option) {
149
            $options[] = [
150
                "name"  => (string) $option->getName(),
151
                "value" => $option->getValue()
152
            ];
153
        }
154
155
        return $options;
156
    }
157
158
    /**
159
     * @var array
160
     */
161
    private $arrayConfiguration = [];
162
163
    /**
164
     * @var Configuration
165
     */
166
    private $objectConfiguration = null;
167
}