Skip to content

Commit f8aafe2

Browse files
committed
Update cache-cooldown checks to avoid calculating cooldown if not set
1 parent 9128b7c commit f8aafe2

File tree

5 files changed

+41
-14
lines changed

5 files changed

+41
-14
lines changed

README.md

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,19 @@ For example you might have a busy site where comments are submitted at a high
124124
rate, and you don't want every comment submission to invalidate the cache. While
125125
I don't necessarily recommend this, you might experiment it's effectiveness.
126126

127-
It can be implemented like so:
127+
To ise it, it must be enabled in the model:
128+
```php
129+
class MyModel extends Model
130+
{
131+
use Cachable;
132+
133+
protected $useCacheCooldown = true;
134+
135+
// ...
136+
}
137+
```
138+
139+
After that it can be implemented in queries:
128140
```php
129141
(new Comment)
130142
->withCacheCooldownSeconds(30)

src/Traits/Caching.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,10 @@ protected function makeCacheTags() : array
9393

9494
public function getModelCacheCooldown(Model $instance) : array
9595
{
96+
if (! $instance->useCacheCooldown) {
97+
return [null, null, null];
98+
}
99+
96100
$cachePrefix = $this->getCachePrefix();
97101
$modelClassName = get_class($instance);
98102
[$cacheCooldown, $invalidatedAt, $savedAt] = $this

src/Traits/ModelCaching.php

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
trait ModelCaching
88
{
9+
protected $useCacheCooldown = false;
10+
911
public static function all($columns = ['*'])
1012
{
1113
if (config('laravel-model-caching.disabled')) {
@@ -105,4 +107,9 @@ public function scopeWithCacheCooldownSeconds(
105107

106108
return $query;
107109
}
110+
111+
public function getUseCacheCooldownAttribute() : bool
112+
{
113+
return $this->useCacheCooldown;
114+
}
108115
}

tests/Fixtures/AuthorWithCooldown.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php namespace GeneaLabs\LaravelModelCaching\Tests\Fixtures;
2+
3+
use GeneaLabs\LaravelModelCaching\Traits\Cachable;
4+
use Illuminate\Database\Eloquent\Builder;
5+
use Illuminate\Database\Eloquent\Relations\HasMany;
6+
use Illuminate\Database\Eloquent\Relations\HasOne;
7+
8+
class AuthorWithCooldown extends Author
9+
{
10+
protected $table = "authors";
11+
protected $useCacheCooldown = true;
12+
}

tests/Integration/CachedModelTest.php

Lines changed: 5 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,10 @@
22

33
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Author;
44
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Book;
5-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Observers\AuthorObserver;
65
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\PrefixedAuthor;
7-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Profile;
8-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Publisher;
9-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\Store;
106
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedAuthor;
11-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedBook;
12-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedProfile;
13-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedPublisher;
14-
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\UncachedStore;
157
use GeneaLabs\LaravelModelCaching\Tests\IntegrationTestCase;
16-
use Illuminate\Foundation\Testing\RefreshDatabase;
8+
use GeneaLabs\LaravelModelCaching\Tests\Fixtures\AuthorWithCooldown;
179

1810
class CachedModelTest extends IntegrationTestCase
1911
{
@@ -155,17 +147,17 @@ public function testWhereHasWithClosureIsBeingCached()
155147

156148
public function testModelCacheDoesntInvalidateDuringCooldownPeriod()
157149
{
158-
$authors = (new Author)
150+
$authors = (new AuthorWithCooldown)
159151
->withCacheCooldownSeconds(1)
160152
->get();
161153

162154
factory(Author::class, 1)->create();
163-
$authorsDuringCooldown = (new Author)
155+
$authorsDuringCooldown = (new AuthorWithCooldown)
164156
->get();
165157
$uncachedAuthors = (new UncachedAuthor)
166158
->get();
167159
sleep(2);
168-
$authorsAfterCooldown = (new Author)
160+
$authorsAfterCooldown = (new AuthorWithCooldown)
169161
->get();
170162

171163
$this->assertCount(10, $authors);
@@ -176,7 +168,7 @@ public function testModelCacheDoesntInvalidateDuringCooldownPeriod()
176168

177169
public function testModelCacheDoesInvalidateWhenNoCooldownPeriod()
178170
{
179-
$authors = (new Author)
171+
$authors = (new AuthorWithCooldown)
180172
->get();
181173

182174
factory(Author::class, 1)->create();

0 commit comments

Comments
 (0)