Completed
Push — master ( b2e200...1332b8 )
by Oscar
04:48
created

Gzip::__invoke()   A

Complexity

Conditions 4
Paths 5

Size

Total Lines 15
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 2
Bugs 0 Features 1
Metric Value
c 2
b 0
f 1
dl 0
loc 15
rs 9.2
cc 4
eloc 8
nc 5
nop 3
1
<?php
2
3
namespace Psr7Middlewares\Middleware;
4
5
use Psr7Middlewares\Middleware;
6
use Psr7Middlewares\Utils;
7
use Psr7Middlewares\Transformers;
8
use Psr\Http\Message\ServerRequestInterface;
9
use Psr\Http\Message\ResponseInterface;
10
11
/**
12
 * Middleware to gzip encode the response body.
13
 */
14
class Gzip
15
{
16
    use Utils\ResolverTrait;
17
18
    /**
19
     * Execute the middleware.
20
     *
21
     * @param ServerRequestInterface $request
22
     * @param ResponseInterface      $response
23
     * @param callable               $next
24
     *
25
     * @return ResponseInterface
26
     */
27
    public function __invoke(ServerRequestInterface $request, ResponseInterface $response, callable $next)
28
    {
29
        if (!Middleware::hasAttribute($request, EncodingNegotiator::KEY)) {
30
            throw new RuntimeException('Gzip middleware needs EncodingNegotiator executed before');
31
        }
32
33
        $resolver = $this->resolver ?: new Transformers\Gzip();
34
        $transformer = $resolver->resolve(EncodingNegotiator::getEncoding($request));
35
36
        if ($transformer) {
37
            $response = $transformer($response);
38
        }
39
40
        return $next($request, $response);
41
    }
42
}
43