Test Failed
Push — v1.x ( 57dbf3...0b07dc )
by Zbigniew
03:17
created

AbstractApi   A

Complexity

Total Complexity 24

Size/Duplication

Total Lines 270
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 3

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
wmc 24
lcom 1
cbo 3
dl 0
loc 270
ccs 71
cts 71
cp 1
rs 10
c 0
b 0
f 0

20 Methods

Rating   Name   Duplication   Size   Complexity  
A __construct() 0 17 2
A getContactResource() 0 7 1
A getUserResource() 0 7 1
A getGroupResource() 0 7 1
A getInvitationResource() 0 7 1
A getAccountResource() 0 7 1
A getWorkflowResource() 0 7 1
A getCustomFieldResource() 0 7 1
A getFolderResource() 0 7 1
A getTaskResource() 0 7 1
A getCommentResource() 0 7 1
A getDependencyResource() 0 7 1
A getTimelogResource() 0 7 1
A getTimelogCategoryResource() 0 7 1
A getAttachmentResource() 0 7 1
A getVersionResource() 0 7 1
A getIdResource() 0 7 1
A getColorResource() 0 7 1
A normalizeParams() 0 10 4
A getResource() 0 9 1
1
<?php
2
3
/*
4
 * This file is part of the zibios/wrike-php-library package.
5
 *
6
 * (c) Zbigniew Ślązak
7
 *
8
 * For the full copyright and license information, please view the LICENSE
9
 * file that was distributed with this source code.
10
 */
11
12
namespace Zibios\WrikePhpLibrary;
13
14
use Zibios\WrikePhpLibrary\Client\ClientInterface;
15
use Zibios\WrikePhpLibrary\Resource\AbstractResource;
16
use Zibios\WrikePhpLibrary\Resource\AccountResource;
17
use Zibios\WrikePhpLibrary\Resource\AttachmentResource;
18
use Zibios\WrikePhpLibrary\Resource\ColorResource;
19
use Zibios\WrikePhpLibrary\Resource\CommentResource;
20
use Zibios\WrikePhpLibrary\Resource\ContactResource;
21
use Zibios\WrikePhpLibrary\Resource\CustomFieldResource;
22
use Zibios\WrikePhpLibrary\Resource\DependencyResource;
23
use Zibios\WrikePhpLibrary\Resource\FolderResource;
24
use Zibios\WrikePhpLibrary\Resource\GroupResource;
25
use Zibios\WrikePhpLibrary\Resource\IdResource;
26
use Zibios\WrikePhpLibrary\Resource\InvitationResource;
27
use Zibios\WrikePhpLibrary\Resource\TaskResource;
28
use Zibios\WrikePhpLibrary\Resource\TimelogCategoryResource;
29
use Zibios\WrikePhpLibrary\Resource\TimelogResource;
30
use Zibios\WrikePhpLibrary\Resource\UserResource;
31
use Zibios\WrikePhpLibrary\Resource\VersionResource;
32
use Zibios\WrikePhpLibrary\Resource\WorkflowResource;
33
use Zibios\WrikePhpLibrary\Transformer\ApiExceptionTransformerInterface;
34
use Zibios\WrikePhpLibrary\Transformer\ResponseTransformerInterface;
35
use Zibios\WrikePhpLibrary\Validator\AccessTokenValidator;
36
37
/**
38
 * Abstract for General Wrike Api.
39
 *
40
 * Entry point for all Wrike API operations.
41
 *
42
 * @SuppressWarnings(PHPMD.CouplingBetweenObjects)
43
 */
