Skip to content

Commit 972e9a1

Browse files
committed
add context provider
1 parent e8dae64 commit 972e9a1

8 files changed

+63
-20
lines changed

src/Nuxed/Asset/Context/Context.hack

+9-2
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,14 @@
11
namespace Nuxed\Asset\Context;
22

3-
class Context implements IContext {
4-
public function __construct(private string $basePath, private bool $secure) {}
3+
final class Context implements IContext {
4+
private function __construct(
5+
private string $basePath,
6+
private bool $secure,
7+
) {}
8+
9+
public static function create(string $base_path, bool $secure): Context {
10+
return new Context($base_path, $secure);
11+
}
512

613
/**
714
* {@inheritdoc}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
namespace Nuxed\Asset\Context;
2+
3+
final class ContextProvider implements IContextProvider {
4+
private function __construct(private IContext $context) {}
5+
6+
public static function create(
7+
string $base_path,
8+
bool $secure,
9+
): ContextProvider {
10+
return new ContextProvider(Context::create($base_path, $secure));
11+
}
12+
13+
public static function forContext(IContext $context): ContextProvider {
14+
return new ContextProvider($context);
15+
}
16+
17+
public function getContext(): IContext {
18+
return $this->context;
19+
}
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
namespace Nuxed\Asset\Context;
2+
3+
interface IContextProvider {
4+
/**
5+
* Provide context.
6+
*/
7+
public function getContext(): IContext;
8+
}

src/Nuxed/Asset/Package.hack

+10-4
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,19 @@ use namespace HH\Lib\Str;
77
*/
88
<<__Sealed(UrlPackage::class, PathPackage::class)>>
99
class Package implements IPackage {
10-
private Context\IContext $context;
10+
private (function(): Context\IContext) $contextProvider;
1111

1212
public function __construct(
1313
private VersionStrategy\IVersionStrategy $versionStrategy,
14-
?Context\IContext $context = null,
14+
?Context\IContextProvider $contextProvider = null,
1515
) {
16-
$this->context = $context ?? new Context\NullContext();
16+
$this->contextProvider = (): Context\IContext ==> {
17+
if ($contextProvider is nonnull) {
18+
return $contextProvider->getContext();
19+
}
20+
21+
return new Context\NullContext();
22+
};
1723
}
1824

1925
/**
@@ -35,7 +41,7 @@ class Package implements IPackage {
3541
}
3642

3743
protected function getContext(): Context\IContext {
38-
return $this->context;
44+
return ($this->contextProvider)();
3945
}
4046

4147
protected function getVersionStrategy(): VersionStrategy\IVersionStrategy {

src/Nuxed/Asset/PathPackage.hack

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
namespace Nuxed\Asset;
22

33
use namespace HH\Lib\Str;
4-
use type Nuxed\Asset\Context\IContext;
54
use type Nuxed\Asset\VersionStrategy\IVersionStrategy;
65

76
/**
@@ -21,10 +20,9 @@ final class PathPackage extends Package {
2120
public function __construct(
2221
string $basePath,
2322
IVersionStrategy $versionStrategy,
24-
?IContext $context = null,
23+
?Context\IContextProvider $contextProvider = null,
2524
) {
26-
$context ??= new Context\NullContext();
27-
parent::__construct($versionStrategy, $context);
25+
parent::__construct($versionStrategy, $contextProvider);
2826

2927
if ('' === $basePath) {
3028
$this->basePath = '/';

src/Nuxed/Asset/UrlPackage.hack

+2-3
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,9 @@ final class UrlPackage extends Package {
2626
public function __construct(
2727
Container<string> $baseUrls,
2828
VersionStrategy\IVersionStrategy $versionStrategy,
29-
?Context\IContext $context = null,
29+
?Context\IContextProvider $contextProvider = null,
3030
) {
31-
$context ??= new Context\NullContext();
32-
parent::__construct($versionStrategy, $context);
31+
parent::__construct($versionStrategy, $contextProvider);
3332

3433
if (C\is_empty($baseUrls)) {
3534
throw new Exception\LogicException(

tests/Nuxed/Asset/PathPackageTest.hack

+7-4
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,7 @@ class PathPackageTest extends HackTest {
5151
$package = new Asset\PathPackage(
5252
$basePath,
5353
new Asset\VersionStrategy\StaticVersionStrategy('v1', $format),
54-
$this->getContext($basePathRequest),
54+
$this->getContextProvider($basePathRequest),
5555
);
5656
expect(await $package->getUrl($path))->toBeSame($expected);
5757
}
@@ -80,14 +80,17 @@ class PathPackageTest extends HackTest {
8080
$package = new Asset\PathPackage(
8181
'/subdirectory',
8282
$versionStrategy,
83-
$this->getContext('/bar'),
83+
$this->getContextProvider('/bar'),
8484
);
8585
expect(await $package->getUrl('main.css'))->toBeSame(
8686
'https://cdn.com/bar/main.css?',
8787
);
8888
}
8989

90-
private function getContext(string $basePath): Asset\Context\IContext {
91-
return new Asset\Context\Context($basePath, false);
90+
private function getContextProvider(
91+
string $base_path,
92+
bool $secure = false,
93+
): Asset\Context\IContextProvider {
94+
return Asset\Context\ContextProvider::create($base_path, $secure);
9295
}
9396
}

tests/Nuxed/Asset/UrlPackageTest.hack

+5-3
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ class UrlPackageTest extends HackTest {
148148
$package = new Asset\UrlPackage(
149149
$baseUrls,
150150
new Asset\VersionStrategy\StaticVersionStrategy('v1'),
151-
$this->getContext($secure),
151+
$this->getContextProvider($secure),
152152
);
153153
expect(await $package->getUrl($path))->toBeSame($expected);
154154
}
@@ -250,7 +250,9 @@ class UrlPackageTest extends HackTest {
250250
];
251251
}
252252

253-
private function getContext(bool $secure): Asset\Context\IContext {
254-
return new Asset\Context\Context('', $secure);
253+
private function getContextProvider(
254+
bool $secure,
255+
): Asset\Context\IContextProvider {
256+
return Asset\Context\ContextProvider::create('', $secure);
255257
}
256258
}

0 commit comments

Comments
 (0)