From b6d035c9a3fe6996ba48fc5d94760d8d1598bb38 Mon Sep 17 00:00:00 2001 From: Sean Johnson Date: Mon, 20 Feb 2017 13:21:55 -0600 Subject: [PATCH] Add getPagination* concrete functions on Pagination trait (#271) --- src/Mailgun/Api/Pagination.php | 45 ++++++++++++++++++- .../Resource/Api/Event/EventResponse.php | 3 +- src/Mailgun/Resource/Api/PagingProvider.php | 44 ++++++++++++++++++ 3 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 src/Mailgun/Resource/Api/PagingProvider.php diff --git a/src/Mailgun/Api/Pagination.php b/src/Mailgun/Api/Pagination.php index 16f5abd..e6672bb 100644 --- a/src/Mailgun/Api/Pagination.php +++ b/src/Mailgun/Api/Pagination.php @@ -10,6 +10,7 @@ namespace Mailgun\Api; use Mailgun\Assert; +use Mailgun\Resource\Api\PagingProvider; use Psr\Http\Message\ResponseInterface; /** @@ -21,13 +22,53 @@ trait Pagination abstract protected function safeDeserialize(ResponseInterface $response, $className); + /** + * @param PagingProvider $response + * + * @return PagingProvider|null + */ + public function nextPage(PagingProvider $response) + { + return $this->getPaginationUrl($response->getNextUrl(), get_class($response)); + } + + /** + * @param PagingProvider $response + * + * @return PagingProvider|null + */ + public function previousPage(PagingProvider $response) + { + return $this->getPaginationUrl($response->getPreviousUrl(), get_class($response)); + } + + /** + * @param PagingProvider $response + * + * @return PagingProvider|null + */ + public function firstPage(PagingProvider $response) + { + return $this->getPaginationUrl($response->getFirstUrl(), get_class($response)); + } + + /** + * @param PagingProvider $response + * + * @return PagingProvider|null + */ + public function lastPage(PagingProvider $response) + { + return $this->getPaginationUrl($response->getLastUrl(), get_class($response)); + } + /** * @param string $url * @param string $class * - * @return mixed|null + * @return PagingProvider|null */ - public function getPaginationUrl($url, $class) + private function getPaginationUrl($url, $class) { Assert::stringNotEmpty($class); diff --git a/src/Mailgun/Resource/Api/Event/EventResponse.php b/src/Mailgun/Resource/Api/Event/EventResponse.php index 1be8b59..43053a1 100644 --- a/src/Mailgun/Resource/Api/Event/EventResponse.php +++ b/src/Mailgun/Resource/Api/Event/EventResponse.php @@ -9,13 +9,14 @@ namespace Mailgun\Resource\Api\Event; +use Mailgun\Resource\Api\PagingProvider; use Mailgun\Resource\Api\PaginationResponse; use Mailgun\Resource\ApiResponse; /** * @author Tobias Nyholm */ -class EventResponse implements ApiResponse +class EventResponse implements ApiResponse, PagingProvider { use PaginationResponse; diff --git a/src/Mailgun/Resource/Api/PagingProvider.php b/src/Mailgun/Resource/Api/PagingProvider.php new file mode 100644 index 0000000..fe85cfd --- /dev/null +++ b/src/Mailgun/Resource/Api/PagingProvider.php @@ -0,0 +1,44 @@ + + */ +interface PagingProvider +{ + /** + * Returns the `$paging->next` URL. + * + * @return string + */ + public function getNextUrl(); + + /** + * Returns the `$paging->prev` URL. + * + * @return string + */ + public function getPreviousUrl(); + + /** + * Returns the `$paging->first` URL. + * + * @return string + */ + public function getFirstUrl(); + + /** + * Returns the `$paging->last` URL. + * + * @return string + */ + public function getLastUrl(); +}