Completed
Pull Request — master (#38)
by ARCANEDEV
11:00
created

DeferredServicesProvider::getVendorPaths()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 12

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 2

Importance

Changes 0
Metric Value
dl 0
loc 12
ccs 0
cts 0
cp 0
rs 9.8666
c 0
b 0
f 0
cc 1
nc 1
nop 1
crap 2
1
<?php
2
3
declare(strict_types=1);
4
5
namespace Arcanedev\LaravelLang\Providers;
6
7
use Illuminate\Support\Collection;
8
use Arcanedev\LaravelLang\{TransChecker, TransManager, TransPublisher};
9
use Arcanedev\LaravelLang\Contracts\{
10
    TransChecker as TransCheckerContract,
11
    TransManager as TransManagerContract,
12
    TransPublisher as TransPublisherContract
13
};
14
use Arcanedev\Support\Providers\ServiceProvider;
15
use Illuminate\Contracts\Support\DeferrableProvider;
16
use Illuminate\Foundation\Application;
17
18
/**
19
 * Class     DeferredServiceProvider
20
 *
21
 * @package  Arcanedev\LaravelLang\Providers
22
 * @author   ARCANEDEV <[email protected]>
23
 */
24
class DeferredServicesProvider extends ServiceProvider implements DeferrableProvider
25
{
26
    /* -----------------------------------------------------------------
27
     |  Main Methods
28
     | -----------------------------------------------------------------
29
     */
30
31
    /**
32
     * Register any application services.
33 168
     */
34
    public function register(): void
35 168
    {
36 168
        $this->registerTransManager();
37 168
        $this->registerTransChecker();
38 168
        $this->registerLangPublisher();
39
    }
40
41
    /**
42
     * Get the services provided by the provider.
43
     *
44
     * @return array
45 12
     */
46
    public function provides(): array
47
    {
48 12
        return [
49
            TransManagerContract::class,
50
            TransCheckerContract::class,
51
            TransPublisherContract::class,
52
        ];
53
    }
54
55
    /* -----------------------------------------------------------------
56
     |  Services
57
     | -----------------------------------------------------------------
58
     */
59
60
    /**
61
     * Register the trans manager.
62 168
     */
63
    private function registerTransManager(): void
64
    {
65 126
        $this->singleton(TransManagerContract::class, function (Application $app) {
66 126
            return new TransManager($app['files'], $this->getVendorPaths($app));
67 126
        });
68
    }
69
70 126
    /**
71 168
     * Register the trans checker.
72 168
     */
73
    private function registerTransChecker(): void
74
    {
75
        $this->singleton(TransCheckerContract::class, function (Application $app) {
76
            return new TransChecker(
77 168
                $app['translator'],
78
                $app[TransManagerContract::class],
79
                $app['config']->get('laravel-lang', [])
80 42
            );
81 42
        });
82 42
    }
83 42
84
    /**
85 168
     * Register the lang publisher.
86 168
     */
87
    private function registerLangPublisher(): void
88
    {
89
        $this->singleton(TransPublisherContract::class, function (Application $app) {
90
            return new TransPublisher(
91 168
                $app['files'],
92
                $app[TransManagerContract::class],
93
                $app->langPath()
94 78
            );
95 78
        });
96 78
    }
97 78
98
    /**
99 168
     * Get the vendor paths.
100 168
     *
101
     * @param  \Illuminate\Foundation\Application  $app
102
     *
103
     * @return array
104
     */
105
    private function getVendorPaths(Application $app): array
106
    {
107
        return Collection::make($app['config']->get('laravel-lang.vendor', []))
108
            ->mapWithKeys(function (string $path, string $group) {
109
                return ["vendor-{$group}" => $path];
110
            })
111
            ->put('app', $app->langPath())
112
            ->transform(function (string $path) {
113
                return realpath($path);
114
            })
115
            ->toArray();
116
    }
117
}
118