From 04f900898828b9b8474f55b8f27c9d0c27afefb0 Mon Sep 17 00:00:00 2001 From: Nickolas Burr Date: Sat, 2 Feb 2019 17:14:38 -0500 Subject: [PATCH] Add Http\AbstractRequest, Http\RequestInterface, refactor Http\Request --- Model/Http/AbstractRequest.php | 117 ++++++++++++++++++++++++++++++++ Model/Http/Request.php | 76 +++++---------------- Model/Http/RequestInterface.php | 39 +++++++++++ 3 files changed, 172 insertions(+), 60 deletions(-) create mode 100644 Model/Http/AbstractRequest.php create mode 100644 Model/Http/RequestInterface.php diff --git a/Model/Http/AbstractRequest.php b/Model/Http/AbstractRequest.php new file mode 100644 index 0000000..a532899 --- /dev/null +++ b/Model/Http/AbstractRequest.php @@ -0,0 +1,117 @@ + + * @license MIT License + */ + +namespace AuroraExtensions\MagentoCronCloudFunctions\Model\Http; + +use AuroraExtensions\MagentoCronCloudFunctions\Helper\Cron as CronHelper; +use AuroraExtensions\MagentoCronCloudFunctions\Helper\Dict; +use AuroraExtensions\MagentoCronCloudFunctions\Model\Cron\JobInterface; + +use Magento\Framework\DataObject; +use Zend\Http\Request as HttpRequest; + +abstract class AbstractRequest extends DataObject implements RequestInterface +{ + /** @property CronHelper $cronHelper */ + protected $cronHelper; + + /** @property JobInterface $cronJob */ + protected $cronJob; + + /** @property HeadersInterface $headers */ + protected $headers; + + /** @property HttpRequest $request */ + protected $request; + + /** @property TransportInterface $transport */ + protected $transport; + + /** + * @param CronHelper $cronHelper + * @param JobInterface $cronJob + * @param HeadersInterface $httpHeaders + * @param RequestInterface $httpRequest + * @param TransportInterface $transport + */ + public function __construct( + CronHelper $cronHelper, + JobInterface $cronJob, + HeadersInterface $headers, + HttpRequest $request, + TransportInterface $transport, + array $data = [] + ) { + $this->cronHelper = $cronHelper; + $this->cronJob = $cronJob; + $this->headers = $headers; + $this->request = $request; + $this->transport = $transport; + + parent::__construct($data); + } + + /** + * Get Zend HTTP request object. + * + * @return HttpRequest + */ + public function getHttpRequest() + { + return $this->request; + } + + /** + * Set HTTP headers for request. + * + * @param array $headers + * @return $this + */ + public function setHeaders(array $headers = []) + { + $this->headers->addHeaders($headers); + $this->request->setHeaders($this->headers); + + return $this; + } + + /** + * Set HTTP method for request. + * + * @param string $method + * @return $this + */ + public function setMethod($method) + { + $this->request->setMethod($method); + + return $this; + } + + /** + * Set HTTP endpoint URI. + * + * @param string $uri + * @return $this + */ + public function setUri($uri) + { + $this->request->setUri($uri); + + return $this; + } +} diff --git a/Model/Http/Request.php b/Model/Http/Request.php index 3a30453..0e9a45c 100644 --- a/Model/Http/Request.php +++ b/Model/Http/Request.php @@ -17,53 +17,8 @@ namespace AuroraExtensions\MagentoCronCloudFunctions\Model\Http; -use AuroraExtensions\MagentoCronCloudFunctions\Helper\Cron as CronHelper; -use AuroraExtensions\MagentoCronCloudFunctions\Helper\Dict; -use AuroraExtensions\MagentoCronCloudFunctions\Model\Cron\JobInterface; - -use Zend\Http\Client as HttpClient; -use Zend\Http\Headers as HttpHeaders; -use Zend\Http\Request as HttpRequest; -use Zend\Http\Response as HttpResponse; - -class Request +class Request extends AbstractRequest implements RequestInterface { - /** @property CronHelper $cronHelper */ - protected $cronHelper; - - /** @property JobInterface $cronJob */ - protected $cronJob; - - /** @property HttpClient $httpClient */ - protected $httpClient; - - /** @property HttpHeaders $httpHeaders */ - protected $httpHeaders; - - /** @property HttpRequest $httpRequest */ - protected $httpRequest; - - /** - * @param CronHelper $cronHelper - * @param JobInterface $cronJob - * @param HttpClient $httpClient - * @param HttpHeaders $httpHeaders - * @param HttpRequest $request - */ - public function __construct( - CronHelper $cronHelper, - JobInterface $cronJob, - HttpClient $httpClient, - HttpHeaders $httpHeaders, - HttpRequest $httpRequest - ) { - $this->cronHelper = $cronHelper; - $this->cronJob = $cronJob; - $this->httpClient = $httpClient; - $this->httpHeaders = $httpHeaders; - $this->httpRequest = $httpRequest; - } - /** * Trigger Cloud Functions HTTP endpoint. * @@ -72,23 +27,24 @@ public function __construct( */ public function execute() { - /** @var string $endpointUrl */ - $endpointUrl = $this->cronHelper->getEndpointUrl($this->cronJob->getJobCode()); + /** @var string $httpEndpoint */ + $httpEndpoint = $this->cronHelper->getEndpointUrl($this->cronJob->getJobCode()); - $this->httpHeaders->addHeaders([ - 'Accept' => 'application/json', - 'Content-Type' => 'application/json', - ]); + if ($this->hasData('headers')) { + $this->setHeaders($this->getData('headers')); + } else { + $this->setHeaders(Headers::$defaultHeaders); + } - $this->httpRequest->setHeaders($this->httpHeaders); - $this->httpRequest->setUri($endpointUrl); - $this->httpRequest->setMethod($this->cronJob->getHttpMethod()); + $this->setMethod($this->cronJob->getHttpMethod()); + $this->setUri($httpEndpoint); - $this->httpClient->setOptions([ - 'adapter' => HttpClient\Adapter\Curl::class, - 'timeout' => 30, - ]); + if ($this->hasData('options')) { + $this->transport->setOptions($this->getData('options')); + } else { + $this->transport->setOptions(Transport::$defaultOptions); + } - $this->httpClient->send($this->httpRequest); + $this->transport->send($this); } } diff --git a/Model/Http/RequestInterface.php b/Model/Http/RequestInterface.php new file mode 100644 index 0000000..545b36f --- /dev/null +++ b/Model/Http/RequestInterface.php @@ -0,0 +1,39 @@ + + * @license MIT License + */ + +namespace AuroraExtensions\MagentoCronCloudFunctions\Model\Http; + +interface RequestInterface +{ + /** + * @param array $headers + * @return $this + */ + public function setHeaders(array $headers); + + /** + * @param string $method + * @return $this + */ + public function setMethod($method); + + /** + * @param string $uri + * @return $this + */ + public function setUri($uri); +}