Skip to content

Commit 8bb8ed2

Browse files
authored
Merge pull request #129 from RonasIT/fix-version-binding-enum
fix: route versioning
2 parents bd03f09 + 88e0f04 commit 8bb8ed2

File tree

1 file changed

+2
-52
lines changed

1 file changed

+2
-52
lines changed

app/Providers/AppServiceProvider.php

Lines changed: 2 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,67 +3,17 @@
33
namespace App\Providers;
44

55
use App\Enums\VersionEnum;
6-
use Illuminate\Routing\Route;
7-
use Illuminate\Routing\RouteRegistrar;
8-
use Illuminate\Support\Facades\Route as RouteFacade;
96
use Illuminate\Support\ServiceProvider;
7+
use RonasIT\Support\Contracts\VersionEnumContract;
108

119
class AppServiceProvider extends ServiceProvider
1210
{
1311
public function boot(): void
1412
{
15-
/**
16-
* Specify that the route version must be in the range of given values inclusive.
17-
*
18-
* @param VersionEnum|null $start
19-
* @param VersionEnum|null $end
20-
* @param string|null $param (default is 'version')
21-
* @param Route|null $instance
22-
*
23-
* @return Route|RouteRegistrar
24-
*/
25-
$versionRange = function (?VersionEnum $start, ?VersionEnum $end, ?string $param, ?Route $instance = null) {
26-
if (!$param) {
27-
$param = 'version';
28-
}
29-
30-
$versions = array_diff(VersionEnum::values(), config('app.disabled_api_versions'));
31-
32-
$versions = array_filter($versions, function ($version) use ($start, $end) {
33-
$result = true;
34-
35-
if (!empty($start)) {
36-
$result &= version_compare($version, $start->value, '>=');
37-
}
38-
39-
if (!empty($end)) {
40-
$result &= version_compare($version, $end->value, '<=');
41-
}
42-
43-
return $result;
44-
});
45-
46-
return (!empty($instance))
47-
? $instance->whereIn($param, $versions)
48-
: RouteFacade::whereIn($param, $versions);
49-
};
50-
51-
Route::macro('versionRange', fn (VersionEnum $from, VersionEnum $to, $param = null) => $versionRange($from, $to, $param, $this));
52-
53-
Route::macro('versionFrom', fn (VersionEnum $from, $param = null) => $versionRange($from, null, $param, $this));
54-
55-
Route::macro('versionTo', fn (VersionEnum $to, $param = null) => $versionRange(null, $to, $param, $this));
56-
57-
RouteFacade::macro('versionRange', fn (VersionEnum $from, VersionEnum $to, $param = null) => $versionRange($from, $to, $param));
58-
59-
RouteFacade::macro('versionFrom', fn (VersionEnum $from, $param = null) => $versionRange($from, null, $param));
60-
61-
RouteFacade::macro('versionTo', fn (VersionEnum $to, $param = null) => $versionRange(null, $to, $param));
62-
63-
RouteFacade::macro('version', fn (VersionEnum $version) => RouteFacade::prefix('v' . $version->value));
6413
}
6514

6615
public function register()
6716
{
17+
$this->app->bind(VersionEnumContract::class, fn () => VersionEnum::class);
6818
}
6919
}

0 commit comments

Comments
 (0)