diff --git a/config/data.php b/config/data.php index d4d360c86..30045c1ba 100644 --- a/config/data.php +++ b/config/data.php @@ -80,6 +80,7 @@ * store should be used. */ 'structure_caching' => [ + 'enabled' => true, 'directories' => [app_path('Data')], 'cache' => [ 'store' => env('CACHE_DRIVER', 'file'), diff --git a/docs/installation-setup.md b/docs/installation-setup.md index 7c03dc9d3..9f2ff9ac5 100644 --- a/docs/installation-setup.md +++ b/docs/installation-setup.md @@ -94,6 +94,7 @@ return [ * store should be used. */ 'structure_caching' => [ + 'enabled' => true, 'directories' => [app_path('Data')], 'cache' => [ 'store' => env('CACHE_DRIVER', 'file'), diff --git a/src/Commands/DataStructuresCacheCommand.php b/src/Commands/DataStructuresCacheCommand.php index 5d7ba0396..eaf145de3 100644 --- a/src/Commands/DataStructuresCacheCommand.php +++ b/src/Commands/DataStructuresCacheCommand.php @@ -19,6 +19,12 @@ public function handle( DataStructureCache $dataStructureCache, DataClassFactory $dataClassFactory, ): void { + if(config('data.structure_caching.enabled') === false){ + $this->error('Data structure caching is not enabled'); + + return; + } + $this->components->info('Caching data structures...'); $dataClasses = DataClassFinder::fromConfig(config('data.structure_caching'))->classes(); diff --git a/src/LaravelDataServiceProvider.php b/src/LaravelDataServiceProvider.php index 1143b8177..6e4fb16d6 100644 --- a/src/LaravelDataServiceProvider.php +++ b/src/LaravelDataServiceProvider.php @@ -31,7 +31,13 @@ public function packageRegistered(): void $this->app->singleton( DataConfig::class, - fn () => $this->app->make(DataStructureCache::class)->getConfig() ?? DataConfig::createFromConfig(config('data')) + function () { + if (! config('data.structure_caching.enabled')) { + return DataConfig::createFromConfig(config('data')); + } + + return $this->app->make(DataStructureCache::class)->getConfig() ?? DataConfig::createFromConfig(config('data')); + } ); $this->app->beforeResolving(BaseData::class, function ($class, $parameters, $app) { diff --git a/src/Support/Caching/DataStructureCache.php b/src/Support/Caching/DataStructureCache.php index b94f07495..3d24fcad1 100644 --- a/src/Support/Caching/DataStructureCache.php +++ b/src/Support/Caching/DataStructureCache.php @@ -15,7 +15,7 @@ class DataStructureCache public function __construct( protected array $cacheConfig, ) { - $this->store = cache()->store($this->cacheConfig['store'])->getStore(); + $this->store = cache()->store($this->cacheConfig['store'])?->getStore(); $this->prefix = $this->cacheConfig['prefix'] ? "{$this->cacheConfig['prefix']}." : ''; } diff --git a/tests/DataTest.php b/tests/DataTest.php index 47edb71cb..09a9b0e65 100644 --- a/tests/DataTest.php +++ b/tests/DataTest.php @@ -2,6 +2,7 @@ use Illuminate\Contracts\Support\Responsable; use Illuminate\Validation\ValidationException; +use Spatie\LaravelData\Attributes\DataCollectionOf; use Spatie\LaravelData\Concerns\AppendableData; use Spatie\LaravelData\Concerns\BaseData; use Spatie\LaravelData\Concerns\ContextableData; @@ -20,6 +21,7 @@ use Spatie\LaravelData\Contracts\ValidateableData as ValidateableDataContract; use Spatie\LaravelData\Contracts\WrappableData as WrappableDataContract; use Spatie\LaravelData\Data; +use Spatie\LaravelData\DataCollection; use Spatie\LaravelData\Dto; use Spatie\LaravelData\Resource; use Spatie\LaravelData\Tests\Fakes\SimpleData; diff --git a/tests/Support/Caching/CachedDataConfigTest.php b/tests/Support/Caching/CachedDataConfigTest.php index 885acb733..0d2e4c94f 100644 --- a/tests/Support/Caching/CachedDataConfigTest.php +++ b/tests/Support/Caching/CachedDataConfigTest.php @@ -1,6 +1,7 @@ toBeInstanceOf(DataClass::class) ->name->toBe(SimpleData::class); }); + +it('can disable caching', function (){ + config()->set('data.structure_caching.enabled', false); + + Cache::expects('get')->once(); + + $data = SimpleData::from('Hello world'); + + cache()->get('something-just-to-test-the-mock'); +});