Open::init()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 6
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 3
nc 1
nop 0
dl 0
loc 6
rs 10
c 0
b 0
f 0
1
<?php
2
3
declare(strict_types=1);
4
5
namespace ReliqArts\DirectTranslator\ServiceProvider;
6
7
use DI\Container;
8
use DI\ContainerBuilder;
9
use Exception;
10
use Psr\Container\ContainerExceptionInterface;
11
use ReliqArts\DirectTranslator\ConfigProvider as ConfigProviderContract;
12
use ReliqArts\DirectTranslator\ConfigProvider\Open as OpenConfigProvider;
13
use ReliqArts\DirectTranslator\ServiceProvider;
14
use ReliqArts\DirectTranslator\Translation\Executor;
15
use ReliqArts\DirectTranslator\Translation\Formatter\SentenceCase;
16
use ReliqArts\DirectTranslator\Translation\Replacer\PatternReplacer;
17
use ReliqArts\DirectTranslator\Translator;
18
use ReliqArts\DirectTranslator\Vocabulary\Builder;
19
use ReliqArts\DirectTranslator\Vocabulary\Builder\StandardVocabularyBuilder;
20
use ReliqArts\DirectTranslator\Vocabulary\Loader;
21
use ReliqArts\DirectTranslator\Vocabulary\Reader;
22
use ReliqArts\DirectTranslator\Vocabulary\Reader\JsonReader;
23
use ReliqArts\DirectTranslator\VocabularyLoader;
24
use function DI\autowire;
25
use function DI\get;
26
27
/**
28
 * Class Open.
29
 *
30
 * @codeCoverageIgnore
31
 */
32
class Open implements ServiceProvider
33
{
34
    /**
35
     * @var Container
36
     */
37
    private $container;
38
39
    /**
40
     * PHPDIServiceProvider constructor.
41
     *
42
     * @throws Exception
43
     */
44
    public function __construct()
45
    {
46
        $this->init();
47
    }
48
49
    /**
50
     * {@inheritdoc}
51
     */
52
    public function set(string $name, ...$concrete)
53
    {
54
        $this->container->set($name, $concrete[0]);
55
    }
56
57
    /**
58
     * @param string $name
59
     *
60
     * @throws ContainerExceptionInterface
61
     *
62
     * @return mixed
63
     */
64
    public function resolve(string $name)
65
    {
66
        return $this->container->get($name);
67
    }
68
69
    /**
70
     * @throws Exception
71
     */
72
    protected function init(): void
73
    {
74
        $containerBuilder = new ContainerBuilder();
75
        $containerBuilder->addDefinitions($this->getDefinitions());
76
77
        $this->container = $containerBuilder->build();
78
    }
79
80
    /**
81
     * @return array
82
     */
83
    protected function getDefinitions(): array
84
    {
85
        return [
86
            ConfigProviderContract::class => get(OpenConfigProvider::class),
87
            Executor::class => autowire()
88
                ->method('addReplacer', get(PatternReplacer::class))
89
                ->method('addFormatter', get(SentenceCase::class)),
90
            OpenConfigProvider::class => autowire()
91
                ->method('load'),
92
            Translator::class => get(Executor::class),
93
            Builder::class => get(StandardVocabularyBuilder::class),
94
            Reader::class => get(JsonReader::class),
95
            VocabularyLoader::class => get(Loader::class),
96
        ];
97
    }
98
}
99