Laragear/Refine

View on GitHub
src/RefineServiceProvider.php

Summary

Maintainability
A
0 mins
Test Coverage
<?php

namespace Laragear\Refine;

use Illuminate\Contracts\Database\Eloquent\Builder as EloquentBuilderContract;
use Illuminate\Contracts\Database\Query\Builder as BuilderContract;
use Illuminate\Database\Eloquent\Builder as EloquentBuilder;
use Illuminate\Database\Query\Builder;
use Illuminate\Support\ServiceProvider;

class RefineServiceProvider extends ServiceProvider
{
    public const STUBS = __DIR__.'/../.stubs/stubs';

    /**
     * Boot the service provider.
     */
    public function boot(): void
    {
        $callback = function (object|string $refiner, array $keys = null): BuilderContract|EloquentBuilderContract {
            /** @var \Illuminate\Contracts\Database\Query\Builder|\Illuminate\Contracts\Database\Eloquent\Builder $this */
            return RefineQuery::refine($this, $refiner, $keys);
        };

        if (! Builder::hasMacro('refineBy')) {
            Builder::macro('refineBy', $callback);
        }

        if (! EloquentBuilder::hasGlobalMacro('refineBy')) {
            EloquentBuilder::macro('refineBy', $callback);
        }

        if ($this->app->runningInConsole()) {
            $this->publishes([static::STUBS => $this->app->basePath('.stubs/refine-query.php')], 'phpstorm');

            $this->commands(Console\MakeRefinerCommand::class);
        }
    }
}