ApiHelperBuilder::createSubscribers()   B
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 74

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 48
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 74
ccs 48
cts 48
cp 1
rs 8.5672
c 0
b 0
f 0
cc 1
nc 1
nop 0
crap 1

How to fix   Long Method   

Long Method

Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.

For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.

Commonly applied refactorings include:

1
<?php
2
3
/*
4
 * This file is part of the Ivory Google Map package.
5
 *
6
 * (c) Eric GELOEN <[email protected]>
7
 *
8
 * For the full copyright and license information, please read the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Ivory\GoogleMap\Helper\Builder;
13
14
use Ivory\GoogleMap\Helper\ApiHelper;
15
use Ivory\GoogleMap\Helper\Collector\Layer\HeatmapLayerCollector;
16
use Ivory\GoogleMap\Helper\Collector\Overlay\EncodedPolylineCollector;
17
use Ivory\GoogleMap\Helper\Collector\Overlay\InfoBoxCollector;
18
use Ivory\GoogleMap\Helper\Collector\Overlay\MarkerCollector;
19
use Ivory\GoogleMap\Helper\Formatter\Formatter;
20
use Ivory\GoogleMap\Helper\Renderer\ApiInitRenderer;
21
use Ivory\GoogleMap\Helper\Renderer\ApiRenderer;
22
use Ivory\GoogleMap\Helper\Renderer\Control\ControlManagerRenderer;
23
use Ivory\GoogleMap\Helper\Renderer\Geometry\EncodingRenderer;
24
use Ivory\GoogleMap\Helper\Renderer\Html\JavascriptTagRenderer;
25
use Ivory\GoogleMap\Helper\Renderer\Html\TagRenderer;
26
use Ivory\GoogleMap\Helper\Renderer\Layer\HeatmapLayerRenderer;
27
use Ivory\GoogleMap\Helper\Renderer\LoaderRenderer;
28
use Ivory\GoogleMap\Helper\Renderer\MapRenderer;
29
use Ivory\GoogleMap\Helper\Renderer\MapTypeIdRenderer;
30
use Ivory\GoogleMap\Helper\Renderer\Overlay\EncodedPolylineRenderer;
31
use Ivory\GoogleMap\Helper\Renderer\Overlay\InfoBoxRenderer;
32
use Ivory\GoogleMap\Helper\Renderer\Overlay\MarkerClustererRenderer;
33
use Ivory\GoogleMap\Helper\Renderer\Place\AutocompleteRenderer;
34
use Ivory\GoogleMap\Helper\Renderer\Utility\CallbackRenderer;
35
use Ivory\GoogleMap\Helper\Renderer\Utility\RequirementLoaderRenderer;
36
use Ivory\GoogleMap\Helper\Renderer\Utility\RequirementRenderer;
37
use Ivory\GoogleMap\Helper\Renderer\Utility\SourceRenderer;
38
use Ivory\GoogleMap\Helper\Subscriber\ApiJavascriptSubscriber;
39
use Ivory\GoogleMap\Helper\Subscriber\Layer\HeatmapLayerSubscriber;
40
use Ivory\GoogleMap\Helper\Subscriber\MapJavascriptSubscriber;
41
use Ivory\GoogleMap\Helper\Subscriber\Overlay\EncodedPolylineSubscriber;
42
use Ivory\GoogleMap\Helper\Subscriber\Overlay\InfoBoxSubscriber;
43
use Ivory\GoogleMap\Helper\Subscriber\Overlay\MarkerClustererSubscriber;
44
use Ivory\GoogleMap\Helper\Subscriber\Place\AutocompleteJavascriptSubscriber;
45
use Ivory\JsonBuilder\JsonBuilder;
46
47
/**
48
 * @author GeLo <[email protected]>
49
 */
