Code Coverage
 
Classes and Traits
Functions and Methods
Lines
Total
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
4 / 6
CRAP
57.14% covered (warning)
57.14%
20 / 35
Data
0.00% covered (danger)
0.00%
0 / 1
66.67% covered (warning)
66.67%
4 / 6
23.34
57.14% covered (warning)
57.14%
20 / 35
 __get
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 __set
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
3 / 3
 setCoordinates
100.00% covered (success)
100.00%
1 / 1
2
100.00% covered (success)
100.00%
5 / 5
 service
0.00% covered (danger)
0.00%
0 / 1
20
0.00% covered (danger)
0.00%
0 / 12
 getOnService
0.00% covered (danger)
0.00%
0 / 1
2
0.00% covered (danger)
0.00%
0 / 3
 debugData
100.00% covered (success)
100.00%
1 / 1
1
100.00% covered (success)
100.00%
9 / 9
1<?php
2
3namespace Qmp\Laravel\ApiExternal\Services\Adserving;
4
5use Illuminate\Support\Facades\Log;
6use Qmp\Laravel\MicroService\Client\Tools\Request as ClientRequest;
7use Qmp\Laravel\MicroService\Client\Client;
8
9class Data
10{
11    const SERVICE_ADSERVING_LOCATE = 'SERVICE_ADSERVING_LOCATE';
12    const SERVICE_GEOLOC_IP = 'SERVICE_GEOLOC_IP';
13
14    const URL = 'URL';
15    const IMG = 'IMG';
16
17    const WAITING_MESSAGE = 'wait...';
18
19    protected $data = [
20        'visualId' => null,
21        'index' => null,
22        'ip' => null,
23        'zip_code' => null,
24        'type' => null,
25
26        'input' => null,
27
28        'latitude' => null,
29        'longitude' => null,
30
31    ];
32
33    public function __get($key)
34    {
35        if (array_key_exists($key, $this->data)) {
36            return $this->data[$key];
37        }
38
39        return null;
40    }
41
42    public function __set($key, $value)
43    {
44        if (array_key_exists($key, $this->data)) {
45            $this->data[$key] = $value;
46        }
47    }
48
49    public function setCoordinates($lat, $lon = null)
50    {
51        if (is_array($lat)) {
52            [$this->latitude, $this->longitude] = $lat;
53        } else {
54            $this->latitude = $lat;
55            $this->longitude = $lon;
56        }
57    }
58
59    public function service($type)
60    {
61        switch ($type) {
62            case self::SERVICE_ADSERVING_LOCATE:
63                return $this->getOnService('service_adserving', 'adserving/locate', [
64                    'latitude' => (float) $this->latitude,
65                    'longitude' => (float) $this->longitude,
66                    'visual_id' => (int) $this->visualId,
67                    'index' => (int) $this->index
68                ]);
69            case self::SERVICE_GEOLOC_IP:
70                return $this->getOnService('service_geolocation', 'geoloc', [
71                    'input' => 'ip',
72                    'value' => $this->ip,
73                    'output' => 'coordinates'
74                ]);
75
76            default:
77                return null;
78        }
79    }
80
81    protected function getOnService($service, $url, $query)
82    {
83        $request = ClientRequest::createObject($service, $url, [
84            'query' => $query
85        ]);
86        return Client::systemSend('get', $request);
87    }
88
89    public function debugData(string $message, array $moreData = [])
90    {
91        Log::debug($message . var_export([
92                    'url' => \Request::getRequestUri(),
93                    'input' => $this->input,
94                    'ip' => $this->ip,
95                    'zip_code' => $this->zip_code,
96                    'latitude' => $this->latitude,
97                    'longitude' => $this->longitude,
98                ] + $moreData, true));
99    }
100}