Skip to content

Commit 6f92d4b

Browse files
committed
Improve Storage related interfaces
1 parent a6e87a4 commit 6f92d4b

8 files changed

+107
-38
lines changed
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
<?php
2+
3+
/**
4+
* PHP Domain Parser: Public Suffix List based URL parsing.
5+
*
6+
* @see http://github.com/jeremykendall/php-domain-parser for the canonical source repository
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace Pdp\Storage;
15+
16+
use JsonSerializable;
17+
18+
interface JsonSerializableCache
19+
{
20+
public function store(string $key, JsonSerializable $object): bool;
21+
22+
public function fetch(string $key): ?string;
23+
24+
public function forget(string $key): bool;
25+
}

src/Storage/JsonSerializablePsr16Cache.php

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
use function strtolower;
3535
use const FILTER_VALIDATE_INT;
3636

37-
final class JsonSerializablePsr16Cache
37+
final class JsonSerializablePsr16Cache implements JsonSerializableCache
3838
{
3939
private string $cachePrefix;
4040

@@ -131,11 +131,11 @@ public function fetch(string $key): ?string
131131
return $this->cache->get($this->cacheKey($key));
132132
}
133133

134-
public function forget(string $key, Throwable $exception = null): bool
134+
public function forget(string $key): bool
135135
{
136136
$result = $this->cache->delete($this->cacheKey($key));
137-
if (null !== $exception) {
138-
$this->logger->warning($exception->getMessage());
137+
if (!$result) {
138+
$this->logger->warning('The content associated with: `'.$key.'` could not be deleted.');
139139
}
140140

141141
return $result;

src/Storage/JsonSerializablePsr16CacheTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
use TypeError;
2424

2525
/**
26-
* @coversDefaultClass \Pdp\Storage\JsonSerializablePsr16Cache
26+
* @coversDefaultClass JsonSerializableCache
2727
*/
2828
final class JsonSerializablePsr16CacheTest extends TestCase
2929
{

src/Storage/PsrStorageFactory.php

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,9 @@ public function createPublicSuffixListStorage(string $cachePrefix = '', $cacheTt
5050
{
5151
return new RulesStorage(
5252
new RulesPsr18Client($this->client, $this->requestFactory),
53-
new RulesPsr16Cache(
54-
new JsonSerializablePsr16Cache($this->cache, $cachePrefix, $cacheTtl, $this->logger)
53+
new RulesCache(
54+
new JsonSerializablePsr16Cache($this->cache, $cachePrefix, $cacheTtl, $this->logger),
55+
$this->logger
5556
)
5657
);
5758
}
@@ -63,8 +64,9 @@ public function createRootZoneDatabaseStorage(string $cachePrefix = '', $cacheTt
6364
{
6465
return new TopLevelDomainsStorage(
6566
new TopLevelDomainsPsr18Client($this->client, $this->requestFactory),
66-
new TopLevelDomainsPsr16Cache(
67-
new JsonSerializablePsr16Cache($this->cache, $cachePrefix, $cacheTtl, $this->logger)
67+
new TopLevelDomainsCache(
68+
new JsonSerializablePsr16Cache($this->cache, $cachePrefix, $cacheTtl, $this->logger),
69+
$this->logger
6870
)
6971
);
7072
}

src/Storage/RulesPsr16Cache.php renamed to src/Storage/RulesCache.php

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,18 +15,22 @@
1515

1616
use Pdp\PublicSuffixList;
1717
use Pdp\Rules;
18+
use Psr\Log\LoggerInterface;
1819
use Throwable;
1920

20-
final class RulesPsr16Cache implements PublicSuffixListCache
21+
final class RulesCache implements PublicSuffixListCache
2122
{
22-
private JsonSerializablePsr16Cache $cache;
23+
private JsonSerializableCache $cache;
2324

24-
public function __construct(JsonSerializablePsr16Cache $cache)
25+
private ?LoggerInterface $logger;
26+
27+
public function __construct(JsonSerializableCache $cache, LoggerInterface $logger = null)
2528
{
2629
$this->cache = $cache;
30+
$this->logger = $logger;
2731
}
2832

29-
public function fetch(string $uri): ?Rules
33+
public function fetch(string $uri): ?PublicSuffixList
3034
{
3135
$cacheData = $this->cache->fetch($uri);
3236
if (null === $cacheData) {
@@ -36,8 +40,10 @@ public function fetch(string $uri): ?Rules
3640
try {
3741
$rules = Rules::fromJsonString($cacheData);
3842
} catch (Throwable $exception) {
39-
$this->cache->forget($uri, $exception);
40-
43+
$this->cache->forget($uri);
44+
if (null !== $this->logger) {
45+
$this->logger->error($exception->getMessage());
46+
}
4147
return null;
4248
}
4349

src/Storage/RulesPsr16CacheTest.php renamed to src/Storage/RulesCacheTest.php

Lines changed: 24 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
use function json_encode;
2424

2525
/**
26-
* @coversDefaultClass \Pdp\Storage\RulesPsr16Cache
26+
* @coversDefaultClass \Pdp\Storage\RulesCache
2727
*/
28-
final class RulesPsr16CacheTest extends TestCase
28+
final class RulesCacheTest extends TestCase
2929
{
3030
public function testItReturnsNullIfTheCacheDoesNotExists(): void
3131
{
@@ -70,7 +70,7 @@ public function has($key)
7070
}
7171
};
7272

73-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', '1 DAY'));
73+
$pslCache = new RulesCache(new JsonSerializablePsr16Cache($cache, 'pdp_', '1 DAY'));
7474

7575
self::assertNull($pslCache->fetch('http://www.example.com'));
7676
}
@@ -118,7 +118,7 @@ public function has($key)
118118
}
119119
};
120120

121-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400));
121+
$pslCache = new RulesCache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400));
122122

123123
self::assertEquals(
124124
Rules::fromPath(dirname(__DIR__, 2).'/test_data/public_suffix_list.dat'),
@@ -188,8 +188,10 @@ public function logs(): array
188188
}
189189
};
190190

