Passed
Push — master ( 745402...3d5cea )
by Marcel
43s
created

Pipeliner   A

Complexity

Total Complexity 3

Size/Duplication

Total Lines 24
Duplicated Lines 0 %

Test Coverage

Coverage 100%

Importance

Changes 0
Metric Value
eloc 7
dl 0
loc 24
ccs 7
cts 7
cp 1
rs 10
c 0
b 0
f 0
wmc 3

2 Methods

Rating   Name   Duplication   Size   Complexity  
A build() 0 9 2
A chain() 0 4 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace UMA\JsonRpc\Internal;
6
7
use Psr\Container\ContainerInterface;
8
use UMA\JsonRpc;
9
10
/**
11
 * Helper class to compose the pipeline of middlewares + procedure
12
 */
13
class Pipeliner
14
{
15
    /**
16
     * @param ContainerInterface $container
17
     * @param JsonRpc\Procedure  $procedure
18
     * @param string[]           $services
19
     *
20
     * @return callable
21
     */
22 14
    public static function build(ContainerInterface $container, JsonRpc\Procedure $procedure, array $services): callable
23
    {
24 14
        $pipe = $procedure;
25
26 14
        foreach ($services as $service => $_) {
27 2
            $pipe = self::chain($container->get($service), $pipe);
28
        }
29
30 13
        return $pipe;
31
    }
32
33 1
    private static function chain(JsonRpc\Middleware $outer, callable $inner): callable
34
    {
35
        return function (JsonRpc\Request $request) use ($outer, $inner): JsonRpc\Response {
36 1
            return $outer($request, $inner);
37 1
        };
38
    }
39
}
40