diff --git a/src/CheckpointServiceProvider.php b/src/CheckpointServiceProvider.php index 928f981..e55edd4 100755 --- a/src/CheckpointServiceProvider.php +++ b/src/CheckpointServiceProvider.php @@ -5,6 +5,7 @@ use Illuminate\Support\Facades\File; use Illuminate\Support\ServiceProvider; use Plank\Checkpoint\Commands\StartRevisioning; +use Plank\Checkpoint\Contracts\CheckpointStore; class CheckpointServiceProvider extends ServiceProvider { @@ -60,6 +61,8 @@ public function register() $this->mergeConfigFrom(__DIR__.'/../config/checkpoint.php', 'checkpoint'); $this->registerModels(); + + $this->registerCheckpointStore(); } /** @@ -76,4 +79,16 @@ public function registerModels() }); } } + + /** + * Register a concrete implementation of a CheckpointStore + */ + public function registerCheckpointStore() + { + $this->app->singleton(CheckpointStore::class, function () { + /** @var class-string $storeClass */ + $storeClass = config('checkpoint.store'); + return new $storeClass; + }); + } } diff --git a/src/Models/Checkpoint.php b/src/Models/Checkpoint.php index 28aae7f..9acb597 100644 --- a/src/Models/Checkpoint.php +++ b/src/Models/Checkpoint.php @@ -127,14 +127,7 @@ protected static function boot() */ public static function getStore(): CheckpointStore { - if (static::$store === null) { - /** @var class-string $storeClass */ - $storeClass = config('checkpoint.store'); - - static::$store = new $storeClass; - } - - return static::$store; + return app(CheckpointStore::class); } /** diff --git a/src/Observers/CheckpointObserver.php b/src/Observers/CheckpointObserver.php index 3616650..46b7c83 100644 --- a/src/Observers/CheckpointObserver.php +++ b/src/Observers/CheckpointObserver.php @@ -2,6 +2,7 @@ namespace Plank\Checkpoint\Observers; +use Plank\Checkpoint\Contracts\CheckpointStore; use Plank\Checkpoint\Models\Checkpoint; use Plank\Checkpoint\Models\Revision; @@ -35,8 +36,6 @@ public function updated(Checkpoint $checkpoint) */ public function deleting(Checkpoint $checkpoint) { - /** @var Checkpoint $checkpointClass */ - $checkpointClass = config('checkpoint.models.checkpoint'); $revision = app(Revision::class); @@ -45,9 +44,9 @@ public function deleting(Checkpoint $checkpoint) $revision->getTimelineKeyName() => null, ]); - $active = $checkpointClass::active(); + $active = app(CheckpointStore::class)->retrieve(); if ($active && $active->getKey() === $checkpoint->getKey()) { - $checkpointClass::clearActive(); + app(CheckpointStore::class)->clear(); } } } diff --git a/src/Scopes/RevisionScope.php b/src/Scopes/RevisionScope.php index 8aef95a..0bb6bf4 100644 --- a/src/Scopes/RevisionScope.php +++ b/src/Scopes/RevisionScope.php @@ -5,6 +5,7 @@ use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\Scope; +use Plank\Checkpoint\Contracts\CheckpointStore; use Plank\Checkpoint\Models\Checkpoint; use Plank\Checkpoint\Models\Revision; use Plank\Checkpoint\Models\Timeline; @@ -33,10 +34,7 @@ class RevisionScope implements Scope public function apply(Builder $builder, Model $model) { if (config('checkpoint.apply_global_scope', true)) { - /** @var Checkpoint $checkpointClass */ - $checkpointClass = config('checkpoint.models.checkpoint'); - - $builder->at($checkpointClass::active()); + $builder->at(app(CheckpointStore::class)->retrieve()); } }