Passed
Push — master ( ac3ce9...4824e6 )
by Alexey
04:00
created

RoutingServiceProvider::boot()   B

Complexity

Conditions 1
Paths 1

Size

Total Lines 24
Code Lines 18

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 4
Bugs 0 Features 0
Metric Value
cc 1
eloc 18
nc 1
nop 0
dl 0
loc 24
ccs 0
cts 20
cp 0
crap 2
rs 8.9713
c 4
b 0
f 0
1
<?php declare(strict_types = 1);
2
3
namespace Venta\Framework\ServiceProvider;
4
5
use FastRoute\DataGenerator\GroupCountBased;
6
use FastRoute\RouteCollector;
7
use FastRoute\RouteParser as FastRouteRouteParser;
8
use Psr\Http\Message\UriInterface;
9
use Venta\Contracts\Container\MutableContainer;
10
use Venta\Contracts\Routing\FastrouteDispatcherFactory;
11
use Venta\Contracts\Routing\ImmutableRouteCollection as ImmutableRouteCollectionContract;
12
use Venta\Contracts\Routing\MiddlewarePipelineFactory as MiddlewarePipelineFactoryContract;
13
use Venta\Contracts\Routing\RequestRouteCollectionFactory as RequestRouteCollectionFactoryContract;
14
use Venta\Contracts\Routing\RouteCollection as RouteCollectionContract;
15
use Venta\Contracts\Routing\RouteDispatcherFactory as RouteDispatcherFactoryContract;
16
use Venta\Contracts\Routing\RouteGroup as RouteGroupContract;
17
use Venta\Contracts\Routing\RouteMatcher as RouteMatcherContract;
18
use Venta\Contracts\Routing\RouteParser as RouteParserContract;
19
use Venta\Contracts\Routing\RouteProcessor as RouteProcessorContract;
20
use Venta\Contracts\Routing\Router as RouterContract;
21
use Venta\Contracts\Routing\UrlGenerator as UrlGeneratorContract;
22
use Venta\Routing\Factory\GroupCountBasedDispatcherFactory;
23
use Venta\Routing\Factory\MiddlewarePipelineFactory;
24
use Venta\Routing\Factory\RequestRouteCollectionFactory;
25
use Venta\Routing\Factory\RouteDispatcherFactory;
26
use Venta\Routing\ProcessingRouteCollection;
27
use Venta\Routing\RouteCollection;
28
use Venta\Routing\RouteGroup;
29
use Venta\Routing\RouteMatcher;
30
use Venta\Routing\RouteParser;
31
use Venta\Routing\RoutePathProcessor;
32
use Venta\Routing\Router;
33
use Venta\Routing\UrlGenerator;
34
use Venta\ServiceProvider\AbstractServiceProvider;
35
use Zend\Diactoros\Uri;
36
37
/**
38
 * Class RoutingServiceProvider
39
 *
40
 * @package Venta\Framework\ServiceProvider
41
 */
42
final class RoutingServiceProvider extends AbstractServiceProvider
43
{
44
45
    /**
46
     * @inheritDoc
47
     */
48
    public function bind(MutableContainer $container)
49
    {
50
        $container->bind(FastrouteDispatcherFactory::class, GroupCountBasedDispatcherFactory::class);
51
        $container->bind(RequestRouteCollectionFactoryContract::class, RequestRouteCollectionFactory::class);
52
        $container->bind(MiddlewarePipelineFactoryContract::class, MiddlewarePipelineFactory::class);
53
        $container->bind(RouteCollectionContract::class, RouteCollection::class);
54
        $container->bind(ImmutableRouteCollectionContract::class, RouteCollectionContract::class);
55
        $container->bind(RouteDispatcherFactoryContract::class, RouteDispatcherFactory::class);
56
        $container->bind(RouteMatcherContract::class, RouteMatcher::class);
57
        $container->bind(RouteParserContract::class, RouteParser::class);
58
        $container->bind(RouterContract::class, Router::class);
59
        $container->bind(RouteProcessorContract::class, RoutePathProcessor::class);
60
61
        $container->bind(UriInterface::class, Uri::class);
62
        $container->bind(UrlGeneratorContract::class, UrlGenerator::class);
63
64
        $container->bind(RouteGroupContract::class, RouteGroup::class);
65
66
        $container->factory(RouteCollector::class, function () {
67
            return new RouteCollector(new FastRouteRouteParser\Std(), new GroupCountBased);
68
        }, true);
69
70
        $container->decorate(RouteCollectionContract::class, ProcessingRouteCollection::class);
71
    }
72
}