From 912a6c0fd9d518ca802aca370b6c78ee9933295a Mon Sep 17 00:00:00 2001 From: Grzegorz Rola <grola@seostudio.pl> Date: Thu, 30 May 2019 19:39:10 +0000 Subject: [PATCH] Added timeout to options. --- CHANGELOG.md | 3 +++ src/Client/ApiClientOptions.php | 1 - src/Client/ApiClientOptionsTimeout.php | 13 +++++++++++++ src/Client/ClientFactory.php | 3 ++- src/Client/ClientImplementation.php | 21 +++++++++++++-------- tests/unit/Client/TestClientFactory.php | 4 ++++ 6 files changed, 35 insertions(+), 10 deletions(-) create mode 100644 CHANGELOG.md create mode 100644 src/Client/ApiClientOptionsTimeout.php diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..9c0ca1f --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,3 @@ +## [1.1.0] - 2019-05-30 +### Added +- Timeout in api client options interface diff --git a/src/Client/ApiClientOptions.php b/src/Client/ApiClientOptions.php index 34d1683..6decfa7 100644 --- a/src/Client/ApiClientOptions.php +++ b/src/Client/ApiClientOptions.php @@ -33,5 +33,4 @@ interface ApiClientOptions extends HttpClientOptions, SerializerOptions * @return string */ public function getApiClientClass(); - } \ No newline at end of file diff --git a/src/Client/ApiClientOptionsTimeout.php b/src/Client/ApiClientOptionsTimeout.php new file mode 100644 index 0000000..281c0d3 --- /dev/null +++ b/src/Client/ApiClientOptionsTimeout.php @@ -0,0 +1,13 @@ +<?php + +namespace WPDesk\ApiClient\Client; + + +interface ApiClientOptionsTimeout extends ApiClientOptions +{ + /** + * @return int + */ + public function getTimeout(); + +} \ No newline at end of file diff --git a/src/Client/ClientFactory.php b/src/Client/ClientFactory.php index 0cc058e..6d84b7e 100644 --- a/src/Client/ClientFactory.php +++ b/src/Client/ClientFactory.php @@ -24,7 +24,8 @@ class ClientFactory $serializerFactory->createSerializer($options), $options->getLogger(), $options->getApiUrl(), - $options->getDefaultRequestHeaders() + $options->getDefaultRequestHeaders(), + ($options instanceof ApiClientOptionsTimeout)? $options->getTimeout(): null ); if ($options->isCachedClient()) { diff --git a/src/Client/ClientImplementation.php b/src/Client/ClientImplementation.php index f948bec..3777c5a 100644 --- a/src/Client/ClientImplementation.php +++ b/src/Client/ClientImplementation.php @@ -16,8 +16,6 @@ class ClientImplementation implements Client, LoggerAwareInterface { const CLIENT_VERSION = '1.6.5'; - const DEFAULT_TIMEOUT = 10; - const LIBRARY_LOGIN_CONTEXT = 'wp-api-client'; /** @var HttpClient */ @@ -35,6 +33,9 @@ class ClientImplementation implements Client, LoggerAwareInterface /** @var array */ private $defaultRequestHeaders; + /** @var int */ + private $timeout; + /** * Client constructor. * @param HttpClient $client @@ -42,19 +43,22 @@ class ClientImplementation implements Client, LoggerAwareInterface * @param LoggerInterface $logger * @param string $apiUri * @param array $defaultRequestHeaders + * @param int $timeout */ public function __construct( HttpClient $client, Serializer $serializer, LoggerInterface $logger, $apiUri, - array $defaultRequestHeaders + array $defaultRequestHeaders, + $timeout = 10 ) { - $this->client = $client; - $this->serializer = $serializer; - $this->logger = $logger; - $this->apiUrl = $apiUri; + $this->client = $client; + $this->serializer = $serializer; + $this->logger = $logger; + $this->apiUrl = $apiUri; $this->defaultRequestHeaders = $defaultRequestHeaders; + $this->timeout = $timeout; } /** @@ -73,7 +77,8 @@ class ClientImplementation implements Client, LoggerAwareInterface $fullUrl = $this->prepareFullUrl($request), $method = $request->getMethod(), $body = $this->prepareRequestBody($request), - $headers = $this->prepareRequestHeaders($request), self::DEFAULT_TIMEOUT + $headers = $this->prepareRequestHeaders($request), + $this->timeout ); $this->logger->debug( diff --git a/tests/unit/Client/TestClientFactory.php b/tests/unit/Client/TestClientFactory.php index 553524d..6c57654 100644 --- a/tests/unit/Client/TestClientFactory.php +++ b/tests/unit/Client/TestClientFactory.php @@ -43,6 +43,10 @@ class TestClientFactory extends \PHPUnit\Framework\TestCase ->withAnyArgs() ->andReturn($isCachedClient); + $options->shouldReceive('getTimeout') + ->withAnyArgs() + ->andReturn(30); + return $options; } -- GitLab