Passed
Push — master ( e59495...facc33 )
by Isaac
02:07
created

SMSClientRequest::setHttpClient()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 3
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 2
CRAP Score 1

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 3
ccs 2
cts 2
cp 1
crap 1
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Mediumart\Orange\SMS\Http;
4
5
use GuzzleHttp\Client;
6
7
abstract class SMSClientRequest
8
{
9
    /**
10
     * base api uri.
11
     */
12
    const BASE_URI = 'https://api.orange.com';
13
14
    /**
15
     * Describes the SSL certificate verification behavior of a request.
16
     */
17
    protected static $verify_ssl = true;
18
19
    /**
20
     * @var Client
21
     */
22
    protected static $httpClient;
23
24
    /**
25
     * Http request method.
26
     *
27
     * @return string
28
     */
29
    abstract public function method();
30
31
    /**
32
     * The uri for the current request.
33
     *
34
     * @return string
35
     */
36
    abstract public function uri();
37
38
    /**
39
     * Http request options.
40
     *
41
     * @return array
42
     */
43 3
    public function options()
44
    {
45 3
        return [];
46
    }
47
48
    /**
49
     * Set the SSL certificate verification behavior of a request.
50
     *
51
     * @param bool|string $value
52
     * @return $this
53
     */
54 16
    public static function verify($value)
55
    {
56 16
        if (is_bool($value) || is_string($value)) {
57 16
            static::$verify_ssl = $value;
58
        }
59 16
    }
60
61
    /**
62
     * Set the http client.
63
     *
64
     * @param Client $client
65
     */
66 10
    public static function setHttpClient(Client $client)
67
    {
68 10
        static::$httpClient = $client;
69 10
    }
70
71
    /**
72
     * Get the http client.
73
     *
74
     * @return \GuzzleHttp\Client
75
     */
76 11
    public static function getHttpClient()
77
    {
78 11
        if (static::$httpClient &&
79 11
            static::$httpClient->getConfig('verify') === static::$verify_ssl
80
            ) {
81 10
            return static::$httpClient;
82
        }
83
84 1
        return new Client(['http_errors' => false, 'verify' => static::$verify_ssl]);
85
    }
86
87
    /**
88
     * Execute the request.
89
     *
90
     * @param null $options
0 ignored issues
show
Documentation Bug introduced by
Are you sure the doc-type for parameter $options is correct as it would always require null to be passed?
Loading history...
91
     * @return mixed|\Psr\Http\Message\ResponseInterface
92
     */
93 9
    final public function execute($options = null)
94
    {
95
        return $this
96 9
            ->getHttpClient()
97 9
            ->request(
98 9
                $this->method(), 
99 9
                $this->uri(), 
100 9
                $options ?: $this->options()
101
            );
102
    }
103
104
    /**
105
     * Normalize phone number.
106
     *
107
     * @param  $phone
108
     * @return string
109
     */
110 3
    protected function normalizePhoneNumber($phone)
111
    {
112 3
        $phone = (string) $phone;
113
114 3
        if (substr($phone, 0, 1) !== '+') {
115 1
            return '+' . $phone;
116
        }
117
118 3
        return $phone;
119
    }
120
}
121