50
class ApiHelperBuilder extends AbstractJavascriptHelperBuilder
51
{
52
    /**
53
     * @var string
54
     */
55
    private $language;
56
57
    /**
58
     * @param string      $language
59
     * @param string|null $key
60
     */
61 20
    public function __construct(
62
        Formatter $formatter = null,
63
        JsonBuilder $jsonBuilder = null,
64
        $language = 'en',
65
        $key = null
66
    ) {
67 20
        parent::__construct($formatter, $jsonBuilder);
68
69 20
        $this->setLanguage($language);
70 20
        $this->setKey($key);
71 20
    }
72
73
    /**
74
     * @return string
75
     */
76 8
    public function getLanguage()
77
    {
78 8
        return $this->language;
79
    }
80
81
    /**
82
     * @param string $language
83
     *
84
     * @return $this
85
     */
86 20
    public function setLanguage($language)
87
    {
88 20
        $this->language = $language;
89
90 20
        return $this;
91
    }
92
93
    /**
94
     * @return ApiHelper
95
     */
96 4
    public function build()
97
    {
98 4
        return new ApiHelper($this->createEventDispatcher());
99
    }
100
101
    /**
102
     * {@inheritdoc}
103
     */
104 4
    protected function createSubscribers()
105
    {
106 4
        $formatter = $this->getFormatter();
107 4
        $jsonBuilder = $this->getJsonBuilder();
108
109
        // Layer collectors
110 4
        $heatmapLayerCollector = new HeatmapLayerCollector();
111
112
        // Overlay collectors
113 4
        $encodedPolylineCollector = new EncodedPolylineCollector();
114 4
        $markerCollector = new MarkerCollector();
115 4
        $infoBoxCollector = new InfoBoxCollector($markerCollector);
116
117
        // Control renderers
118 4
        $controlManagerRenderer = new ControlManagerRenderer();
119
120
        // Layer renderers
121 4
        $heatmapLayerRenderer = new HeatmapLayerRenderer($formatter, $jsonBuilder);
122
123
        // Utility renderers
124 4
        $callbackRenderer = new CallbackRenderer($formatter);
125 4
        $loaderRenderer = new LoaderRenderer($formatter, $jsonBuilder, $this->language, $this->key);
126 4
        $requirementLoaderRenderer = new RequirementLoaderRenderer($formatter);
127 4
        $requirementRenderer = new RequirementRenderer($formatter);
128 4
        $sourceRenderer = new SourceRenderer($formatter);
129
130
        // Map renderers
131 4
        $mapTypeIdRenderer = new MapTypeIdRenderer($formatter);
132 4
        $mapRenderer = new MapRenderer(
133 4
            $formatter,
134 3
            $jsonBuilder,
135 3
            $mapTypeIdRenderer,
136 3
            $controlManagerRenderer,
137 3
            $requirementRenderer
138
        );
139
140
        // Overlay renderers
141 4
        $encodingRenderer = new EncodingRenderer($formatter);
142 4
        $encodedPolylineRenderer = new EncodedPolylineRenderer($formatter, $jsonBuilder, $encodingRenderer);
143 4
        $infoBoxRenderer = new InfoBoxRenderer($formatter, $jsonBuilder, $requirementRenderer);
144 4
        $markerClustererRenderer = new MarkerClustererRenderer($formatter, $jsonBuilder, $requirementRenderer);
145
146
        // Place renderers
147 4
        $autocompleteRenderer = new AutocompleteRenderer($formatter, $jsonBuilder, $requirementRenderer);
148
149
        // Html renderers
150 4
        $tagRenderer = new TagRenderer($formatter);
151 4
        $javascriptTagRenderer = new JavascriptTagRenderer($formatter, $tagRenderer);
152
153
        // Api renderers
154 4
        $apiInitRenderer = new ApiInitRenderer($formatter);
155 4
        $apiRenderer = new ApiRenderer(
156 4
            $formatter,
157 3
            $apiInitRenderer,
158 3
            $loaderRenderer,
159 3
            $requirementLoaderRenderer,
160 3
            $sourceRenderer
161
        );
162
163 4
        return array_merge([
164 4
            new ApiJavascriptSubscriber($formatter, $apiRenderer, $javascriptTagRenderer),
165 4
            new AutocompleteJavascriptSubscriber(
166 4
                $formatter,
167 3
                $autocompleteRenderer,
168 3
                $callbackRenderer,
169 3
                $javascriptTagRenderer
170
            ),
171 4
            new EncodedPolylineSubscriber($formatter, $encodedPolylineCollector, $encodedPolylineRenderer),
172 4
            new HeatmapLayerSubscriber($formatter, $heatmapLayerCollector, $heatmapLayerRenderer),
173 4
            new InfoBoxSubscriber($formatter, $infoBoxCollector, $infoBoxRenderer),
174 4
            new MapJavascriptSubscriber($formatter, $mapRenderer, $callbackRenderer, $javascriptTagRenderer),
175 4
            new MarkerClustererSubscriber($formatter, $markerClustererRenderer),
176 4
        ], parent::createSubscribers());
177
    }
178
}
179