191-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400, $logger));
192-
191+
$pslCache = new RulesCache(
192+
new JsonSerializablePsr16Cache($cache, 'pdp_', 86400, $logger),
193+
$logger
194+
);
193195
self::assertNull($pslCache->fetch('http://www.example.com'));
194196
self::assertSame('Failed to JSON decode the string: Syntax error.', $logger->logs()[0]);
195197
}
@@ -256,7 +258,10 @@ public function logs(): array
256258
}
257259
};
258260

259-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateTimeImmutable('+1 DAY'), $logger));
261+
$pslCache = new RulesCache(
262+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateTimeImmutable('+1 DAY'), $logger),
263+
$logger
264+
);
260265

261266
self::assertNull($pslCache->fetch('http://www.example.com'));
262267
self::assertSame(
@@ -328,7 +333,10 @@ public function logs(): array
328333
};
329334

330335
$psl = Rules::fromPath(dirname(__DIR__, 2).'/test_data/public_suffix_list.dat');
331-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger));
336+
$pslCache = new RulesCache(
337+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger),
338+
$logger
339+
);
332340

333341
self::assertTrue($pslCache->store('http://www.example.com', $psl));
334342
self::assertSame('The content associated with: `http://www.example.com` was stored.', $logger->logs()[0]);
@@ -397,7 +405,10 @@ public function logs(): array
397405
};
398406

399407
$psl = Rules::fromPath(dirname(__DIR__, 2).'/test_data/public_suffix_list.dat');
400-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger));
408+
$pslCache = new RulesCache(
409+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger),
410+
$logger
411+
);
401412

402413
self::assertFalse($pslCache->store('http://www.example.com', $psl));
403414
self::assertSame('The content associated with: `http://www.example.com` could not be stored.', $logger->logs()[0]);
@@ -468,7 +479,10 @@ public function logs(): array
468479
};
469480

470481
$psl = Rules::fromPath(dirname(__DIR__, 2).'/test_data/public_suffix_list.dat');
471-
$pslCache = new RulesPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger));
482+
$pslCache = new RulesCache(
483+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger),
484+
$logger
485+
);
472486

473487
self::assertFalse($pslCache->store('http://www.example.com', $psl));
474488
self::assertSame('The content associated with: `http://www.example.com` could not be cached: Something went wrong.', $logger->logs()[0]);

src/Storage/TopLevelDomainsPsr16Cache.php renamed to src/Storage/TopLevelDomainsCache.php

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,15 +15,19 @@
1515

1616
use Pdp\RootZoneDatabase;
1717
use Pdp\TopLevelDomains;
18+
use Psr\Log\LoggerInterface;
1819
use Throwable;
1920

