Passed
Push — feature/v4 ( dac4aa...0faea2 )
by Samuel
04:34
created

AutocompleteCoordinateSubscriber   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 58
Duplicated Lines 0 %

Test Coverage

Coverage 48.15%

Importance

Changes 1
Bugs 0 Features 0
Metric Value
wmc 8
eloc 19
c 1
b 0
f 0
dl 0
loc 58
ccs 13
cts 27
cp 0.4815
rs 10

7 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 9 1
A getCoordinateRenderer() 0 3 1
A setCoordinateRenderer() 0 3 1
A getCoordinateCollector() 0 3 1
A setCoordinateCollector() 0 3 1
A getSubscribedEvents() 0 3 1
A handleAutocomplete() 0 11 2
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Ivory Google Map package.
7
 *
8
 * (c) Eric GELOEN <[email protected]>
9
 *
10
 * For the full copyright and license information, please read the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Ivory\GoogleMap\Helper\Subscriber\Place\Base;
15
16
use Ivory\GoogleMap\Helper\Collector\Place\Base\AutocompleteCoordinateCollector;
17
use Ivory\GoogleMap\Helper\Event\PlaceAutocompleteEvent;
18
use Ivory\GoogleMap\Helper\Event\PlaceAutocompleteEvents;
19
use Ivory\GoogleMap\Helper\Formatter\Formatter;
20
use Ivory\GoogleMap\Helper\Renderer\Base\CoordinateRenderer;
21
use Ivory\GoogleMap\Helper\Subscriber\AbstractSubscriber;
22
23
class AutocompleteCoordinateSubscriber extends AbstractSubscriber
24
{
25
    /** @var AutocompleteCoordinateCollector */
26
    private $coordinateCollector;
27
28
    /** @var CoordinateRenderer */
29
    private $coordinateRenderer;
30
31 1
    public function __construct(
32
        Formatter $formatter,
33
        AutocompleteCoordinateCollector $coordinateCollector,
34
        CoordinateRenderer $coordinateRenderer
35
    ) {
36 1
        parent::__construct($formatter);
37
38 1
        $this->setCoordinateCollector($coordinateCollector);
39 1
        $this->setCoordinateRenderer($coordinateRenderer);
40 1
    }
41
42
    public function getCoordinateCollector(): AutocompleteCoordinateCollector
43
    {
44
        return $this->coordinateCollector;
45
    }
46
47 1
    public function setCoordinateCollector(AutocompleteCoordinateCollector $coordinateCollector): void
48
    {
49 1
        $this->coordinateCollector = $coordinateCollector;
50 1
    }
51
52
    public function getCoordinateRenderer(): CoordinateRenderer
53
    {
54
        return $this->coordinateRenderer;
55
    }
56
57 1
    public function setCoordinateRenderer(CoordinateRenderer $coordinateRenderer): void
58
    {
59 1
        $this->coordinateRenderer = $coordinateRenderer;
60 1
    }
61
62
    public function handleAutocomplete(PlaceAutocompleteEvent $event): void
63
    {
64
        $formatter    = $this->getFormatter();
65
        $autocomplete = $event->getAutocomplete();
66
67
        foreach ($this->coordinateCollector->collect($autocomplete) as $coordinate) {
68
            $event->addCode($formatter->renderContainerAssignment(
69
                $autocomplete,
70
                $this->coordinateRenderer->render($coordinate),
71
                'base.coordinates',
72
                $coordinate
73
            ));
74
        }
75
    }
76
77
    /** {@inheritdoc} */
78 1
    public static function getSubscribedEvents(): array
79
    {
80 1
        return [PlaceAutocompleteEvents::JAVASCRIPT_BASE_COORDINATE => 'handleAutocomplete'];
81
    }
82
}
83