ProdModule   A
last analyzed

Complexity

Total Complexity 3

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Importance

Changes 2
Bugs 0 Features 0
Metric Value
wmc 3
eloc 12
c 2
b 0
f 0
dl 0
loc 33
rs 10

3 Methods

Rating   Name   Duplication   Size   Complexity  
A configure() 0 8 1
A disableOptionsMethod() 0 3 1
A installCacheModule() 0 7 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace BEAR\Package\Context;
6
7
use BEAR\Package\Provide\Cache\CacheDirProvider;
8
use BEAR\Package\Provide\Error\ErrorPageFactoryInterface;
9
use BEAR\Package\Provide\Error\ProdVndErrorPageFactory;
10
use BEAR\Package\Provide\Logger\ProdMonologProvider;
11
use BEAR\QueryRepository\ProdQueryRepositoryModule;
12
use BEAR\RepositoryModule\Annotation\EtagPool;
13
use BEAR\Resource\NullOptionsRenderer;
14
use BEAR\Resource\RenderInterface;
15
use Override;
16
use Psr\Cache\CacheItemInterface;
17
use Psr\Log\LoggerInterface;
18
use Ray\Compiler\DiCompileModule;
19
use Ray\Di\AbstractModule;
20
use Ray\Di\Scope;
21
use Ray\PsrCacheModule\Annotation\CacheDir;
22
use Ray\PsrCacheModule\LocalCacheProvider;
23
use Ray\PsrCacheModule\Psr6LocalCacheModule;
24
25
/** @codeCoverageIgnore */
26
final class ProdModule extends AbstractModule
27
{
28
    /**
29
     * {@inheritDoc}
30
     */
31
    #[Override]
32
    protected function configure(): void
33
    {
34
        $this->bind(ErrorPageFactoryInterface::class)->to(ProdVndErrorPageFactory::class);
35
        $this->bind(LoggerInterface::class)->toProvider(ProdMonologProvider::class)->in(Scope::SINGLETON);
36
        $this->disableOptionsMethod();
37
        $this->installCacheModule();
38
        $this->install(new DiCompileModule(true));
39
    }
40
41
    private function installCacheModule(): void
42
    {
43
        $this->install(new ProdQueryRepositoryModule());
44
        $this->bind('')->annotatedWith(CacheDir::class)->toProvider(CacheDirProvider::class);
45
        $this->install(new Psr6LocalCacheModule());
46
        /** @psalm-suppress DeprecatedClass */
47
        $this->bind(CacheItemInterface::class)->annotatedWith(EtagPool::class)->toProvider(LocalCacheProvider::class);
48
    }
49
50
    /**
51
     * Disable OPTIONS resource request method in production
52
     *
53
     * OPTIONS method return 405 Method Not Allowed error code. To enable OPTIONS in `prod` context,
54
     * Install BEAR\Resource\Module\OptionsMethodModule() in your ProdModule.
55
     */
56
    private function disableOptionsMethod(): void
57
    {
58
        $this->bind(RenderInterface::class)->annotatedWith('options')->to(NullOptionsRenderer::class);
59
    }
60
}
61