• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

RonasIT / laravel-helpers / 9715026792

28 Jun 2024 03:14PM UTC coverage: 76.409% (+1.6%) from 74.842%
9715026792

push

github

web-flow
Merge pull request #128 from RonasIT/laravel-min-version-10.48

Laravel min version 10.48

8 of 9 new or added lines in 3 files covered. (88.89%)

19 existing lines in 2 files now uncovered.

949 of 1242 relevant lines covered (76.41%)

9.97 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

80.88
/src/HelpersServiceProvider.php
1
<?php
2

3
namespace RonasIT\Support;
4

5
use Illuminate\Routing\Route;
6
use Illuminate\Support\Arr;
7
use Illuminate\Support\Facades\Auth;
8
use Illuminate\Support\Facades\DB;
9
use Illuminate\Support\Facades\Route as RouteFacade;
10
use Illuminate\Support\Facades\Validator;
11
use Illuminate\Support\ServiceProvider;
12
use Maatwebsite\Excel\ExcelServiceProvider;
13
use RonasIT\Support\Contracts\VersionEnumContract;
14
use RonasIT\Support\Middleware\SecurityMiddleware;
15
use Illuminate\Routing\Router;
16

17
class HelpersServiceProvider extends ServiceProvider
18
{
19
    public function boot()
20
    {
21
        $router = $this->app['router'];
219✔
22

23
        $router->prependMiddlewareToGroup('web', SecurityMiddleware::class);
219✔
24
        $router->prependMiddlewareToGroup('api', SecurityMiddleware::class);
219✔
25

26
        $this->extendValidator();
219✔
27

28
        app(ExcelServiceProvider::class, ['app' => app()])->boot();
219✔
29

30
        $this->loadViewsFrom(__DIR__ . '/Stubs', 'ronasit');
219✔
31

32
        $this->extendRouter();
219✔
33
    }
34

35
    public function register()
36
    {
37
        app(ExcelServiceProvider::class, ['app' => app()])->register();
219✔
38
    }
39

40
    protected function extendValidator()
41
    {
42
        Validator::extend('unique_except_of_authorized_user', function ($attribute, $value, $parameters = []) {
219✔
43
            $table = Arr::get($parameters, 0, 'users');
4✔
44
            $keyField = Arr::get($parameters, 1, 'id');
4✔
45
            $userId = Auth::id();
4✔
46

47
            $result = DB::table($table)
4✔
48
                ->where($keyField, '<>', $userId)
4✔
49
                ->whereIn($attribute, Arr::flatten((array) $value))
4✔
50
                ->exists();
4✔
51

52
            return !$result;
4✔
53
        });
219✔
54

55
        Validator::extend('list_exists', function ($attribute, $value, $parameters) {
219✔
56

57
            if (count($parameters) < 1) {
4✔
58
                return false;
1✔
59
            }
60

61
            $table = Arr::get($parameters, 0);
3✔
62
            $keyField = Arr::get($parameters, 1, 'id');
3✔
63

64
            if (!empty(Arr::get($parameters, 2))) {
3✔
65
                $value = collect($value)->pluck(Arr::get($parameters, 2));
1✔
66
            }
67

68
            return DB::table($table)
3✔
69
                ->whereIn($keyField, $value)
3✔
70
                ->exists();
3✔
71
        });
219✔
72
    }
73

74
    protected function extendRouter()
75
    {
76
        // Backward compatibility with Laravel < 9
77
        if (!method_exists(Route::class, 'whereIn')) {
219✔
UNCOV
78
            Route::macro('whereIn', fn ($parameters, array $values) => $this->assignExpressionToParameters($parameters, implode('|', $values)));
×
79

UNCOV
80
            Router::macro('assignExpressionToParameters', function($parameters, $expression) {
×
UNCOV
81
                return $this
×
UNCOV
82
                    ->where(collect(Arr::wrap($parameters))
×
UNCOV
83
                    ->mapWithKeys(fn ($parameter) => [$parameter => $expression])
×
UNCOV
84
                    ->all());
×
UNCOV
85
            });
×
86

UNCOV
87
            RouteFacade::macro('whereIn', function ($parameters, array $values) {
×
UNCOV
88
                return static::getFacadeRoot()->assignExpressionToParameters($parameters, implode('|', $values));
×
UNCOV
89
            });
×
90

UNCOV
91
            RouteFacade::macro('prefix', function (string $prefix) {
×
UNCOV
92
                return static::getFacadeRoot()->prefix($prefix);
×
UNCOV
93
            });
×
94
        }
95

96
        /**
97
         * Specify that the route version must be in the range of given values inclusive.
98
         *
99
         * @param VersionEnumContract|null $start
100
         * @param VersionEnumContract|null $end
101
         * @param string|null $param (default is 'version')
102
         * @param Route|null $instance
103
         * @return Router|Route
104
         */
105
        $versionRange = function (?VersionEnumContract $start, ?VersionEnumContract $end, ?string $param, Route $instance = null) {
219✔
106
            if (!$param) {
38✔
107
                $param = 'version';
38✔
108
            }
109

110
            $versionEnum = app(VersionEnumContract::class);
38✔
111
            $disabledVersions = config('app.disabled_api_versions') ?: [];
38✔
112

113
            $versions = array_diff($versionEnum::values(), $disabledVersions);
38✔
114

115
            $versions = array_filter($versions, function ($version) use ($start, $end) {
38✔
116
                $result = true;
38✔
117

118
                if (!empty($start)) {
38✔
119
                    $result &= version_compare($version, $start->value, '>=');
38✔
120
                }
121

122
                if (!empty($end)) {
38✔
123
                    $result &= version_compare($version, $end->value, '<=');
38✔
124
                }
125

126
                return $result;
38✔
127
            });
38✔
128

129
            return (!empty($instance))
38✔
130
                ? $instance->whereIn($param, $versions)
38✔
131
                : RouteFacade::whereIn($param, $versions);
38✔
132
        };
219✔
133

134
        Route::macro('versionRange', fn (VersionEnumContract $from, VersionEnumContract $to, $param = null) => $versionRange($from, $to, $param, $this));
219✔
135
        Route::macro('versionFrom', fn (VersionEnumContract $from, $param = null) => $versionRange($from, null, $param, $this));
219✔
136
        Route::macro('versionTo', fn (VersionEnumContract $to, $param = null) => $versionRange(null, $to, $param, $this));
219✔
137

138
        RouteFacade::macro('versionRange', fn (VersionEnumContract $from, VersionEnumContract $to, string $param = null) => $versionRange($from, $to, $param));
219✔
139
        RouteFacade::macro('versionFrom', fn (VersionEnumContract $from, $param = null) => $versionRange($from, null, $param));
219✔
140
        RouteFacade::macro('versionTo', fn (VersionEnumContract $to, $param = null) => $versionRange(null, $to, $param));
219✔
141

142
        RouteFacade::macro('version', fn (VersionEnumContract $version) => RouteFacade::prefix('v' . $version->value));
219✔
143
    }
144
}
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2025 Coveralls, Inc