CallbackMiddleware::__construct()   A
last analyzed

Complexity

Conditions 2
Paths 2

Size

Total Lines 7
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 4
CRAP Score 2

Importance

Changes 0
Metric Value
cc 2
eloc 3
nc 2
nop 1
dl 0
loc 7
ccs 4
cts 4
cp 1
crap 2
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Buzz\Middleware;
6
7
use Buzz\Exception\InvalidArgumentException;
8
use Psr\Http\Message\RequestInterface;
9
use Psr\Http\Message\ResponseInterface;
10
11
/**
12
 * @author Tobias Nyholm <[email protected]>
13
 */
14
class CallbackMiddleware implements MiddlewareInterface
15
{
16
    private $callable;
17
18
    /**
19
     * The callback should expect either one or two arguments, depending on
20
     * whether it is receiving a pre or post send notification.
21
     *
22
     *     $middleware = new CallbackMiddleware(function($request, $response = null) {
23
     *         if ($response) {
24
     *             // postSend
25
     *         } else {
26
     *             // preSend
27
     *         }
28
     *     });
29
     *
30
     * @param mixed $callable A PHP callable
31
     *
32
     * @throws InvalidArgumentException If the argument is not callable
33
     */
34 2
    public function __construct($callable)
35
    {
36 2
        if (!\is_callable($callable)) {
37 1
            throw new InvalidArgumentException('The argument is not callable.');
38
        }
39
40 1
        $this->callable = $callable;
41 1
    }
42
43 1
    public function handleRequest(RequestInterface $request, callable $next)
44
    {
45 1
        $request = \call_user_func($this->callable, $request);
46
47 1
        return $next($request);
48
    }
49
50 1
    public function handleResponse(RequestInterface $request, ResponseInterface $response, callable $next)
51
    {
52 1
        $response = \call_user_func($this->callable, $request, $response);
53
54 1
        return $next($request, $response);
55
    }
56
}
57