Conditions | 25 |
Paths | 7560 |
Total Lines | 179 |
Code Lines | 93 |
Lines | 29 |
Ratio | 16.2 % |
Changes | 0 |
Small methods make your code easier to understand, in particular if combined with a good name. Besides, if your method is small, finding a good name is usually much easier.
For example, if you find yourself adding comments to a method's body, this is usually a good sign to extract the commented part to a new method, and use the comment as a starting point when coming up with a good name for this new method.
Commonly applied refactorings include:
If many parameters/temporary variables are present:
1 | <?php |
||
416 | public function request(string $url, string $method = Request::METHOD_GET, array $postFields = [], |
||
417 | string $apiUrl = null): array |
||
418 | { |
||
419 | /** Building url */ |
||
420 | if (null === $apiUrl) { |
||
421 | $apiUrl = $this->getApiUrl(); |
||
422 | } |
||
423 | $url = $apiUrl . $url; |
||
424 | $query = []; |
||
425 | |||
426 | /** |
||
427 | * OAuth2 Key/Secret authentication |
||
428 | * |
||
429 | * @see https://developer.github.com/v3/#oauth2-keysecret |
||
430 | */ |
||
431 | if (null !== $this->getClientId() && null !== $this->getClientSecret()) { |
||
432 | $query['client_id'] = $this->getClientId(); |
||
433 | $query['client_secret'] = $this->getClientSecret(); |
||
434 | } /** |
||
435 | * Basic authentication via OAuth2 Token (sent as a parameter) |
||
436 | * |
||
437 | * @see https://developer.github.com/v3/#oauth2-token-sent-as-a-parameter |
||
438 | */ else if ($this->getAuthentication() === self::OAUTH2_PARAMETERS_AUTH) { |
||
439 | $query['access_token'] = $this->getToken(); |
||
440 | } |
||
441 | |||
442 | /** |
||
443 | * Pagination |
||
444 | * Requests that return multiple items will be paginated to 30 items by default. |
||
445 | * You can specify further pages with the ?page parameter. |
||
446 | * For some resources, you can also set a custom page size up to 100 with the ?per_page parameter. |
||
447 | * Note that for technical reasons not all endpoints respect the ?per_page parameter, |
||
448 | * |
||
449 | * @see https://developer.github.com/v3/#pagination |
||
450 | */ |
||
451 | if (null !== $this->getPagination()) { |
||
452 | if (null !== $this->getPagination()->getPage()) { |
||
453 | $query['page'] = $this->getPagination()->getPage(); |
||
454 | } |
||
455 | if (null !== $this->getPagination()->getLimit()) { |
||
456 | $query['per_page'] = $this->getPagination()->getLimit(); |
||
457 | } |
||
458 | } |
||
459 | |||
460 | /** |
||
461 | * Add URL-encoded query string parameters |
||
462 | */ |
||
463 | if (!empty($query)) { |
||
464 | $url .= (strstr($url, '?') !== false ? '&' : '?'); |
||
465 | $url .= http_build_query($query); |
||
466 | } |
||
467 | |||
468 | /** Call curl */ |
||
469 | $curl = new CurlClient(); |
||
470 | $curl->setOption([ |
||
471 | CURLOPT_USERAGENT => self::USER_AGENT, |
||
472 | CURLOPT_TIMEOUT => $this->getTimeout(), |
||
473 | CURLOPT_HEADER => false, // Use $client->getHeaders() to get full header |
||
474 | CURLOPT_FOLLOWLOCATION => true, |
||
475 | CURLOPT_HTTPHEADER => [ |
||
476 | 'Accept: ' . $this->getAccept(), |
||
477 | 'Content-Type: ' . $this->getContentType() |
||
478 | ], |
||
479 | CURLOPT_URL => $url |
||
480 | ]); |
||
481 | |||
482 | /** |
||
483 | * Basic authentication via username and Password |
||
484 | * |
||
485 | * @see https://developer.github.com/v3/auth/#via-username-and-password |
||
486 | */ |
||
487 | if (!empty($this->getHttpAuth())) { |
||
488 | if (!isset($this->getHttpAuth()['password']) || empty($this->getHttpAuth()['password'])) { |
||
489 | $curl->setOption([ |
||
490 | CURLOPT_HTTPAUTH => CURLAUTH_BASIC, |
||
491 | CURLOPT_USERPWD => $this->getHttpAuth()['username'] |
||
492 | ]); |
||
493 | } else { |
||
494 | $curl->setOption([ |
||
495 | CURLOPT_HTTPAUTH => CURLAUTH_BASIC, |
||
496 | CURLOPT_USERPWD => sprintf('%s:%s', $this->getHttpAuth()['username'], |
||
497 | $this->getHttpAuth()['password']) |
||
498 | ]); |
||
499 | } |
||
500 | } |
||
501 | |||
502 | if (!empty($this->getToken()) && $this->getAuthentication() !== self::OAUTH2_PARAMETERS_AUTH) { |
||
503 | /** |
||
504 | * Basic authentication via OAuth token |
||
505 | * |
||
506 | * @see https://developer.github.com/v3/auth/#via-oauth-tokens |
||
507 | **/ |
||
508 | if ($this->getAuthentication() === self::OAUTH_AUTH) { |
||
509 | $curl->setOption([ |
||
510 | CURLOPT_HTTPAUTH => CURLAUTH_BASIC, |
||
511 | CURLOPT_USERPWD => sprintf('%s:x-oauth-basic', $this->getToken()) |
||
512 | ]); |
||
513 | } /** |
||
514 | * Basic authentication via OAuth2 Token (sent in a header) |
||
515 | * |
||
516 | * @see https://developer.github.com/v3/#oauth2-token-sent-in-a-header |
||
517 | */ else if ($this->getAuthentication() === self::OAUTH2_HEADER_AUTH) { |
||
518 | $curl->setOption([ |
||
519 | CURLOPT_HTTPAUTH => CURLAUTH_BASIC, |
||
520 | CURLOPT_HTTPHEADER => [sprintf('Authorization: token %s', $this->getToken())] |
||
521 | ]); |
||
522 | } |
||
523 | } |
||
524 | |||
525 | /** Methods */ |
||
526 | switch ($method) { |
||
527 | /** @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7 */ |
||
528 | case Request::METHOD_DELETE: |
||
|
|||
529 | /** @see http://tools.ietf.org/html/rfc5789 */ |
||
530 | View Code Duplication | case Request::METHOD_PATCH: |
|
531 | $curl->setOption([ |
||
532 | CURLOPT_CUSTOMREQUEST => $method, |
||
533 | CURLOPT_POST => true, |
||
534 | CURLOPT_POSTFIELDS => json_encode(array_filter($postFields)) |
||
535 | ]); |
||
536 | break; |
||
537 | |||
538 | /** @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.3 */ |
||
539 | case Request::METHOD_GET: |
||
540 | $curl->setOption(CURLOPT_HTTPGET, true); |
||
541 | break; |
||
542 | |||
543 | /** @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.4 */ |
||
544 | case Request::METHOD_HEAD: |
||
545 | $curl->setOption([ |
||
546 | CURLOPT_CUSTOMREQUEST => $method, |
||
547 | CURLOPT_NOBODY => true |
||
548 | ]); |
||
549 | break; |
||
550 | |||
551 | /** @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.5 */ |
||
552 | View Code Duplication | case Request::METHOD_POST: |
|
553 | $curl->setOption([ |
||
554 | CURLOPT_POST => true, |
||
555 | CURLOPT_POSTFIELDS => json_encode(array_filter($postFields)) |
||
556 | ]); |
||
557 | break; |
||
558 | |||
559 | /** @see http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6 */ |
||
560 | case Request::METHOD_PUT: |
||
561 | $curl->setOption([ |
||
562 | CURLOPT_CUSTOMREQUEST => $method, |
||
563 | CURLOPT_PUT => true, |
||
564 | CURLOPT_HTTPHEADER => [ |
||
565 | 'X-HTTP-Method-Override: PUT', |
||
566 | 'Content-type: application/x-www-form-urlencoded' |
||
567 | ] |
||
568 | ]); |
||
569 | break; |
||
570 | |||
571 | default: |
||
572 | break; |
||
573 | } |
||
574 | |||
575 | View Code Duplication | $curl->success(function (CurlClient $instance) { |
|
576 | $this->headers = $instance->getHeaders(); |
||
577 | $this->success = $instance->getResponse(); |
||
578 | $data = json_decode($this->success, true); |
||
579 | if (JSON_ERROR_NONE === json_last_error()) { |
||
580 | $this->success = $data; |
||
581 | } |
||
582 | }); |
||
583 | View Code Duplication | $curl->error(function (CurlClient $instance) { |
|
584 | $this->headers = $instance->getHeaders(); |
||
585 | $this->failure = $instance->getResponse(); |
||
586 | $data = json_decode($this->failure, true); |
||
587 | if (JSON_ERROR_NONE === json_last_error()) { |
||
588 | $this->failure = $data; |
||
589 | } |
||
590 | }); |
||
591 | $curl->perform(); |
||
592 | |||
593 | return (array)($this->success ?? $this->failure); |
||
594 | } |
||
595 | |||
634 | } |