summaryrefslogtreecommitdiff
path: root/inc/mailgun/php-http/message/src/Builder
diff options
context:
space:
mode:
Diffstat (limited to 'inc/mailgun/php-http/message/src/Builder')
-rw-r--r--inc/mailgun/php-http/message/src/Builder/ResponseBuilder.php148
1 files changed, 148 insertions, 0 deletions
diff --git a/inc/mailgun/php-http/message/src/Builder/ResponseBuilder.php b/inc/mailgun/php-http/message/src/Builder/ResponseBuilder.php
new file mode 100644
index 0000000..e6933a0
--- /dev/null
+++ b/inc/mailgun/php-http/message/src/Builder/ResponseBuilder.php
@@ -0,0 +1,148 @@
+<?php
+
+namespace Http\Message\Builder;
+
+use Psr\Http\Message\ResponseInterface;
+
+/**
+ * Fills response object with values.
+ */
+class ResponseBuilder
+{
+ /**
+ * The response to be built.
+ *
+ * @var ResponseInterface
+ */
+ protected $response;
+
+ /**
+ * Create builder for the given response.
+ *
+ * @param ResponseInterface $response
+ */
+ public function __construct(ResponseInterface $response)
+ {
+ $this->response = $response;
+ }
+
+ /**
+ * Return response.
+ *
+ * @return ResponseInterface
+ */
+ public function getResponse()
+ {
+ return $this->response;
+ }
+
+ /**
+ * Add headers represented by an array of header lines.
+ *
+ * @param string[] $headers Response headers as array of header lines.
+ *
+ * @return $this
+ *
+ * @throws \UnexpectedValueException For invalid header values.
+ * @throws \InvalidArgumentException For invalid status code arguments.
+ */
+ public function setHeadersFromArray(array $headers)
+ {
+ $status = array_shift($headers);
+ $this->setStatus($status);
+
+ foreach ($headers as $headerLine) {
+ $headerLine = trim($headerLine);
+ if ('' === $headerLine) {
+ continue;
+ }
+
+ $this->addHeader($headerLine);
+ }
+
+ return $this;
+ }
+
+ /**
+ * Add headers represented by a single string.
+ *
+ * @param string $headers Response headers as single string.
+ *
+ * @return $this
+ *
+ * @throws \InvalidArgumentException if $headers is not a string on object with __toString()
+ * @throws \UnexpectedValueException For invalid header values.
+ */
+ public function setHeadersFromString($headers)
+ {
+ if (!(is_string($headers)
+ || (is_object($headers) && method_exists($headers, '__toString')))
+ ) {
+ throw new \InvalidArgumentException(
+ sprintf(
+ '%s expects parameter 1 to be a string, %s given',
+ __METHOD__,
+ is_object($headers) ? get_class($headers) : gettype($headers)
+ )
+ );
+ }
+
+ $this->setHeadersFromArray(explode("\r\n", $headers));
+
+ return $this;
+ }
+
+ /**
+ * Set response status from a status string.
+ *
+ * @param string $statusLine Response status as a string.
+ *
+ * @return $this
+ *
+ * @throws \InvalidArgumentException For invalid status line.
+ */
+ public function setStatus($statusLine)
+ {
+ $parts = explode(' ', $statusLine, 3);
+ if (count($parts) < 2 || strpos(strtolower($parts[0]), 'http/') !== 0) {
+ throw new \InvalidArgumentException(
+ sprintf('"%s" is not a valid HTTP status line', $statusLine)
+ );
+ }
+
+ $reasonPhrase = count($parts) > 2 ? $parts[2] : '';
+ $this->response = $this->response
+ ->withStatus((int) $parts[1], $reasonPhrase)
+ ->withProtocolVersion(substr($parts[0], 5));
+
+ return $this;
+ }
+
+ /**
+ * Add header represented by a string.
+ *
+ * @param string $headerLine Response header as a string.
+ *
+ * @return $this
+ *
+ * @throws \InvalidArgumentException For invalid header names or values.
+ */
+ public function addHeader($headerLine)
+ {
+ $parts = explode(':', $headerLine, 2);
+ if (count($parts) !== 2) {
+ throw new \InvalidArgumentException(
+ sprintf('"%s" is not a valid HTTP header line', $headerLine)
+ );
+ }
+ $name = trim($parts[0]);
+ $value = trim($parts[1]);
+ if ($this->response->hasHeader($name)) {
+ $this->response = $this->response->withAddedHeader($name, $value);
+ } else {
+ $this->response = $this->response->withHeader($name, $value);
+ }
+
+ return $this;
+ }
+}