Skip to content

Commit fa4942a

Browse files
authored
Merge pull request #20 from moufmouf/cache_purger
Making sure the GraphQLite cache is purged when the cache:clear command is called.
2 parents 687a9d1 + 40be0d5 commit fa4942a

File tree

3 files changed

+45
-1
lines changed

3 files changed

+45
-1
lines changed

src/Listeners/CachePurger.php

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
<?php
2+
3+
4+
namespace TheCodingMachine\GraphQLite\Laravel\Listeners;
5+
6+
7+
use Psr\SimpleCache\CacheInterface;
8+
9+
class CachePurger
10+
{
11+
/**
12+
* @var CacheInterface
13+
*/
14+
private $cache;
15+
16+
public function __construct(CacheInterface $cache)
17+
{
18+
$this->cache = $cache;
19+
}
20+
21+
/**
22+
* Handle the event.
23+
*
24+
* @return void
25+
*/
26+
public function handle()
27+
{
28+
$this->cache->clear();
29+
}
30+
}

src/Providers/GraphQLiteServiceProvider.php

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,13 @@
44

55
use Illuminate\Contracts\Auth\Access\Gate;
66
use Illuminate\Contracts\Auth\Factory as AuthFactory;
7+
use Illuminate\Contracts\Events\Dispatcher;
78
use Symfony\Component\Cache\Adapter\ApcuAdapter;
89
use Symfony\Component\Cache\Adapter\PhpFilesAdapter;
910
use Symfony\Component\Cache\Psr16Cache;
1011
use TheCodingMachine\GraphQLite\Context\Context;
1112
use TheCodingMachine\GraphQLite\Exceptions\WebonyxErrorHandler;
13+
use TheCodingMachine\GraphQLite\Laravel\Listeners\CachePurger;
1214
use TheCodingMachine\GraphQLite\Laravel\Mappers\Parameters\ValidateFieldMiddleware;
1315
use TheCodingMachine\GraphQLite\Laravel\Mappers\PaginatorTypeMapper;
1416
use TheCodingMachine\GraphQLite\Laravel\Mappers\PaginatorTypeMapperFactory;
@@ -41,13 +43,14 @@ class GraphQLiteServiceProvider extends ServiceProvider
4143
*
4244
* @return void
4345
*/
44-
public function boot()
46+
public function boot(Dispatcher $events)
4547
{
4648
$this->publishes([
4749
__DIR__.'/../../config/graphqlite.php' => config_path('graphqlite.php'),
4850
], 'config');
4951

5052
$this->loadRoutesFrom(__DIR__.'/../routes/routes.php');
53+
$events->listen('cache:clearing', CachePurger::class);
5154
}
5255

5356
/**
@@ -88,6 +91,10 @@ public function register()
8891
}
8992
});
9093

94+
$this->app->singleton(CachePurger::class, static function (Application $app) {
95+
return new CachePurger($app['graphqliteCache']);
96+
});
97+
9198
$this->app->singleton(AuthenticationService::class, function(Application $app) {
9299
$guard = config('graphqlite.guard', $this->app['config']['auth.defaults.guard']);
93100
if (!is_array($guard)) {

tests/Providers/GraphQLiteServiceProviderTest.php

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

55

66
use Orchestra\Testbench\TestCase;
7+
use TheCodingMachine\GraphQLite\Laravel\Listeners\CachePurger;
78
use TheCodingMachine\GraphQLite\Schema;
89
use TheCodingMachine\TDBM\TDBMService;
910
use function json_decode;
@@ -163,4 +164,10 @@ public function testValidatorMultiple()
163164
$response = $this->json('POST', '/graphql', ['query' => '{ testValidatorMultiple(foo:"192.168.1.1") }']);
164165
$this->assertSame(200, $response->getStatusCode(), $response->getContent());
165166
}
167+
168+
public function testCachePurger(): void
169+
{
170+
$cachePurger = $this->app->make(CachePurger::class);
171+
$cachePurger->handle();
172+
}
166173
}

0 commit comments

Comments
 (0)