PHPixie/HTTP

View on GitHub
src/PHPixie/HTTP/Messages.php

Summary

Maintainability
B
4 hrs
Test Coverage
<?php

namespace PHPixie\HTTP;
use Psr\Http\Message\StreamInterface;
use Psr\Http\Message\UriInterface;

/**
 * Factory for PSR-7 implementations
 */
class Messages
{
    /**
     * Build a PSR-7 message
     * @param $protocolVersion
     * @param $headers
     * @param $body
     * @return Messages\Message\Implementation
     */
    public function message($protocolVersion, $headers, $body)
    {
        return new Messages\Message\Implementation(
            $protocolVersion,
            $headers,
            $body
        );
    }

    /**
     * Build a PSR-7 request
     * @param $protocolVersion
     * @param $headers
     * @param $body
     * @param $method
     * @param $uri
     * @return Messages\Message\Request\Implementation
     */
    public function request($protocolVersion, $headers, $body, $method, $uri)
    {
        return new Messages\Message\Request\Implementation(
            $protocolVersion,
            $headers,
            $body,
            $method,
            $uri
        );
    }

    /**
     * Build a PSR-7 serverRequest
     * @param string            $protocolVersion
     * @param array             $headers
     * @param StreamInterface   $body
     * @param string            $method
     * @param UriInterface      $uri
     * @param array             $serverParams
     * @param array             $queryParams
     * @param null|array|object $parsedBody
     * @param array             $cookieParams
     * @param array             $uploadedFiles
     * @param array             $attributes
     * @return Messages\Message\Request\ServerRequest\Implementation
     */
    public function serverRequest(
        $protocolVersion,
        $headers,
        $body,
        $method,
        $uri,
        $serverParams,
        $queryParams,
        $parsedBody,
        $cookieParams,
        $uploadedFiles,
        $attributes = array()
    ) {
        return new Messages\Message\Request\ServerRequest\Implementation(
            $protocolVersion,
            $headers,
            $body,
            $method,
            $uri,
            $serverParams,
            $queryParams,
            $parsedBody,
            $cookieParams,
            $uploadedFiles,
            $attributes
        );
    }

    /**
     * Build a server request from SAPI,
     * with the ability to override individual attributes
     * @param array|null $server
     * @param array|null $get
     * @param array|null $post
     * @param array|null $cookie
     * @param array|null $files
     * @param array      $attributes
     * @return Messages\Message\Request\ServerRequest\SAPI
     */
    public function sapiServerRequest(
        $server = null,
        $get = null,
        $post = null,
        $cookie = null,
        $files = null,
        $attributes = array()
    ) {
        return new Messages\Message\Request\ServerRequest\SAPI(
            $this,
            $server !== null ? $server : $_SERVER,
            $get !== null ? $get : $_GET,
            $post !== null ? $post : $_POST,
            $cookie !== null ? $cookie : $_COOKIE,
            $files !== null ? $files : $_FILES,
            $attributes
        );
    }

    /**
     * Build a PSR-7 response
     * @param string          $protocolVersion
     * @param array           $headers
     * @param StreamInterface $body
     * @param int             $statusCode
     * @param string|null     $reasonPhrase
     * @return Messages\Message\Response
     */
    public function response($protocolVersion, $headers, $body, $statusCode = 200, $reasonPhrase = null)
    {
        return new Messages\Message\Response(
            $protocolVersion,
            $headers,
            $body,
            $statusCode,
            $reasonPhrase
        );
    }

    /**
     * Build a PSR-7 stream
     * @param string $uri
     * @param string $mode
     * @return Messages\Stream\Implementation
     */
    public function stream($uri, $mode = 'r')
    {
        return new Messages\Stream\Implementation($uri, $mode);
    }

    /**
     * String stream
     * @param string $string
     * @return Messages\Stream\StringStream
     */
    public function stringStream($string = '')
    {
        return new Messages\Stream\StringStream($string);
    }

    /**
     * Build a PSR-7 URI from string
     * @param string $uri
     * @return Messages\URI\Implementation
     */
    public function uri($uri)
    {
        return new Messages\URI\Implementation($uri);
    }

    /**
     * Build a PSR-7 URI from SAPI globals,
     * with the ability to override $_SERVER data
     * @param array|null $server
     * @return Messages\URI\SAPI
     */
    public function sapiUri($server = null)
    {
        return new Messages\URI\SAPI(
            $server !== null ? $server : $_SERVER
        );
    }

    /**
     * Build a PSR-7 uploaded file representation
     * @param string      $file File path
     * @param string|null $clientFilename
     * @param string|null $clientMediaType
     * @param int|null    $size
     * @param int|int     $error
     * @return Messages\UploadedFile\Implementation
     */
    public function uploadedFile(
        $file,
        $clientFilename = null,
        $clientMediaType = null,
        $size = null,
        $error = UPLOAD_ERR_OK
    ) {
        return new Messages\UploadedFile\Implementation(
            $this,
            $file,
            $clientFilename,
            $clientMediaType,
            $size,
            $error
        );
    }

    /**
     * Build PSR-7 upload file representation from SAPI data
     * @param $fileData
     * @return Messages\UploadedFile\SAPI
     */
    public function sapiUploadedFile($fileData)
    {
        return new Messages\UploadedFile\SAPI($this, $fileData);
    }
}