Passed
Push — master ( 519e38...1265b7 )
by Melech
01:25
created

ServiceProvider   A

Complexity

Total Complexity 8

Size/Duplication

Total Lines 158
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
wmc 8
eloc 53
dl 0
loc 158
rs 10
c 0
b 0
f 0

8 Methods

Rating   Name   Duplication   Size   Complexity  
A provides() 0 10 1
A publishInputReceivedHandler() 0 12 1
A publishExitedHandler() 0 12 1
A publishers() 0 10 1
A publishThrowableCaughtHandler() 0 12 1
A publishRouteDispatchedHandler() 0 12 1
A publishRouteMatchedHandler() 0 12 1
A publishRouteNotMatchedHandler() 0 12 1
1
<?php
2
3
declare(strict_types=1);
4
5
/*
6
 * This file is part of the Valkyrja Framework package.
7
 *
8
 * (c) Melech Mizrachi <[email protected]>
9
 *
10
 * For the full copyright and license information, please view the LICENSE
11
 * file that was distributed with this source code.
12
 */
13
14
namespace Valkyrja\Cli\Middleware\Provider;
15
16
use Override;
0 ignored issues
show
Bug introduced by
The type Override was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
17
use Valkyrja\Application\Env\Env;
0 ignored issues
show
Bug introduced by
The type Valkyrja\Application\Env\Env was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
18
use Valkyrja\Cli\Middleware\Contract\ExitedMiddlewareContract;
19
use Valkyrja\Cli\Middleware\Contract\InputReceivedMiddlewareContract;
20
use Valkyrja\Cli\Middleware\Contract\RouteDispatchedMiddlewareContract;
21
use Valkyrja\Cli\Middleware\Contract\RouteMatchedMiddlewareContract;
22
use Valkyrja\Cli\Middleware\Contract\RouteNotMatchedMiddlewareContract;
23
use Valkyrja\Cli\Middleware\Contract\ThrowableCaughtMiddlewareContract;
24
use Valkyrja\Cli\Middleware\Handler\Contract\ExitedHandlerContract;
25
use Valkyrja\Cli\Middleware\Handler\Contract\InputReceivedHandlerContract;
26
use Valkyrja\Cli\Middleware\Handler\Contract\RouteDispatchedHandlerContract;
27
use Valkyrja\Cli\Middleware\Handler\Contract\RouteMatchedHandlerContract;
28
use Valkyrja\Cli\Middleware\Handler\Contract\RouteNotMatchedHandlerContract;
29
use Valkyrja\Cli\Middleware\Handler\Contract\ThrowableCaughtHandlerContract;
30
use Valkyrja\Cli\Middleware\Handler\ExitedHandler;
31
use Valkyrja\Cli\Middleware\Handler\InputReceivedHandler;
32
use Valkyrja\Cli\Middleware\Handler\RouteDispatchedHandler;
33
use Valkyrja\Cli\Middleware\Handler\RouteMatchedHandler;
34
use Valkyrja\Cli\Middleware\Handler\RouteNotMatchedHandler;
35
use Valkyrja\Cli\Middleware\Handler\ThrowableCaughtHandler;
36
use Valkyrja\Container\Manager\Contract\ContainerContract;
37
use Valkyrja\Container\Provider\Provider;
38
39
final class ServiceProvider extends Provider
40
{
41
    /**
42
     * @inheritDoc
43
     */
44
    #[Override]
45
    public static function publishers(): array
46
    {
47
        return [
48
            InputReceivedHandlerContract::class   => [self::class, 'publishInputReceivedHandler'],
49
            ThrowableCaughtHandlerContract::class => [self::class, 'publishThrowableCaughtHandler'],
50
            RouteMatchedHandlerContract::class    => [self::class, 'publishRouteMatchedHandler'],
51
            RouteNotMatchedHandlerContract::class => [self::class, 'publishRouteNotMatchedHandler'],
52
            RouteDispatchedHandlerContract::class => [self::class, 'publishRouteDispatchedHandler'],
53
            ExitedHandlerContract::class          => [self::class, 'publishExitedHandler'],
54
        ];
55
    }
56
57
    /**
58
     * @inheritDoc
59
     */
60
    #[Override]
61
    public static function provides(): array
62
    {
63
        return [
64
            InputReceivedHandlerContract::class,
65
            RouteDispatchedHandlerContract::class,
66
            ThrowableCaughtHandlerContract::class,
67
            RouteMatchedHandlerContract::class,
68
            RouteNotMatchedHandlerContract::class,
69
            ExitedHandlerContract::class,
70
        ];
71
    }
72
73
    /**
74
     * Publish the RequestReceivedHandler service.
75
     *
76
     * @param ContainerContract $container The container
77
     *
78
     * @return void
79
     */
80
    public static function publishInputReceivedHandler(ContainerContract $container): void
81
    {
82
        $env = $container->getSingleton(Env::class);
83
        /** @var class-string<InputReceivedMiddlewareContract>[] $middleware */
84
        $middleware = $env::CLI_MIDDLEWARE_INPUT_RECEIVED;
85
86
        $container->setSingleton(
87
            InputReceivedHandlerContract::class,
88
            $handler = new InputReceivedHandler($container)
89
        );
90
91
        $handler->add(...$middleware);
92
    }
93
94
    /**
95
     * Publish the RouteDispatchedHandler service.
96
     *
97
     * @param ContainerContract $container The container
98
     *
99
     * @return void
100
     */
101
    public static function publishRouteDispatchedHandler(ContainerContract $container): void
102
    {
103
        $env = $container->getSingleton(Env::class);
104
        /** @var class-string<RouteDispatchedMiddlewareContract>[] $middleware */
105
        $middleware = $env::CLI_MIDDLEWARE_COMMAND_DISPATCHED;
106
107
        $container->setSingleton(
108
            RouteDispatchedHandlerContract::class,
109
            $handler = new RouteDispatchedHandler($container)
110
        );
111
112
        $handler->add(...$middleware);
113
    }
114
115
    /**
116
     * Publish the ThrowableCaughtHandler service.
117
     *
118
     * @param ContainerContract $container The container
119
     *
120
     * @return void
121
     */
122
    public static function publishThrowableCaughtHandler(ContainerContract $container): void
123
    {
124
        $env = $container->getSingleton(Env::class);
125
        /** @var class-string<ThrowableCaughtMiddlewareContract>[] $middleware */
126
        $middleware = $env::CLI_MIDDLEWARE_THROWABLE_CAUGHT;
127
128
        $container->setSingleton(
129
            ThrowableCaughtHandlerContract::class,
130
            $handler = new ThrowableCaughtHandler($container)
131
        );
132
133
        $handler->add(...$middleware);
134
    }
135
136
    /**
137
     * Publish the RouteMatchedHandler service.
138
     *
139
     * @param ContainerContract $container The container
140
     *
141
     * @return void
142
     */
143
    public static function publishRouteMatchedHandler(ContainerContract $container): void
144
    {
145
        $env = $container->getSingleton(Env::class);
146
        /** @var class-string<RouteMatchedMiddlewareContract>[] $middleware */
147
        $middleware = $env::CLI_MIDDLEWARE_COMMAND_MATCHED;
148
149
        $container->setSingleton(
150
            RouteMatchedHandlerContract::class,
151
            $handler = new RouteMatchedHandler($container)
152
        );
153
154
        $handler->add(...$middleware);
155
    }
156
157
    /**
158
     * Publish the RouteNotMatchedHandler service.
159
     *
160
     * @param ContainerContract $container The container
161
     *
162
     * @return void
163
     */
164
    public static function publishRouteNotMatchedHandler(ContainerContract $container): void
165
    {
166
        $env = $container->getSingleton(Env::class);
167
        /** @var class-string<RouteNotMatchedMiddlewareContract>[] $middleware */
168
        $middleware = $env::CLI_MIDDLEWARE_COMMAND_NOT_MATCHED;
169
170
        $container->setSingleton(
171
            RouteNotMatchedHandlerContract::class,
172
            $handler = new RouteNotMatchedHandler($container)
173
        );
174
175
        $handler->add(...$middleware);
176
    }
177
178
    /**
179
     * Publish the TerminatedHandler service.
180
     *
181
     * @param ContainerContract $container The container
182
     *
183
     * @return void
184
     */
185
    public static function publishExitedHandler(ContainerContract $container): void
186
    {
187
        $env = $container->getSingleton(Env::class);
188
        /** @var class-string<ExitedMiddlewareContract>[] $middleware */
189
        $middleware = $env::CLI_MIDDLEWARE_EXITED;
190
191
        $container->setSingleton(
192
            ExitedHandlerContract::class,
193
            $handler = new ExitedHandler($container)
194
        );
195
196
        $handler->add(...$middleware);
197
    }
198
}
199