20-
final class TopLevelDomainsPsr16Cache implements RootZoneDatabaseCache
21+
final class TopLevelDomainsCache implements RootZoneDatabaseCache
2122
{
22-
private JsonSerializablePsr16Cache $cache;
23+
private JsonSerializableCache $cache;
2324

24-
public function __construct(JsonSerializablePsr16Cache $cache)
25+
private ?LoggerInterface $logger;
26+
27+
public function __construct(JsonSerializableCache $cache, LoggerInterface $logger = null)
2528
{
2629
$this->cache = $cache;
30+
$this->logger = $logger;
2731
}
2832

2933
public function fetch(string $uri): ?RootZoneDatabase
@@ -36,7 +40,10 @@ public function fetch(string $uri): ?RootZoneDatabase
3640
try {
3741
$topLevelDomains = TopLevelDomains::fromJsonString($cacheData);
3842
} catch (Throwable $exception) {
39-
$this->cache->forget($uri, $exception);
43+
$this->cache->forget($uri);
44+
if (null !== $this->logger) {
45+
$this->logger->error($exception->getMessage());
46+
}
4047

4148
return null;
4249
}

src/Storage/TopLevelDomainsPsr16CacheTest.php renamed to src/Storage/TopLevelDomainsCacheTest.php

Lines changed: 24 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -23,9 +23,9 @@
2323
use function json_encode;
2424

2525
/**
26-
* @coversDefaultClass \Pdp\Storage\TopLevelDomainsPsr16Cache
26+
* @coversDefaultClass \Pdp\Storage\TopLevelDomainsCache
2727
*/
28-
final class TopLevelDomainsPsr16CacheTest extends TestCase
28+
final class TopLevelDomainsCacheTest extends TestCase
2929
{
3030
public function testItReturnsNullIfTheCacheDoesNotExists(): void
3131
{
@@ -70,7 +70,7 @@ public function has($key)
7070
}
7171
};
7272

73-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', '1 DAY'));
73+
$cache = new TopLevelDomainsCache(new JsonSerializablePsr16Cache($cache, 'pdp_', '1 DAY'));
7474

7575
self::assertNull($cache->fetch('http://www.example.com'));
7676
}
@@ -118,7 +118,7 @@ public function has($key)
118118
}
119119
};
120120

121-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400));
121+
$cache = new TopLevelDomainsCache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400));
122122

123123
self::assertEquals(
124124
TopLevelDomains::fromPath(dirname(__DIR__, 2).'/test_data/tlds-alpha-by-domain.txt'),
@@ -188,7 +188,10 @@ public function logs(): array
188188
}
189189
};
190190

191-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400, $logger));
191+
$cache = new TopLevelDomainsCache(
192+
new JsonSerializablePsr16Cache($cache, 'pdp_', 86400, $logger),
193+
$logger
194+
);
192195

193196
self::assertNull($cache->fetch('http://www.example.com'));
194197
self::assertSame('Failed to JSON decode the string: Syntax error.', $logger->logs()[0]);
@@ -256,7 +259,10 @@ public function logs(): array
256259
}
257260
};
258261

259-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', 86400, $logger));
262+
$cache = new TopLevelDomainsCache(
263+
new JsonSerializablePsr16Cache($cache, 'pdp_', 86400, $logger),
264+
$logger
265+
);
260266
self::assertNull($cache->fetch('http://www.example.com'));
261267
self::assertSame(
262268
'The decoded hashmap structure is missing at least one of the required properties: `records`, `version` and/or `modifiedDate`.',
@@ -327,7 +333,10 @@ public function logs(): array
327333
};
328334

329335
$rzd = TopLevelDomains::fromPath(dirname(__DIR__, 2).'/test_data/tlds-alpha-by-domain.txt');
330-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger));
336+
$cache = new TopLevelDomainsCache(
337+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger),
338+
$logger
339+
);
331340

332341
self::assertTrue($cache->store('http://www.example.com', $rzd));
333342
self::assertSame('The content associated with: `http://www.example.com` was stored.', $logger->logs()[0]);
@@ -396,7 +405,10 @@ public function logs(): array
396405
};
397406

398407
$rzd = TopLevelDomains::fromPath(dirname(__DIR__, 2).'/test_data/tlds-alpha-by-domain.txt');
399-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger));
408+
$cache = new TopLevelDomainsCache(
409+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger),
410+
$logger
411+
);
400412

401413
self::assertFalse($cache->store('http://www.example.com', $rzd));
402414
self::assertSame('The content associated with: `http://www.example.com` could not be stored.', $logger->logs()[0]);
@@ -467,7 +479,10 @@ public function logs(): array
467479
};
468480

469481
$rzd = TopLevelDomains::fromPath(dirname(__DIR__, 2).'/test_data/tlds-alpha-by-domain.txt');
470-
$cache = new TopLevelDomainsPsr16Cache(new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger));
482+
$cache = new TopLevelDomainsCache(
483+
new JsonSerializablePsr16Cache($cache, 'pdp_', new \DateInterval('P1D'), $logger),
484+
$logger
485+
);
471486

472487
self::assertFalse($cache->store('http://www.example.com', $rzd));
473488
self::assertSame('The content associated with: `http://www.example.com` could not be cached: Something went wrong.', $logger->logs()[0]);

0 commit comments

Comments
 (0)