Completed
Push — master ( bbe544...1bc078 )
by ReliQ
03:23 queued 11s
created

Open::init()   A

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
class Open implements ServiceProvider
28
{
29
    /**
30
     * @var Container
31
     */
32
    private $container;
33
34
    /**
35
     * PHPDIServiceProvider constructor.
36
     *
37
     * @throws Exception
38
     */
39
    public function __construct()
40
    {
41
        $this->init();
42
    }
43
44
    /**
45
     * {@inheritdoc}
46
     */
47
    public function set(string $name, ...$concrete)
48
    {
49
        $this->container->set($name, $concrete[0]);
50
    }
51
52
    /**
53
     * @param string $name
54
     *
55
     * @throws ContainerExceptionInterface
56
     *
57
     * @return mixed
58
     */
59
    public function resolve(string $name)
60
    {
61
        return $this->container->get($name);
62
    }
63
64
    /**
65
     * @throws Exception
66
     */
67
    protected function init(): void
68
    {
69
        $containerBuilder = new ContainerBuilder();
70
        $containerBuilder->addDefinitions($this->getDefinitions());
71
72
        $this->container = $containerBuilder->build();
73
    }
74
75
    /**
76
     * @return array
77
     */
78
    protected function getDefinitions(): array
79
    {
80
        return [
81
            ConfigProviderContract::class => get(OpenConfigProvider::class),
82
            Executor::class => autowire()
83
                ->method('addReplacer', get(PatternReplacer::class))
84
                ->method('addFormatter', get(SentenceCase::class)),
85
            OpenConfigProvider::class => autowire()
86
                ->method('load'),
87
            Translator::class => get(Executor::class),
88
            Builder::class => get(StandardVocabularyBuilder::class),
89
            Reader::class => get(JsonReader::class),
90
            VocabularyLoader::class => get(Loader::class),
91
        ];
92
    }
93
}
94