Completed
Push — master ( 02cef1...375238 )
by ARCANEDEV
12s
created

DistanceMatrixResponse::isOk()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 4
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
dl 0
loc 4
ccs 2
cts 2
cp 1
rs 10
c 0
b 0
f 0
cc 1
eloc 2
nc 1
nop 0
crap 1
1
<?php namespace Arcanedev\GeoLocation\Google\DistanceMatrix;
2
3
use Illuminate\Contracts\Support\Arrayable;
4
use Illuminate\Contracts\Support\Jsonable;
5
use Illuminate\Support\Arr;
6
use JsonSerializable;
7
8
class DistanceMatrixResponse implements Arrayable, Jsonable, JsonSerializable
9
{
10
    /* -----------------------------------------------------------------
11
     |  Properties
12
     | -----------------------------------------------------------------
13
     */
14
15
    /**
16
     * The response's data.
17
     *
18
     * @var  array
19
     */
20
    protected $data = [];
21
22
    /* -----------------------------------------------------------------
23
     |  Constructor
24
     | -----------------------------------------------------------------
25
     */
26
27
    /**
28
     * DistanceMatrixResponse constructor.
29
     *
30
     * @param  array  $data
31
     */
32 39
    public function __construct(array $data = [])
33
    {
34 39
        $this->data = $data;
35 39
    }
36
37
    /* -----------------------------------------------------------------
38
     |  Getters & Setters
39
     | -----------------------------------------------------------------
40
     */
41
42
    /**
43
     * Get the raw response.
44
     *
45
     * @return array
46
     */
47 36
    public function getRaw()
48
    {
49 36
        return $this->data;
50
    }
51
52
    /**
53
     * Get a data with a given key.
54
     *
55
     * @param  string      $key
56
     * @param  mixed|null  $default
57
     *
58
     * @return mixed
59
     */
60 33
    public function get($key, $default = null)
61
    {
62 33
        return Arr::get($this->getRaw(), $key, $default);
63
    }
64
65
    /**
66
     * Get the first origin address.
67
     *
68
     * @return string|null
69
     */
70 15
    public function getOriginAddress()
71
    {
72 15
        return Arr::first($this->getOriginAddresses(), null, null);
73
    }
74
75
    /**
76
     * Get the original addresses.
77
     *
78
     * @return array
79
     */
80 15
    public function getOriginAddresses()
81
    {
82 15
        return $this->get('origin_addresses', []);
83
    }
84
85
    /**
86
     * Get the first destination address.
87
     *
88
     * @return string|null
89
     */
90 15
    public function getDestinationAddress()
91
    {
92 15
        return Arr::first($this->getDestinationAddresses(), null, null);
93
    }
94
95
    /**
96
     * Get the destination addresses.
97
     *
98
     * @return array
99
     */
100 15
    public function getDestinationAddresses()
101
    {
102 15
        return $this->get('destination_addresses', []);
103
    }
104
105
    /**
106
     * Get the distance (text or value).
107
     *
108
     * @param  bool  $text
109
     *
110
     * @return string|int
111
     */
112 18
    public function getDistance($text = true)
113
    {
114 18
        return $this->get('rows.0.elements.0.distance.'. ($text ? 'text' : 'value'));
115
    }
116
117
    /**
118
     * Get the duration (text or value).
119
     *
120
     * @param  bool  $text
121
     *
122
     * @return string|int
123
     */
124 18
    public function getDuration($text = true)
125
    {
126 18
        return $this->get('rows.0.elements.0.duration.'. ($text ? 'text' : 'value'));
127
    }
128
129
    /* -----------------------------------------------------------------
130
     |  Other Methods
131
     | -----------------------------------------------------------------
132
     */
133
134
    /**
135
     * Convert the object to its JSON representation.
136
     *
137
     * @param  int  $options
138
     *
139
     * @return string
140
     */
141 3
    public function toJson($options = 0)
142
    {
143 3
        return json_encode($this->jsonSerialize(), $options);
144
    }
145
146
    /**
147
     * Convert the object into something JSON serializable.
148
     *
149
     * @return array
150
     */
151 3
    public function jsonSerialize()
152
    {
153 3
        return $this->toArray();
154
    }
155
156
    /**
157
     * Convert the object to array.
158
     *
159
     * @return array
160
     */
161 6
    public function toArray()
162
    {
163
        return [
164 6
            'origin'      => $this->getOriginAddress(),
165 6
            'destination' => $this->getDestinationAddress(),
166
            'distance'    => [
167 6
                'text'  => $this->getDistance(),
168 6
                'value' => $this->getDistance(false),
169 2
            ],
170
            'duration'    => [
171 6
                'text'  => $this->getDuration(),
172 6
                'value' => $this->getDuration(false),
173 2
            ],
174 2
        ];
175
    }
176
177
    /**
178
     * Check if the response's status is OK.
179
     *
180
     * @return bool
181
     */
182 6
    public function isOk()
183
    {
184 6
        return $this->get('status') === 'OK';
185
    }
186
}
187