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

RonasIT / laravel-helpers / 8971616255

06 May 2024 03:24PM UTC coverage: 73.093% (-0.6%) from 73.658%
8971616255

Pull #116

github

web-flow
Merge cf06eccc1 into 194095dc5
Pull Request #116: Added code that allows user to work with different versions.

19 of 33 new or added lines in 4 files covered. (57.58%)

9 existing lines in 1 file now uncovered.

891 of 1219 relevant lines covered (73.09%)

7.58 hits per line

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

77.27
/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

16
class HelpersServiceProvider extends ServiceProvider
17
{
18
    public function boot()
19
    {
20
        $this->extendRouter();
167✔
21

22
        /**
23
         * Specify that the route version must be in the range of given values inclusive.
24
         *
25
         * @param VersionEnumContract|null $start
26
         * @param VersionEnumContract|null $end
27
         * @param string $param (default is 'version')
28
         * @return Route
29
         */
30
        Route::macro('versionRange', function (?VersionEnumContract $start, ?VersionEnumContract $end, string $param = 'version') {
167✔
NEW
31
            $versions = array_diff(VersionEnumContract::values(), config('app.disabled_api_versions'));
×
32

NEW
UNCOV
33
            $versions = array_filter($versions, function ($version) use ($start, $end) {
×
NEW
UNCOV
34
                $result = true;
×
35

NEW
UNCOV
36
                if (!empty($start)) {
×
NEW
UNCOV
37
                    $result &= version_compare($version, $start->value, '>=');
×
38
                }
39

NEW
UNCOV
40
                if (!empty($end)) {
×
NEW
UNCOV
41
                    $result &= version_compare($version, $end->value, '<=');
×
42
                }
43

NEW
UNCOV
44
                return $result;
×
NEW
UNCOV
45
            });
×
46

NEW
UNCOV
47
            return $this->whereIn($param, $versions);
×
48
        });
167✔
49

50
        Route::macro('versionFrom', fn (VersionEnumContract $from) => $this::versionRange($from, null));
167✔
51

52
        Route::macro('versionTo', fn (VersionEnumContract $to) => $this::versionRange(null, $to));
167✔
53

54
        RouteFacade::macro('version', fn (VersionEnumContract $version) => RouteFacade::prefix('v' . $version->value));
167✔
55
    }
56

57
    public function register()
58
    {
59
        app(ExcelServiceProvider::class, ['app' => app()])->register();
167✔
60
    }
61

62
    protected function extendValidator()
63
    {
64
        Validator::extend('unique_except_of_authorized_user', function ($attribute, $value, $parameters = []) {
167✔
65
            $table = Arr::get($parameters, 0, 'users');
4✔
66
            $keyField = Arr::get($parameters, 1, 'id');
4✔
67
            $userId = Auth::id();
4✔
68

69
            $result = DB::table($table)
4✔
70
                ->where($keyField, '<>', $userId)
4✔
71
                ->whereIn($attribute, Arr::flatten((array) $value))
4✔
72
                ->exists();
4✔
73

74
            return !$result;
4✔
75
        });
167✔
76

77
        Validator::extend('list_exists', function ($attribute, $value, $parameters) {
167✔
78

79
            if (count($parameters) < 1) {
4✔
80
                return false;
1✔
81
            }
82

83
            $table = Arr::get($parameters, 0);
3✔
84
            $keyField = Arr::get($parameters, 1, 'id');
3✔
85

86
            if (!empty(Arr::get($parameters, 2))) {
3✔
87
                $value = collect($value)->pluck(Arr::get($parameters, 2));
1✔
88
            }
89

90
            return DB::table($table)
3✔
91
                ->whereIn($keyField, $value)
3✔
92
                ->exists();
3✔
93
        });
167✔
94
    }
95

96
    protected function extendRouter()
97
    {
98
        $router = $this->app['router'];
167✔
99

100
        $router->prependMiddlewareToGroup('web', SecurityMiddleware::class);
167✔
101
        $router->prependMiddlewareToGroup('api', SecurityMiddleware::class);
167✔
102

103
        $this->extendValidator();
167✔
104

105
        app(ExcelServiceProvider::class, ['app' => app()])->boot();
167✔
106

107
        $this->loadViewsFrom(__DIR__ . '/Stubs', 'ronasit');
167✔
108
    }
109
}
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