diff --git a/CHANGELOG.md b/CHANGELOG.md index 679457d..fc0f61d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] +## [0.0.3] - 2025-04-26 + +### Added +- Prepend / Append composition for handy path parts + ## [0.0.2] - 2025-04-22 ### Added @@ -16,6 +21,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### Added - StaticHttpClient, HostnameAwareResolver classes -[Unreleased]: https://github.com/FreeElephants/static-http-client/compare/0.0.2...HEAD +[Unreleased]: https://github.com/FreeElephants/static-http-client/compare/0.0.3...HEAD +[0.0.3]: https://github.com/FreeElephants/static-http-client/releases/tag/0.0.3 [0.0.2]: https://github.com/FreeElephants/static-http-client/releases/tag/0.0.2 [0.0.1]: https://github.com/FreeElephants/static-http-client/releases/tag/0.0.1 diff --git a/README.md b/README.md index 9066a93..947ddc7 100644 --- a/README.md +++ b/README.md @@ -19,10 +19,10 @@ public function test() $responseFactory, new \FreeElephants\StaticHttpClient\PathResolver\PathBuilderBasedResolver( new \FreeElephants\StaticHttpClient\PathBuilder\Composite( - new \FreeElephants\StaticHttpClient\PathBuilder\BasePath(__DIR__), - new \FreeElephants\StaticHttpClient\PathBuilder\HostnameAsDirectory(), + new \FreeElephants\StaticHttpClient\PathBuilder\PrependBasePath(__DIR__), + new \FreeElephants\StaticHttpClient\PathBuilder\PrependHostnameAsDirectory(), new \FreeElephants\StaticHttpClient\PathBuilder\AppendRequestPath(), - new \FreeElephants\StaticHttpClient\PathBuilder\DefaultFileExtension('.json'), + new \FreeElephants\StaticHttpClient\PathBuilder\AppendDefaultFileExtension('.json'), ) ) ); diff --git a/src/FreeElephants/StaticHttpClient/PathBuilder/DefaultFileExtension.php b/src/FreeElephants/StaticHttpClient/PathBuilder/AppendDefaultFileExtension.php similarity index 86% rename from src/FreeElephants/StaticHttpClient/PathBuilder/DefaultFileExtension.php rename to src/FreeElephants/StaticHttpClient/PathBuilder/AppendDefaultFileExtension.php index 4b4c592..cb81c94 100644 --- a/src/FreeElephants/StaticHttpClient/PathBuilder/DefaultFileExtension.php +++ b/src/FreeElephants/StaticHttpClient/PathBuilder/AppendDefaultFileExtension.php @@ -4,7 +4,7 @@ use Psr\Http\Message\RequestInterface; -class DefaultFileExtension implements PathBuilderInterface +class AppendDefaultFileExtension implements PathBuilderInterface { private string $fileExtension; diff --git a/src/FreeElephants/StaticHttpClient/PathBuilder/AppendHostnameAsDirectory.php b/src/FreeElephants/StaticHttpClient/PathBuilder/AppendHostnameAsDirectory.php new file mode 100644 index 0000000..2bf5b1c --- /dev/null +++ b/src/FreeElephants/StaticHttpClient/PathBuilder/AppendHostnameAsDirectory.php @@ -0,0 +1,14 @@ +getUri()->getHost(); + } + +} diff --git a/src/FreeElephants/StaticHttpClient/PathBuilder/BasePath.php b/src/FreeElephants/StaticHttpClient/PathBuilder/PrependBasePath.php similarity index 58% rename from src/FreeElephants/StaticHttpClient/PathBuilder/BasePath.php rename to src/FreeElephants/StaticHttpClient/PathBuilder/PrependBasePath.php index 6f02637..8ad6149 100644 --- a/src/FreeElephants/StaticHttpClient/PathBuilder/BasePath.php +++ b/src/FreeElephants/StaticHttpClient/PathBuilder/PrependBasePath.php @@ -4,18 +4,17 @@ use Psr\Http\Message\RequestInterface; -class BasePath implements PathBuilderInterface +class PrependBasePath implements PathBuilderInterface { private string $basePath; public function __construct(string $basePath) { - - $this->basePath = $basePath; + $this->basePath = rtrim($basePath, DIRECTORY_SEPARATOR); } public function build(RequestInterface $request, string $path = ''): string { - return $this->basePath . $path; + return $this->basePath . DIRECTORY_SEPARATOR . ltrim($path, DIRECTORY_SEPARATOR); } } diff --git a/src/FreeElephants/StaticHttpClient/PathBuilder/HostnameAsDirectory.php b/src/FreeElephants/StaticHttpClient/PathBuilder/PrependHostnameAsDirectory.php similarity index 79% rename from src/FreeElephants/StaticHttpClient/PathBuilder/HostnameAsDirectory.php rename to src/FreeElephants/StaticHttpClient/PathBuilder/PrependHostnameAsDirectory.php index fee3b87..5b3383a 100644 --- a/src/FreeElephants/StaticHttpClient/PathBuilder/HostnameAsDirectory.php +++ b/src/FreeElephants/StaticHttpClient/PathBuilder/PrependHostnameAsDirectory.php @@ -4,7 +4,7 @@ use Psr\Http\Message\RequestInterface; -class HostnameAsDirectory implements PathBuilderInterface +class PrependHostnameAsDirectory implements PathBuilderInterface { public function build(RequestInterface $request, string $path = ''): string { diff --git a/tests/FreeElephants/StaticHttpClient/PathBuilder/CompositeTest.php b/tests/FreeElephants/StaticHttpClient/PathBuilder/CompositeTest.php index c9d027f..97b4471 100644 --- a/tests/FreeElephants/StaticHttpClient/PathBuilder/CompositeTest.php +++ b/tests/FreeElephants/StaticHttpClient/PathBuilder/CompositeTest.php @@ -12,12 +12,13 @@ public function testBuild(): void { $composite = new Composite( new AppendRequestPath(), - new DefaultFileExtension(), - new HostnameAsDirectory(), + new PrependHostnameAsDirectory(), + new PrependBasePath('/root'), + new AppendDefaultFileExtension(), ); $path = $composite->build(new Request('GET', 'http://example.com/foo')); - $this->assertSame('example.com/foo.json', $path, 'Composite should build path from all builders'); + $this->assertSame('/root/example.com/foo.json', $path, 'Composite should build path from all builders'); } } diff --git a/tests/FreeElephants/StaticHttpClient/PathResolver/PathBuilderBasedResolverTest.php b/tests/FreeElephants/StaticHttpClient/PathResolver/PathBuilderBasedResolverTest.php index b99cd17..0188d95 100644 --- a/tests/FreeElephants/StaticHttpClient/PathResolver/PathBuilderBasedResolverTest.php +++ b/tests/FreeElephants/StaticHttpClient/PathResolver/PathBuilderBasedResolverTest.php @@ -4,10 +4,11 @@ use FreeElephants\StaticHttpClient\AbstractTestCase; use FreeElephants\StaticHttpClient\PathBuilder\AppendRequestPath; -use FreeElephants\StaticHttpClient\PathBuilder\BasePath; +use FreeElephants\StaticHttpClient\PathBuilder\PrependBasePath; use FreeElephants\StaticHttpClient\PathBuilder\Composite; -use FreeElephants\StaticHttpClient\PathBuilder\DefaultFileExtension; +use FreeElephants\StaticHttpClient\PathBuilder\AppendDefaultFileExtension; use FreeElephants\StaticHttpClient\PathBuilder\PathBuilderInterface; +use FreeElephants\StaticHttpClient\PathBuilder\PrependHostnameAsDirectory; use FreeElephants\StaticHttpClient\PathResolver\Exception\UnresolvablePathException; use Nyholm\Psr7\Request; use PHPUnit\Framework\TestCase; @@ -18,14 +19,15 @@ public function testResolve(): void { $pathBuilderBasedResolver = new PathBuilderBasedResolver( new Composite( - new BasePath(self::FIXTURE_PATH), new AppendRequestPath(), - new DefaultFileExtension() + new PrependHostnameAsDirectory(), + new PrependBasePath(self::FIXTURE_PATH), + new AppendDefaultFileExtension('.html') ) ); - $actual = $pathBuilderBasedResolver->resolve(new Request('GET', 'http://example.com/foo')); - $this->assertSame(self::FIXTURE_PATH . DIRECTORY_SEPARATOR . 'foo.json', $actual); + $actual = $pathBuilderBasedResolver->resolve(new Request('GET', 'http://example.com/bar')); + $this->assertSame(self::FIXTURE_PATH . '/example.com/bar.html', $actual); } public function testUnresolvedException(): void @@ -33,6 +35,6 @@ public function testUnresolvedException(): void $pathBuilderBasedResolver = new PathBuilderBasedResolver($this->createMock(PathBuilderInterface::class));; $this->expectException(UnresolvablePathException::class); - $pathBuilderBasedResolver->resolve(new Request('GET', 'http://example.com/foo')); + $pathBuilderBasedResolver->resolve(new Request('GET', 'http://example.com/bar')); } } diff --git a/tests/_fixtures/example.com/bar.html b/tests/_fixtures/example.com/bar.html new file mode 100644 index 0000000..11276bd --- /dev/null +++ b/tests/_fixtures/example.com/bar.html @@ -0,0 +1,4 @@ + + bar + +