AbstractClient::getParamValue()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 4

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 4
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 3
1
<?php
2
3
/*
4
 * This file is part of the 2amigos/google-places-library project.
5
 *
6
 * (c) 2amigOS! <http://2amigos.us/>
7
 *
8
 * For the full copyright and license information, please view
9
 * the LICENSE file that was distributed with this source code.
10
 */
11
12
namespace Da\Google\Places\Client;
13
14
use GuzzleHttp\Client as HttpClient;
15
use InvalidArgumentException;
16
use SimpleXMLElement;
17
18
/**
19
 * Class Client is the base class of all objects in library. Handles common requests and Guzzle PHP client initialization.
20
 *
21
 * @author Antonio Ramirez <[email protected]>
22
 *
23
 * @link http://www.ramirezcobos.com/
24
 * @link http://www.2amigos.us/
25
 */
26
class AbstractClient
27
{
28
    /**
29
     * @var string response format. Can be json or xml.
30
     */
31
    protected $format = 'json';
32
    /**
33
     * @var string API endpoint
34
     */
35
    protected $api = 'https://maps.googleapis.com/maps/api/place/{cmd}/{format}';
36
    /**
37
     * @var string your API key
38
     */
39
    protected $key;
40
    /**
41
     * @var \GuzzleHttp\Client a client to make requests to the API
42
     */
43
    protected $guzzle;
44
    /**
45
     * @var bool returns arrays instead of stdObjects on decoding JSON responses
46
     */
47
    protected $forceJsonArrayResponse = false;
48
49
    /**
50
     * AbstractClient constructor.
51
     *
52
     * @param $key
53
     * @param string $format
54
     *
55
     * @throws InvalidArgumentException
56
     */
57
    public function __construct($key, $format = 'json')
58
    {
59
        if (empty($key) || empty($format)) {
60
            throw new InvalidArgumentException('"key" and/or "format" cannot be empty.');
61
        }
62
63
        $this->key = $key;
64
        $this->format = $format;
65
    }
66
67
    /**
68
     * Required for child classes.
69
     *
70
     * @param string $cmd the command
71
     *
72
     * @return string
73
     */
74
    public function getUrl($cmd)
75
    {
76
        return strtr($this->api, ['{cmd}' => $cmd, '{format}' => $this->format]);
77
    }
78
79
    /**
80
     * Sets the flag for decoding JSON method.
81
     *
82
     * @param bool $value
83
     */
84
    public function forceJsonArrayResponse($value = true)
0 ignored issues
show
Unused Code introduced by
The parameter $value is not used and could be removed.

This check looks from parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
85
    {
86
        $this->forceJsonArrayResponse = true;
87
    }
88
89
    /**
90
     * Makes a Url request and returns its response.
91
     *
92
     * @param string $cmd     the command
93
     * @param string $method  the method 'get' or 'post'
94
     * @param array  $params  the parameters to be bound to the call
95
     * @param array  $options the options to be attached to the client
96
     *
97
     * @return mixed|null
98
     */
99
    protected function request($cmd, $method = 'get', $params = [], $options = [])
100
    {
101
        $params = array_merge($params, ['key' => $this->key]);
102
103
        $response = $this->getGuzzleClient()->request(
104
            $method,
105
            $this->getUrl($cmd),
106
            array_merge(['query' => $params], $options)
107
        );
108
109
        if ($response->getStatusCode() === 200) {
110
            return $this->parseResponse($response->getBody()->getContents());
111
        }
112
        return null;
113
    }
114
115
    /**
116
     * Parses response body in json or xml format as specified.
117
     *
118
     * @param string $contents
119
     *
120
     * @return mixed|SimpleXMLElement
121
     */
122
    protected function parseResponse($contents)
123
    {
124
        return $this->format == 'xml' ? new SimpleXMLElement($contents) : json_decode($contents, $this->forceJsonArrayResponse);
125
    }
126
127
    /**
128
     * Returns an option from an array. If not set return default value.
129
     *
130
     * @param array  $options
131
     * @param string $param
132
     * @param mixed  $default
133
     *
134
     * @return mixed|null
135
     */
136
    protected function getParamValue($options, $param, $default = null)
137
    {
138
        return isset($options[$param]) ? $options[$param] : $default;
139
    }
140
141
    /**
142
     * Returns the guzzle client.
143
     *
144
     * @return \GuzzleHttp\Client
145
     */
146
    protected function getGuzzleClient()
147
    {
148
        if ($this->guzzle == null) {
149
            $this->guzzle = new HttpClient();
150
        }
151
152
        return $this->guzzle;
153
    }
154
}
155