44
abstract class AbstractApi implements ApiInterface
45
{
46
    const BASE_URI = 'https://www.wrike.com/api/v3/';
47
48
    /**
49
     * @var ClientInterface
50
     */
51
    protected $client;
52
53
    /**
54
     * @var string
55
     */
56
    protected $accessToken = '';
57
58
    /**
59
     * @var ResponseTransformerInterface
60
     */
61
    protected $responseTransformer;
62
63
    /**
64
     * @var ApiExceptionTransformerInterface
65
     */
66
    protected $apiExceptionTransformer;
67
68
    /**
69
     * Api constructor.
70
     *
71
     * @param ClientInterface                  $client
72
     * @param ResponseTransformerInterface     $responseTransformer
73
     * @param ApiExceptionTransformerInterface $apiExceptionTransformer
74
     * @param string                           $accessToken
75
     *
76
     * @throws \InvalidArgumentException
77
     */
78 32
    public function __construct(
79
        ClientInterface $client,
80
        ResponseTransformerInterface $responseTransformer,
81
        ApiExceptionTransformerInterface $apiExceptionTransformer,
82
        $accessToken = ''
83
    ) {
84 32
        AccessTokenValidator::assertIsValidOrEmpty($accessToken);
85
86 32
        if (false === $responseTransformer->isSupportedResponseFormat($client->getResponseFormat())) {
87 1
            throw new \InvalidArgumentException('Client not compatible with response transformer!');
88
        }
89
90 32
        $this->client = $client;
91 32
        $this->responseTransformer = $responseTransformer;
92 32
        $this->apiExceptionTransformer = $apiExceptionTransformer;
93 32
        $this->accessToken = $accessToken;
94 32
    }
95
96
    /**
97
     * @return ContactResource
98
     */
99 1
    public function getContactResource()
100
    {
101
        /** @var ContactResource $resource */
102 1
        $resource = $this->getResource(ContactResource::class);
103
104 1
        return $resource;
105
    }
106
107
    /**
108
     * @return UserResource
109
     */
110 1
    public function getUserResource()
111
    {
112
        /** @var UserResource $resource */
113 1
        $resource = $this->getResource(UserResource::class);
114
115 1
        return $resource;
116
    }
117
118
    /**
119
     * @return GroupResource
120
     */
121 1
    public function getGroupResource()
122
    {
123
        /** @var GroupResource $resource */
124 1
        $resource = $this->getResource(GroupResource::class);
125
126 1
        return $resource;
127
    }
128
129
    /**
130
     * @return InvitationResource
131
     */
132 1
    public function getInvitationResource()
133
    {
134
        /** @var InvitationResource $resource */
135 1
        $resource = $this->getResource(InvitationResource::class);
136
137 1
        return $resource;
138
    }
139
140
    /**
141
     * @return AccountResource
142
     */
143 1
    public function getAccountResource()
144
    {
145
        /** @var AccountResource $resource */
146 1
        $resource = $this->getResource(AccountResource::class);
147
148 1
        return $resource;
149
    }
150
151
    /**
152
     * @return WorkflowResource
153
     */
154 1
    public function getWorkflowResource()
155
    {
156
        /** @var WorkflowResource $resource */
157 1
        $resource = $this->getResource(WorkflowResource::class);
158
159 1
        return $resource;
160
    }
161
162
    /**
163
     * @return CustomFieldResource
164
     */
165 1
    public function getCustomFieldResource()
166
    {
167
        /** @var CustomFieldResource $resource */
168 1
        $resource = $this->getResource(CustomFieldResource::class);
169
170 1
        return $resource;
171
    }
172
173
    /**
174
     * @return FolderResource
175
     */
176 1
    public function getFolderResource()
177
    {
178
        /** @var FolderResource $resource */
179 1
        $resource = $this->getResource(FolderResource::class);
180
181 1
        return $resource;
182
    }
183
184
    /**
185
     * @return TaskResource
186
     */
187 1
    public function getTaskResource()
188
    {
189
        /** @var TaskResource $resource */
190 1
        $resource = $this->getResource(TaskResource::class);
191
192 1
        return $resource;
193
    }
194
195
    /**
196
     * @return CommentResource
197
     */
198 1
    public function getCommentResource()
199
    {
200
        /** @var CommentResource $resource */
201 1
        $resource = $this->getResource(CommentResource::class);
202
203 1
        return $resource;
204
    }
205
206
    /**
207
     * @return DependencyResource
208
     */
209 1
    public function getDependencyResource()
210
    {
211
        /** @var DependencyResource $resource */
212 1
        $resource = $this->getResource(DependencyResource::class);
213
214 1
        return $resource;
215
    }
216
217
    /**
218
     * @return TimelogResource
219
     */
220 1
    public function getTimelogResource()
221
    {
222
        /** @var TimelogResource $resource */
223 1
        $resource = $this->getResource(TimelogResource::class);
224
225 1
        return $resource;
226
    }
227
228
    /**
229
     * @return TimelogCategoryResource
230
     */
231 1
    public function getTimelogCategoryResource()
232
    {
233
        /** @var TimelogCategoryResource $resource */
234 1
        $resource = $this->getResource(TimelogCategoryResource::class);
235
236 1
        return $resource;
237
    }
238
239
    /**
240
     * @return AttachmentResource
241
     */
242 1
    public function getAttachmentResource()
243
    {
244
        /** @var AttachmentResource $resource */
245 1
        $resource = $this->getResource(AttachmentResource::class);
246
247 1
        return $resource;
248
    }
249
250
    /**
251
     * @return VersionResource
252
     */
253 1
    public function getVersionResource()
254
    {
255
        /** @var VersionResource $resource */
256 1
        $resource = $this->getResource(VersionResource::class);
257
258 1
        return $resource;
259
    }
260
261
    /**
262
     * @return IdResource
263
     */
264 1
    public function getIdResource()
265
    {
266
        /** @var IdResource $resource */
267 1
        $resource = $this->getResource(IdResource::class);
268
269 1
        return $resource;
270
    }
271
272
    /**
273
     * @return ColorResource
274
     */
275 1
    public function getColorResource()
276
    {
277
        /** @var ColorResource $resource */
278 1
        $resource = $this->getResource(ColorResource::class);
279
280 1
        return $resource;
281
    }
282
283
    /**
284
     * @param array $params
285
     *
286
     * @return array
287
     */
288 1
    public function normalizeParams(array $params)
289
    {
290 1
        foreach ($params as $key => $value) {
291 1
            if (false === \is_string($value) && false === \is_resource($value)) {
292 1
                $params[$key] = json_encode($value);
293
            }
294
        }
295
296 1
        return $params;
297
    }
298
299
    /**
300
     * @param string $resourceClass
301
     *
302
     * @return AbstractResource
303
     */
304 17
    private function getResource($resourceClass)
305
    {
306 17
        return new $resourceClass(
307 17
            $this->client,
308 17
            $this->responseTransformer,
309 17
            $this->apiExceptionTransformer,
310 17
            $this->accessToken
311
        );
312
    }
313
}
314