Skip to content

Commit e3d1fcb

Browse files
committed
Add custom cache store feature
1 parent f9ce04e commit e3d1fcb

File tree

6 files changed

+97
-3
lines changed

6 files changed

+97
-3
lines changed

config/laravel-model-caching.php

+5
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?php
2+
3+
return [
4+
'store' => env('MODEL_CACHE_STORE'),
5+
];

src/Providers/Service.php

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Providers;
2+
3+
use Illuminate\Support\ServiceProvider;
4+
5+
class Service extends ServiceProvider
6+
{
7+
protected $defer = false;
8+
9+
public function boot()
10+
{
11+
$configPath = __DIR__ . '/../../config/laravel-model-caching.php';
12+
$this->mergeConfigFrom($configPath, 'laravel-model-caching');
13+
}
14+
}

src/Traits/Cachable.php

+4
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,10 @@ protected function cache(array $tags = [])
1313
{
1414
$cache = cache();
1515

16+
if (config('laravel-model-caching.store')) {
17+
$cache = $cache->store(config('laravel-model-caching.store'));
18+
}
19+
1620
if (is_subclass_of($cache->getStore(), TaggableStore::class)) {
1721
if (is_a($this, CachedModel::class)) {
1822
array_push($tags, str_slug(get_called_class()));

tests/CreatesApplication.php

+2
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
<?php namespace GeneaLabs\LaravelModelCaching\Tests;
22

3+
use GeneaLabs\LaravelModelCaching\Providers\Service as LaravelModelCachingService;
34
use Illuminate\Contracts\Console\Kernel;
45
use Illuminate\Database\Eloquent\Factory;
56

@@ -13,6 +14,7 @@ public function createApplication()
1314
$app->afterResolving('migrator', function ($migrator) {
1415
$migrator->path(__DIR__ . '/database/migrations');
1516
});
17+
$app->register(LaravelModelCachingService::class);
1618

1719
return $app;
1820
}

tests/Unit/CachedModelTest.php

-3
Original file line numberDiff line numberDiff line change
@@ -62,9 +62,6 @@ public function testAllModelResultsCreatesCache()
6262
$this->assertEmpty($liveResults->diffAssoc($cachedResults));
6363
}
6464

65-
/**
66-
* @group test
67-
**/
6865
public function testScopeDisablesCaching()
6966
{
7067
$key = 'genealabslaravelmodelcachingtestsfixturesauthor';

tests/Unit/Traits/CachableTest.php

+72
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,72 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Unit;
2+
3+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
4+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
5+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Profile;
6+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
7+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store;
8+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
9+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedBook;
10+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile;
11+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
12+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore;
13+
use GeneaLabs\LaravelModelCaching\Tests\TestCase;
14+
use Illuminate\Foundation\Testing\RefreshDatabase;
15+
16+
class CachableTest extends TestCase
17+
{
18+
use RefreshDatabase;
19+
20+
public function setUp()
21+
{
22+
parent::setUp();
23+
24+
cache()->flush();
25+
$publishers = factory(Publisher::class, 10)->create();
26+
factory(Author::class, 10)->create()
27+
->each(function ($author) use ($publishers) {
28+
factory(Book::class, random_int(2, 10))->make()
29+
->each(function ($book) use ($author, $publishers) {
30+
$book->author()->associate($author);
31+
$book->publisher()->associate($publishers[rand(0, 9)]);
32+
$book->save();
33+
});
34+
factory(Profile::class)->make([
35+
'author_id' => $author->id,
36+
]);
37+
});
38+
39+
$bookIds = (new Book)->all()->pluck('id');
40+
factory(Store::class, 10)->create()
41+
->each(function ($store) use ($bookIds) {
42+
$store->books()->sync(rand($bookIds->min(), $bookIds->max()));
43+
});
44+
cache()->flush();
45+
}
46+
47+
public function testSpecifyingAlternateCacheDriver()
48+
{
49+
$configCacheStores = config('cache.stores');
50+
$configCacheStores['customCache'] = ['driver' => 'array'];
51+
config(['cache.stores' => $configCacheStores]);
52+
config(['laravel-model-caching.store' => 'customCache']);
53+
$key = 'genealabslaravelmodelcachingtestsfixturesauthor';
54+
$tags = ['genealabslaravelmodelcachingtestsfixturesauthor'];
55+
56+
$authors = (new Author)
57+
->all();
58+
$defaultcacheResults = cache()
59+
->tags($tags)
60+
->get($key);
61+
$customCacheResults = cache()
62+
->store('customCache')
63+
->tags($tags)
64+
->get($key);
65+
$liveResults = (new UncachedAuthor)
66+
->all();
67+
68+
$this->assertEquals($customCacheResults, $authors);
69+
$this->assertNull($defaultcacheResults);
70+
$this->assertEmpty($liveResults->diffAssoc($customCacheResults));
71+
}
72+
}

0 commit comments

Comments
 (0)