From e181ef13b2f1977a23bc76fc10517b7f049a2a86 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 16:14:28 +0900 Subject: [PATCH 01/13] Soothe SA --- .../CreatedResourceRendererTest.php | 2 +- .../Representation/HalRendererTest.php | 20 +++++++++---------- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/tests/Provide/Representation/CreatedResourceRendererTest.php b/tests/Provide/Representation/CreatedResourceRendererTest.php index 2361024c..208a119b 100644 --- a/tests/Provide/Representation/CreatedResourceRendererTest.php +++ b/tests/Provide/Representation/CreatedResourceRendererTest.php @@ -21,7 +21,7 @@ protected function setUp(): void { $resource = (new AppInjector('FakeVendor\HelloWorld', 'hal-app'))->getInstance(ResourceInterface::class); assert($resource instanceof ResourceInterface); - $post = $resource->post->uri('app://self/post')(); + $post = $resource->post('app://self/post'); assert($post instanceof Post); $this->ro = $post; $this->renderer = new CreatedResourceRenderer(new FakeRouter(), $resource); diff --git a/tests/Provide/Representation/HalRendererTest.php b/tests/Provide/Representation/HalRendererTest.php index 436fc967..b3cfbda0 100644 --- a/tests/Provide/Representation/HalRendererTest.php +++ b/tests/Provide/Representation/HalRendererTest.php @@ -32,7 +32,7 @@ protected function setUp(): void public function testRender(): void { - $ro = $this->resource->get->uri('app://self/user')->withQuery(['id' => 1, 'type' => 'type_a'])->eager->request(); + $ro = $this->resource->get('app://self/user', ['id' => 1, 'type' => 'type_a']); $result = (string) $ro; $expect = '{ "id": 1, @@ -56,7 +56,7 @@ public function testRender(): void public function testRenderPost(): void { - $ro = $this->resource->post->uri('app://self/user')->withQuery(['id' => 1])->eager->request(); + $ro = $this->resource->post('app://self/user', ['id' => 1]); $result = (string) $ro; $expect = '{ "id": 1, @@ -76,7 +76,7 @@ public function testRenderPost(): void public function testRenderEmbed(): void { - $ro = $this->resource->get->uri('app://self/emb?id=1')->eager->request(); + $ro = $this->resource->get('app://self/emb?id=1'); $result = (string) $ro; $expect = '{ "_embedded": { @@ -109,7 +109,7 @@ public function testRenderEmbed(): void public function testNoEmbededLinksWhenSchemaIsDifferent(): void { - $ro = $this->resource->get->uri('page://self/emb')->eager->request(); + $ro = $this->resource->get('page://self/emb'); $result = (string) $ro; $expect = '{ "_embedded": { @@ -131,7 +131,7 @@ public function testNoEmbededLinksWhenSchemaIsDifferent(): void public function testRenderScalar(): void { - $ro = $this->resource->get->uri('app://self/scalar')->eager->request(); + $ro = $this->resource->get('app://self/scalar'); $result = (string) $ro; $expect = '{ "value": "ak", @@ -147,7 +147,7 @@ public function testRenderScalar(): void public function testOptions(): void { - $ro = $this->resource->options->uri('app://self/scalar')->eager->request(); + $ro = $this->resource->options('app://self/scalar'); $result = (string) $ro; $expect = '{ "GET": [] @@ -201,7 +201,7 @@ public function testHalRendererWithParam(): void public function test201Created(): void { - $ro = $this->resource->post->uri('app://self/post')->eager->request(); + $ro = $this->resource->post('app://self/post'); /** @var ResourceObject $ro */ $result = (string) $ro; $expect = '{ @@ -230,7 +230,7 @@ public function test201Created(): void public function test201CreatedWithNoQuery(): void { - $ro = $this->resource->post->uri('app://self/post?uri=/post')->eager->request(); + $ro = $this->resource->post('app://self/post?uri=/post'); assert($ro instanceof ResourceObject); $result = (string) $ro; $this->assertSame(201, $ro->code); @@ -255,7 +255,7 @@ public function testCreatedResourceAnnotationButFailed(): void public function testCreatedResourceInvaliUri(): void { - $ro = $this->resource->post->uri('app://self/post?uri=__INVALID_*+')(); + $ro = $this->resource->post('app://self/post?uri=__INVALID_*+'); $errNo = $errStr = ''; set_error_handler(static function (int $no, string $str) use (&$errNo, &$errStr): bool { @@ -278,7 +278,7 @@ public function testCreatedResourceInvaliUri(): void public function testLinksAlreadyExists(): void { - $ro = $this->resource->get->uri('app://self/hal')->eager->request(); + $ro = $this->resource->get('app://self/hal'); $result = (string) $ro; $expect = '{ "message": "Welcome", From d505c7deadff109a3a8c4a5db16eb9c8efb76203 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 16:48:53 +0900 Subject: [PATCH 02/13] Install bamarni/composer-bin-plugin --- .gitattributes | 3 +++ .gitignore | 3 ++- composer.json | 34 ++++++++++++++++------------------ vendor-bin/tools/composer.json | 18 ++++++++++++++++++ 4 files changed, 39 insertions(+), 19 deletions(-) create mode 100644 vendor-bin/tools/composer.json diff --git a/.gitattributes b/.gitattributes index 12604b84..93f439f0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -17,3 +17,6 @@ # Configure diff output for .php and .phar files. *.php diff=php *.phar -diff + +# No show diffs +/vendor-bin/**/composer.lock binary diff --git a/.gitignore b/.gitignore index c07947dc..aa624b47 100644 --- a/.gitignore +++ b/.gitignore @@ -1,4 +1,5 @@ /vendor/ +/vendor-bin/**/vendor/ /build/ /composer.lock /.phpunit.result.cache @@ -14,4 +15,4 @@ /demo/vendor demo/.phpunit.result.cache /.phpunit-cache/ -/coverage.xml \ No newline at end of file +/coverage.xml diff --git a/composer.json b/composer.json index e61a6b9a..52432f48 100644 --- a/composer.json +++ b/composer.json @@ -34,15 +34,7 @@ }, "require-dev": { "phpunit/phpunit": "^9.5.10", - "doctrine/coding-standard": "^11.1", - "phpmd/phpmd": "^2.13", - "phpmetrics/phpmetrics": "^2.7", - "phpstan/phpstan": "^1.9", - "psalm/plugin-phpunit": "^0.18.4", - "squizlabs/php_codesniffer": "^3.5", - "vimeo/psalm": "^5.4", - "ray/rector-ray": "^1.0", - "rector/rector": "^0.14.8" + "bamarni/composer-bin-plugin": "^1.8" }, "autoload": { "psr-4": { @@ -75,16 +67,16 @@ "bin/bear.compile.php" ], "scripts": { - "test": ["./vendor/bin/phpunit -c ./phpunit.xml.dist"], + "test": ["phpunit"], "tests": ["@cs", "@sa", "@test"], - "coverage": ["php -dzend_extension=xdebug.so -dxdebug.mode=coverage ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage"], - "pcov": ["php -dextension=pcov.so -d pcov.enabled=1 ./vendor/bin/phpunit --coverage-text --coverage-html=build/coverage --coverage-clover=coverage.xml"], - "cs": ["./vendor/bin/phpcs"], - "cs-fix": ["./vendor/bin/phpcbf src tests"], - "clean": ["./vendor/bin/phpstan clear-result-cache", "./vendor/bin/psalm --clear-cache", "rm -rf tests/tmp/*.php"], - "sa": ["psalm --show-info=true", "./vendor/bin/phpstan analyse --no-ansi --no-progress -c phpstan.neon --memory-limit=-1"], - "metrics": ["./vendor/bin/phpmetrics --report-html=build/metrics --exclude=Exception --junit=build/junit.xml src"], - "phpmd": ["./vendor/bin/phpmd --exclude src/Annotation src text ./phpmd.xml"], + "coverage": ["php -dzend_extension=xdebug.so -dxdebug.mode=coverage phpunit --coverage-text --coverage-html=build/coverage"], + "pcov": ["php -dextension=pcov.so -d pcov.enabled=1 phpunit --coverage-text --coverage-html=build/coverage --coverage-clover=coverage.xml"], + "cs": ["phpcs"], + "cs-fix": ["phpcbf src tests"], + "clean": ["phpstan clear-result-cache", "psalm --clear-cache", "rm -rf tests/tmp/*.php"], + "sa": ["psalm --show-info=true", "phpstan analyse --no-ansi --no-progress -c phpstan.neon --memory-limit=-1"], + "metrics": ["phpmetrics --report-html=build/metrics --exclude=Exception --junit=build/junit.xml src"], + "phpmd": ["phpmd --exclude src/Annotation src text ./phpmd.xml"], "build": ["@cs", "@sa", "@pcov", "@metrics"], "compile": "./bin/bear.compile FakeVendor\\\\HelloWorld prod-app ./tests/Fake/fake-app", "baseline": "phpstan analyse -configuration -c phpstan.neon --generate-baseline --memory-limit=-1 ;psalm --set-baseline=psalm-baseline.xml" @@ -94,5 +86,11 @@ "bamarni/composer-bin-plugin": true, "dealerdirect/phpcodesniffer-composer-installer": true } + }, + "extra": { + "bamarni-bin": { + "bin-links": true, + "forward-command": true + } } } diff --git a/vendor-bin/tools/composer.json b/vendor-bin/tools/composer.json new file mode 100644 index 00000000..39fdfa58 --- /dev/null +++ b/vendor-bin/tools/composer.json @@ -0,0 +1,18 @@ +{ + "require-dev": { + "phpstan/phpstan": "^1.10", + "doctrine/coding-standard": "^12.0", + "phpmd/phpmd": "^2.13", + "phpmetrics/phpmetrics": "^2.8", + "psalm/plugin-phpunit": "^0.18.4", + "squizlabs/php_codesniffer": "^3.7", + "vimeo/psalm": "^5.15", + "ray/rector-ray": "^1.1", + "rector/rector": "^0.18.1" + }, + "config": { + "allow-plugins": { + "dealerdirect/phpcodesniffer-composer-installer": true + } + } +} From dacd6ede22416701bd6fb3181c39bd99e538d5d0 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 16:49:07 +0900 Subject: [PATCH 03/13] Update psalm.xml --- psalm.xml | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/psalm.xml b/psalm.xml index bc8f3e7a..cfb5cd28 100644 --- a/psalm.xml +++ b/psalm.xml @@ -1,16 +1,17 @@ - + - + From d255705df9ed2a121b3195302b674c5819ba6a52 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 16:52:17 +0900 Subject: [PATCH 04/13] Fix CS (AnnotationNameIncorrect) SlevomatCodingStandard.Commenting.AnnotationName.AnnotationNameIncorrect --- src/Context/ApiModule.php | 2 +- src/Context/CliModule.php | 2 +- src/Context/HalModule.php | 2 +- src/Context/ProdModule.php | 2 +- src/Module/AppMetaModule.php | 2 +- src/Module/ImportAppModule.php | 2 +- src/Module/ImportSchemeCollectionProvider.php | 2 +- src/Module/ScriptinjectorModule.php | 2 +- src/PackageModule.php | 2 +- src/Provide/Error/ErrorHandler.php | 4 ++-- src/Provide/Logger/MonologProvider.php | 2 +- src/Provide/Logger/PsrLoggerModule.php | 2 +- src/Provide/Representation/CreatedResourceInterceptor.php | 2 +- src/Provide/Representation/CreatedResourceModule.php | 2 +- src/Provide/Representation/CreatedResourceRenderer.php | 2 +- src/Provide/Router/CliRouter.php | 6 +++--- src/Provide/Router/HttpMethodParams.php | 2 +- src/Provide/Router/RouterCollection.php | 4 ++-- src/Provide/Router/RouterCollectionProvider.php | 2 +- src/Provide/Router/WebRouter.php | 4 ++-- src/Provide/Router/WebRouterInterface.php | 2 +- src/Provide/Router/WebRouterModule.php | 2 +- src/Provide/Transfer/CliResponder.php | 2 +- 23 files changed, 28 insertions(+), 28 deletions(-) diff --git a/src/Context/ApiModule.php b/src/Context/ApiModule.php index 0e728550..72bad02c 100644 --- a/src/Context/ApiModule.php +++ b/src/Context/ApiModule.php @@ -11,7 +11,7 @@ class ApiModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Context/CliModule.php b/src/Context/CliModule.php index 071142a6..07d13353 100644 --- a/src/Context/CliModule.php +++ b/src/Context/CliModule.php @@ -20,7 +20,7 @@ class CliModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Context/HalModule.php b/src/Context/HalModule.php index 265d89be..b51786f1 100644 --- a/src/Context/HalModule.php +++ b/src/Context/HalModule.php @@ -16,7 +16,7 @@ class HalModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Context/ProdModule.php b/src/Context/ProdModule.php index 89fec860..ff88a235 100644 --- a/src/Context/ProdModule.php +++ b/src/Context/ProdModule.php @@ -29,7 +29,7 @@ class ProdModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Module/AppMetaModule.php b/src/Module/AppMetaModule.php index 5c3c87f1..182eeae1 100644 --- a/src/Module/AppMetaModule.php +++ b/src/Module/AppMetaModule.php @@ -30,7 +30,7 @@ public function __construct(private AbstractAppMeta $appMeta, AbstractModule|nul } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Module/ImportAppModule.php b/src/Module/ImportAppModule.php index f22be67f..23587eea 100644 --- a/src/Module/ImportAppModule.php +++ b/src/Module/ImportAppModule.php @@ -41,7 +41,7 @@ public function __construct(array $importApps) } /** - * {@inheritdoc} + * {@inheritDoc} * * @throws NotFound */ diff --git a/src/Module/ImportSchemeCollectionProvider.php b/src/Module/ImportSchemeCollectionProvider.php index ccd5a813..5070aade 100644 --- a/src/Module/ImportSchemeCollectionProvider.php +++ b/src/Module/ImportSchemeCollectionProvider.php @@ -26,7 +26,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function get(): SchemeCollectionInterface { diff --git a/src/Module/ScriptinjectorModule.php b/src/Module/ScriptinjectorModule.php index 6907fa66..c8b929e7 100644 --- a/src/Module/ScriptinjectorModule.php +++ b/src/Module/ScriptinjectorModule.php @@ -21,7 +21,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/PackageModule.php b/src/PackageModule.php index 3f0f3278..15b94c6f 100644 --- a/src/PackageModule.php +++ b/src/PackageModule.php @@ -21,7 +21,7 @@ class PackageModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Provide/Error/ErrorHandler.php b/src/Provide/Error/ErrorHandler.php index 68f3db69..8f875af7 100644 --- a/src/Provide/Error/ErrorHandler.php +++ b/src/Provide/Error/ErrorHandler.php @@ -27,7 +27,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function handle(Exception $e, Request $request) // phpcs:ignore SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly.ReferencedGeneralException { @@ -38,7 +38,7 @@ public function handle(Exception $e, Request $request) // phpcs:ignore SlevomatC } /** - * {@inheritdoc} + * {@inheritDoc} */ public function transfer(): void { diff --git a/src/Provide/Logger/MonologProvider.php b/src/Provide/Logger/MonologProvider.php index 6ab82a4f..416c5822 100644 --- a/src/Provide/Logger/MonologProvider.php +++ b/src/Provide/Logger/MonologProvider.php @@ -19,7 +19,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function get(): Logger { diff --git a/src/Provide/Logger/PsrLoggerModule.php b/src/Provide/Logger/PsrLoggerModule.php index 707f3ae2..a932f496 100644 --- a/src/Provide/Logger/PsrLoggerModule.php +++ b/src/Provide/Logger/PsrLoggerModule.php @@ -11,7 +11,7 @@ class PsrLoggerModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Provide/Representation/CreatedResourceInterceptor.php b/src/Provide/Representation/CreatedResourceInterceptor.php index 2bf873c9..08a36cf8 100644 --- a/src/Provide/Representation/CreatedResourceInterceptor.php +++ b/src/Provide/Representation/CreatedResourceInterceptor.php @@ -18,7 +18,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function invoke(MethodInvocation $invocation) { diff --git a/src/Provide/Representation/CreatedResourceModule.php b/src/Provide/Representation/CreatedResourceModule.php index 32bcef86..21edeb1e 100644 --- a/src/Provide/Representation/CreatedResourceModule.php +++ b/src/Provide/Representation/CreatedResourceModule.php @@ -10,7 +10,7 @@ class CreatedResourceModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Provide/Representation/CreatedResourceRenderer.php b/src/Provide/Representation/CreatedResourceRenderer.php index b29df1d8..481003cb 100644 --- a/src/Provide/Representation/CreatedResourceRenderer.php +++ b/src/Provide/Representation/CreatedResourceRenderer.php @@ -33,7 +33,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function render(ResourceObject $ro) { diff --git a/src/Provide/Router/CliRouter.php b/src/Provide/Router/CliRouter.php index a31486eb..94ddf05d 100644 --- a/src/Provide/Router/CliRouter.php +++ b/src/Provide/Router/CliRouter.php @@ -55,7 +55,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function __destruct() { @@ -81,7 +81,7 @@ public function setStdIn( } /** - * {@inheritdoc} + * {@inheritDoc} * * @param Globals $globals * @param Server $server @@ -100,7 +100,7 @@ public function match(array $globals, array $server) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function generate($name, $data) { diff --git a/src/Provide/Router/HttpMethodParams.php b/src/Provide/Router/HttpMethodParams.php index a5fbc7f3..e30684bd 100644 --- a/src/Provide/Router/HttpMethodParams.php +++ b/src/Provide/Router/HttpMethodParams.php @@ -37,7 +37,7 @@ public function setStdIn( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function get(array $server, array $get, array $post) { diff --git a/src/Provide/Router/RouterCollection.php b/src/Provide/Router/RouterCollection.php index 6ddcd014..9115245d 100644 --- a/src/Provide/Router/RouterCollection.php +++ b/src/Provide/Router/RouterCollection.php @@ -23,7 +23,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function match(array $globals, array $server) { @@ -47,7 +47,7 @@ public function match(array $globals, array $server) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function generate($name, $data) { diff --git a/src/Provide/Router/RouterCollectionProvider.php b/src/Provide/Router/RouterCollectionProvider.php index 17f13e5d..fe347c0a 100644 --- a/src/Provide/Router/RouterCollectionProvider.php +++ b/src/Provide/Router/RouterCollectionProvider.php @@ -19,7 +19,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function get(): RouterCollection { diff --git a/src/Provide/Router/WebRouter.php b/src/Provide/Router/WebRouter.php index 6a2a0d43..5ea56a6a 100644 --- a/src/Provide/Router/WebRouter.php +++ b/src/Provide/Router/WebRouter.php @@ -29,7 +29,7 @@ public function __construct( */ /** - * {@inheritdoc} + * {@inheritDoc} * * @param Globals $globals * @param Server $server @@ -46,7 +46,7 @@ public function match(array $globals, array $server) } /** - * {@inheritdoc} + * {@inheritDoc} */ public function generate($name, $data) { diff --git a/src/Provide/Router/WebRouterInterface.php b/src/Provide/Router/WebRouterInterface.php index c1227aaf..4efbb523 100644 --- a/src/Provide/Router/WebRouterInterface.php +++ b/src/Provide/Router/WebRouterInterface.php @@ -13,7 +13,7 @@ interface WebRouterInterface extends RouterInterface { /** - * {@inheritdoc} + * {@inheritDoc} * * @param Globals $globals * @param Server $server diff --git a/src/Provide/Router/WebRouterModule.php b/src/Provide/Router/WebRouterModule.php index 4dfc9ba0..bac5170d 100644 --- a/src/Provide/Router/WebRouterModule.php +++ b/src/Provide/Router/WebRouterModule.php @@ -10,7 +10,7 @@ class WebRouterModule extends AbstractModule { /** - * {@inheritdoc} + * {@inheritDoc} */ protected function configure(): void { diff --git a/src/Provide/Transfer/CliResponder.php b/src/Provide/Transfer/CliResponder.php index 2b617ad7..35bd6e34 100644 --- a/src/Provide/Transfer/CliResponder.php +++ b/src/Provide/Transfer/CliResponder.php @@ -22,7 +22,7 @@ public function __construct( } /** - * {@inheritdoc} + * {@inheritDoc} */ public function __invoke(ResourceObject $ro, array $server): void { From a6b8b0da9ab18aeeaa6351fee7e40a6410688ab2 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 17:27:04 +0900 Subject: [PATCH 05/13] Refactor: Remove $injector property --- src/Compiler.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/Compiler.php b/src/Compiler.php index fa7a18cf..32100cbf 100644 --- a/src/Compiler.php +++ b/src/Compiler.php @@ -17,7 +17,6 @@ use BEAR\Package\Compiler\NewInstance; use BEAR\Package\Provide\Error\NullPage; use Composer\Autoload\ClassLoader; -use Ray\Di\InjectorInterface; use RuntimeException; use function assert; @@ -40,7 +39,6 @@ final class Compiler { /** @var ArrayObject */ private ArrayObject $classes; - private InjectorInterface $injector; private Meta $appMeta; private CompileDiScripts $compilerDiScripts; private NewInstance $newInstance; @@ -65,13 +63,13 @@ public function __construct(string $appName, private string $context, string $ap $this->hookNullObjectClass($appDir); $this->appMeta = new Meta($appName, $context, $appDir); /** @psalm-suppress MixedAssignment (?) */ - $this->injector = Injector::getInstance($appName, $context, $appDir); - $this->compilerDiScripts = new CompileDiScripts(new CompileClassMetaInfo(), $this->injector); - $this->newInstance = new NewInstance($this->injector); + $injector = Injector::getInstance($appName, $context, $appDir); + $this->compilerDiScripts = new CompileDiScripts(new CompileClassMetaInfo(), $injector); + $this->newInstance = new NewInstance($injector); /** @var ArrayObject $overWritten */ $overWritten = new ArrayObject(); $filePutContents = new FilePutContents($overWritten); - $fakeRun = new FakeRun($this->injector, $context, $this->appMeta); + $fakeRun = new FakeRun($injector, $context, $this->appMeta); $this->dumpAutoload = new CompileAutoload($fakeRun, $filePutContents, $this->appMeta, $overWritten, $this->classes, $appDir, $context); $this->compilePreload = new CompilePreload($fakeRun, $this->newInstance, $this->dumpAutoload, $filePutContents, $classes, $context); $this->compilerObjectGraph = new CompileObjectGraph($filePutContents, $this->appMeta->logDir); From 8ca8f2c3413237dc676729977bbd6f24678224f6 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 17:31:44 +0900 Subject: [PATCH 06/13] Change injection from setter to constructor --- src/Provide/Router/CliRouter.php | 11 +++++++---- src/Provide/Router/HttpMethodParams.php | 17 +++++++++++------ tests/Provide/Router/CliRouterTest.php | 3 +-- tests/Provide/Router/HttpMethodParamsTest.php | 9 +++------ 4 files changed, 22 insertions(+), 18 deletions(-) diff --git a/src/Provide/Router/CliRouter.php b/src/Provide/Router/CliRouter.php index 94ddf05d..1d020e92 100644 --- a/src/Provide/Router/CliRouter.php +++ b/src/Provide/Router/CliRouter.php @@ -11,7 +11,6 @@ use BEAR\Package\Annotation\StdIn; use BEAR\Sunday\Extension\Router\RouterInterface; use Exception; -use Ray\Di\Di\Inject; use Ray\Di\Di\Named; use Throwable; @@ -43,13 +42,14 @@ class CliRouter implements RouterInterface { private Stdio $stdIo; - private string $stdIn = ''; private Throwable|null $terminateException = null; public function __construct( #[Named('original')] private RouterInterface $router, Stdio|null $stdIo = null, + #[StdIn] + private string $stdIn = '', ) { $this->stdIo = $stdIo ?: (new CliFactory())->newStdio(); } @@ -72,9 +72,12 @@ public function setTerminateException(Throwable $e): void $this->terminateException = $e; } - #[Inject] + /** + * @psalm-api + * @deprecated Use constructor injection + * @codeCoverageIgnore + */ public function setStdIn( - #[StdIn] string $stdIn, ): void { $this->stdIn = $stdIn; diff --git a/src/Provide/Router/HttpMethodParams.php b/src/Provide/Router/HttpMethodParams.php index e30684bd..11763154 100644 --- a/src/Provide/Router/HttpMethodParams.php +++ b/src/Provide/Router/HttpMethodParams.php @@ -6,7 +6,6 @@ use BEAR\Package\Annotation\StdIn; use BEAR\Package\Exception\InvalidRequestJsonException; -use Ray\Di\Di\Inject; use function file_get_contents; use function in_array; @@ -26,13 +25,19 @@ final class HttpMethodParams implements HttpMethodParamsInterface public const HTTP_CONTENT_TYPE = 'HTTP_CONTENT_TYPE'; public const FORM_URL_ENCODE = 'application/x-www-form-urlencoded'; public const APPLICATION_JSON = 'application/json'; - private string $stdIn = 'php://input'; - #[Inject(optional: true)] - public function setStdIn( + public function __construct( #[StdIn] - string $stdIn, - ): void { + private string $stdIn = 'php://input', + ) { + } + + /** + * @psalm-api + * @deprecated Use constructor injection + */ + public function setStdIn(string $stdIn): void + { $this->stdIn = $stdIn; } diff --git a/tests/Provide/Router/CliRouterTest.php b/tests/Provide/Router/CliRouterTest.php index 53692e9d..c4011157 100644 --- a/tests/Provide/Router/CliRouterTest.php +++ b/tests/Provide/Router/CliRouterTest.php @@ -27,8 +27,7 @@ protected function setUp(): void $stdIo = (new CliFactory())->newStdio('php://stdin', $stdOut); $httpMethodParams = new HttpMethodParams(); $httpMethodParams->setStdIn($this->stdInFile); - $this->router = new CliRouter(new WebRouter('page://self', $httpMethodParams), $stdIo); - $this->router->setStdIn($this->stdInFile); + $this->router = new CliRouter(new WebRouter('page://self', $httpMethodParams), $stdIo, $this->stdInFile); } protected function tearDown(): void diff --git a/tests/Provide/Router/HttpMethodParamsTest.php b/tests/Provide/Router/HttpMethodParamsTest.php index 27c02acc..d6867d9f 100644 --- a/tests/Provide/Router/HttpMethodParamsTest.php +++ b/tests/Provide/Router/HttpMethodParamsTest.php @@ -44,8 +44,7 @@ public function testPut(): void $server = ['REQUEST_METHOD' => 'PUT', HttpMethodParams::CONTENT_TYPE => HttpMethodParams::FORM_URL_ENCODE]; $get = ['name' => 'bear']; $post = ['name' => 'sunday']; - $httpMethodParam = new HttpMethodParams(); - $httpMethodParam->setStdIn(__DIR__ . '/query.txt'); + $httpMethodParam = new HttpMethodParams(__DIR__ . '/query.txt'); [$method, $params] = $httpMethodParam->get($server, $get, $post); $this->assertSame('put', $method); $this->assertSame(['name' => 'kuma'], $params); @@ -56,8 +55,7 @@ public function testPatch(): void $server = ['REQUEST_METHOD' => 'PATCH', HttpMethodParams::CONTENT_TYPE => HttpMethodParams::FORM_URL_ENCODE]; $get = ['name' => 'bear']; $post = ['name' => 'sunday']; - $httpMethodParam = new HttpMethodParams(); - $httpMethodParam->setStdIn(__DIR__ . '/query.txt'); + $httpMethodParam = new HttpMethodParams(__DIR__ . '/query.txt'); [$method, $params] = $httpMethodParam->get($server, $get, $post); $this->assertSame(['name' => 'kuma'], $params); } @@ -67,8 +65,7 @@ public function testDelete(): void $server = ['REQUEST_METHOD' => 'DELETE', HttpMethodParams::CONTENT_TYPE => HttpMethodParams::FORM_URL_ENCODE]; $get = ['name' => 'bear']; $post = ['name' => 'sunday']; - $httpMethodParam = new HttpMethodParams(); - $httpMethodParam->setStdIn(__DIR__ . '/query.txt'); + $httpMethodParam = new HttpMethodParams(__DIR__ . '/query.txt'); [$method, $params] = $httpMethodParam->get($server, $get, $post); $this->assertSame('delete', $method); $this->assertSame(['name' => 'kuma'], $params); From 0863f0cdd5787da1e3ff17668d9215edb5cd1e86 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 18:42:08 +0900 Subject: [PATCH 07/13] Support monolog v3 --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index 52432f48..447e0b11 100644 --- a/composer.json +++ b/composer.json @@ -18,7 +18,7 @@ "bear/resource": "^1.20", "bear/streamer": "^1.2.2", "bear/sunday": "^1.6.1", - "monolog/monolog": "^1.25 || ^2.0", + "monolog/monolog": "^1.25 || ^2.0 || ^3.0", "ray/aop": "^2.13.1", "ray/di": "^2.15.1", "ray/object-visual-grapher": "^1.0", From f467b2beb61d84cafb2213778b1cfe7c3d959a0d Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Tue, 29 Aug 2023 19:05:25 +0900 Subject: [PATCH 08/13] Remove Monolog dependency from ErrorLogger --- src/Provide/Error/ErrorLogger.php | 24 ++++++++++++++++++++---- 1 file changed, 20 insertions(+), 4 deletions(-) diff --git a/src/Provide/Error/ErrorLogger.php b/src/Provide/Error/ErrorLogger.php index 03352534..b512e82b 100644 --- a/src/Provide/Error/ErrorLogger.php +++ b/src/Provide/Error/ErrorLogger.php @@ -6,7 +6,6 @@ use BEAR\AppMeta\AbstractAppMeta; use BEAR\Sunday\Extension\Router\RouterMatch; -use Monolog\Logger; use Psr\Log\LoggerInterface; use Throwable; @@ -22,12 +21,29 @@ public function __construct( public function __invoke(Throwable $e, RouterMatch $request): string { - $level = $e->getCode() >= 500 ? Logger::ERROR : Logger::DEBUG; + $isError = $e->getCode() >= 500; $logRef = new LogRef($e); - $message = sprintf('req:"%s" code:%s e:%s(%s) logref:%s', (string) $request, $e->getCode(), $e::class, $e->getMessage(), (string) $logRef); - $this->logger->log($level, $message); $logRef->log($e, $request, $this->appMeta); + $message = sprintf('req:"%s" code:%s e:%s(%s) logref:%s', (string) $request, $e->getCode(), $e::class, $e->getMessage(), (string) $logRef); + $this->log($isError, $message); return (string) $logRef; } + + /** + * Log with method + * + * monolog has different log level constants(200,400) than psr/logger, + * and those constants change from version to version. + */ + private function log(bool $isError, string $message): void + { + if ($isError) { + $this->logger->error($message); + + return; + } + + $this->logger->debug($message); + } } From 28ba7e0dc49bec74312d85bf5c04625f278e40b9 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Thu, 31 Aug 2023 07:34:19 +0900 Subject: [PATCH 09/13] Test coverage 100% --- tests/Provide/Error/ErrorHandlerTest.php | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/tests/Provide/Error/ErrorHandlerTest.php b/tests/Provide/Error/ErrorHandlerTest.php index 7d1b64d9..1469aa13 100644 --- a/tests/Provide/Error/ErrorHandlerTest.php +++ b/tests/Provide/Error/ErrorHandlerTest.php @@ -5,13 +5,14 @@ namespace BEAR\Package\Provide\Error; use BEAR\AppMeta\AppMeta; +use BEAR\Package\FakeLogger; use BEAR\Package\Provide\Transfer\FakeHttpResponder; use BEAR\Sunday\Extension\Router\RouterMatch; use BEAR\Sunday\Provide\Transfer\ConditionalResponse; use BEAR\Sunday\Provide\Transfer\Header; use LogicException; use PHPUnit\Framework\TestCase; -use Psr\Log\NullLogger; +use RuntimeException; use function assert; @@ -19,23 +20,26 @@ class ErrorHandlerTest extends TestCase { private ErrorHandler $handler; private FakeHttpResponder $responder; + private FakeLogger $logger; protected function setUp(): void { parent::setUp(); $this->responder = new FakeHttpResponder(new Header(), new ConditionalResponse()); - $this->handler = new ErrorHandler($this->responder, new ErrorLogger(new NullLogger(), new AppMeta('FakeVendor\HelloWorld')), new ProdVndErrorPageFactory()); + $this->logger = new FakeLogger(); + $this->handler = new ErrorHandler($this->responder, new ErrorLogger($this->logger, new AppMeta('FakeVendor\HelloWorld')), new ProdVndErrorPageFactory()); } - public function testHandle(): ErrorHandler + public function testHandleError(): ErrorHandler { - $e = new LogicException('msg'); + $e = new LogicException('msg', 500); $request = new RouterMatch(); [$request->method, $request->path, $request->query] = ['get', '/', []]; $handler = $this->handler->handle($e, $request); - $this->assertInstanceOf(ErrorHandler::class, $handler); + $this->assertSame('error', $this->logger->called); assert($handler instanceof ErrorHandler); + $handler->transfer(); return $handler; } @@ -52,4 +56,12 @@ public function testTransfer(ErrorHandler $handler): void } ', FakeHttpResponder::$content); } + + public function testHandleDebug(): void + { + $e = new RuntimeException('msg', 0); + $request = new RouterMatch(); + $this->handler->handle($e, $request); + $this->assertSame('debug', $this->logger->called); + } } From c9546f69df2d660aaf71cbf0885ee3c78ba6cdae Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Thu, 31 Aug 2023 07:42:00 +0900 Subject: [PATCH 10/13] Extract FakeLogger --- tests/Fake/FakeLogger.php | 39 ++++++++++++++++++++++++ tests/Provide/Error/ErrorHandlerTest.php | 2 +- 2 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 tests/Fake/FakeLogger.php diff --git a/tests/Fake/FakeLogger.php b/tests/Fake/FakeLogger.php new file mode 100644 index 00000000..6a4aaa9e --- /dev/null +++ b/tests/Fake/FakeLogger.php @@ -0,0 +1,39 @@ +called = __FUNCTION__; + } + + public function warning($message, array $context = []): void + { + } + + public function debug($message, array $context = []): void + { + $this->called = __FUNCTION__; + } + + public function log($level, $message, array $context = []): void + { + } +}; diff --git a/tests/Provide/Error/ErrorHandlerTest.php b/tests/Provide/Error/ErrorHandlerTest.php index 1469aa13..7afe9f89 100644 --- a/tests/Provide/Error/ErrorHandlerTest.php +++ b/tests/Provide/Error/ErrorHandlerTest.php @@ -39,7 +39,7 @@ public function testHandleError(): ErrorHandler $handler = $this->handler->handle($e, $request); $this->assertSame('error', $this->logger->called); assert($handler instanceof ErrorHandler); - $handler->transfer(); + $this->handler->transfer(); return $handler; } From 96d8df715cca19055ca81b9166eb19350bd0eab9 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Thu, 31 Aug 2023 07:50:16 +0900 Subject: [PATCH 11/13] Use magic method --- src-deprecated/Unlink.php | 2 +- src/Provide/Error/ErrorHandler.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/src-deprecated/Unlink.php b/src-deprecated/Unlink.php index 026993d1..6be2c78e 100644 --- a/src-deprecated/Unlink.php +++ b/src-deprecated/Unlink.php @@ -40,7 +40,7 @@ public function once(string $path) : bool return true; } self::$unlinkedPath[] = $path; - $this->__invoke($path); + ($this)($path); return false; } diff --git a/src/Provide/Error/ErrorHandler.php b/src/Provide/Error/ErrorHandler.php index 8f875af7..99222a74 100644 --- a/src/Provide/Error/ErrorHandler.php +++ b/src/Provide/Error/ErrorHandler.php @@ -31,7 +31,7 @@ public function __construct( */ public function handle(Exception $e, Request $request) // phpcs:ignore SlevomatCodingStandard.Exceptions.ReferenceThrowableOnly.ReferencedGeneralException { - $this->logger->__invoke($e, $request); + ($this->logger)($e, $request); $this->errorPage = $this->factory->newInstance($e, $request); return $this; @@ -42,6 +42,6 @@ public function handle(Exception $e, Request $request) // phpcs:ignore SlevomatC */ public function transfer(): void { - $this->responder->__invoke($this->errorPage ?? new NullPage(), []); + ($this->responder)($this->errorPage ?? new NullPage(), []); } } From 37367cd8db47ef6effd04ea4c121539b6a820155 Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Thu, 31 Aug 2023 08:01:21 +0900 Subject: [PATCH 12/13] Remove incalid @inheritDoc --- src/Provide/Router/CliRouter.php | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/Provide/Router/CliRouter.php b/src/Provide/Router/CliRouter.php index 1d020e92..7d5a2e78 100644 --- a/src/Provide/Router/CliRouter.php +++ b/src/Provide/Router/CliRouter.php @@ -54,9 +54,6 @@ public function __construct( $this->stdIo = $stdIo ?: (new CliFactory())->newStdio(); } - /** - * {@inheritDoc} - */ public function __destruct() { file_exists($this->stdIn) && unlink($this->stdIn); From 935490b975c998086c926e78e9717eabd28f339d Mon Sep 17 00:00:00 2001 From: Akihito Koriyama Date: Thu, 31 Aug 2023 08:01:28 +0900 Subject: [PATCH 13/13] Fix typo --- src/Compiler.php | 4 ++-- src/Compiler/CompileAutoload.php | 4 ++-- src/Injector/PackageInjector.php | 6 +++--- src/LazyModule.php | 4 ++-- .../{ScriptinjectorModule.php => ScriptInjectorModule.php} | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) rename src/Module/{ScriptinjectorModule.php => ScriptInjectorModule.php} (91%) diff --git a/src/Compiler.php b/src/Compiler.php index 32100cbf..661d0e02 100644 --- a/src/Compiler.php +++ b/src/Compiler.php @@ -98,8 +98,8 @@ public function compile(): int printf("Success: %d Failed: %d\n", $this->newInstance->getCompiled(), count($this->newInstance->getFailed())); printf("Preload compile: %s\n", $this->dumpAutoload->getFileInfo($preload)); printf("Object graph diagram: %s\n", realpath($dot)); - foreach ($this->newInstance->getFailed() as $depedencyIndex => $error) { - printf("UNBOUND: %s for %s \n", $error, $depedencyIndex); + foreach ($this->newInstance->getFailed() as $dependencyIndex => $error) { + printf("UNBOUND: %s for %s \n", $error, $dependencyIndex); } return $failed ? 1 : 0; diff --git a/src/Compiler/CompileAutoload.php b/src/Compiler/CompileAutoload.php index 4fa7c79e..787b6c48 100644 --- a/src/Compiler/CompileAutoload.php +++ b/src/Compiler/CompileAutoload.php @@ -59,13 +59,13 @@ public function __invoke(): int /** @var list $classes */ $classes = (array) $this->classes; $paths = $this->getPaths($classes); - $autolaod = $this->saveAutoloadFile($this->appMeta->appDir, $paths); + $autoload = $this->saveAutoloadFile($this->appMeta->appDir, $paths); $start = $_SERVER['REQUEST_TIME_FLOAT'] ?? 0; assert(is_float($start)); $time = number_format(microtime(true) - $start, 2); $memory = number_format(memory_get_peak_usage() / (1024 * 1024), 3); printf("Compilation (2/2) took %f seconds and used %fMB of memory\n", $time, $memory); - printf("autoload.php: %s\n", $this->getFileInfo($autolaod)); + printf("autoload.php: %s\n", $this->getFileInfo($autoload)); return 0; } diff --git a/src/Injector/PackageInjector.php b/src/Injector/PackageInjector.php index b780b597..9798ef41 100644 --- a/src/Injector/PackageInjector.php +++ b/src/Injector/PackageInjector.php @@ -65,14 +65,14 @@ public static function getInstance(AbstractAppMeta $meta, string $context, Cache return $injector; } - public static function factory(AbstractAppMeta $meta, string $context, AbstractModule|null $overideModule = null): InjectorInterface + public static function factory(AbstractAppMeta $meta, string $context, AbstractModule|null $overrideModule = null): InjectorInterface { $scriptDir = $meta->tmpDir . '/di'; ! is_dir($scriptDir) && ! @mkdir($scriptDir) && ! is_dir($scriptDir); $module = (new Module())($meta, $context); - if ($overideModule instanceof AbstractModule) { - $module->override($overideModule); + if ($overrideModule instanceof AbstractModule) { + $module->override($overrideModule); } $injector = new RayInjector($module, $scriptDir); diff --git a/src/LazyModule.php b/src/LazyModule.php index c5e5acbd..b3ba1a4b 100644 --- a/src/LazyModule.php +++ b/src/LazyModule.php @@ -6,7 +6,7 @@ use BEAR\AppMeta\AbstractAppMeta; use BEAR\Package\Module\ResourceObjectModule; -use BEAR\Package\Module\ScriptinjectorModule; +use BEAR\Package\Module\ScriptInjectorModule; use Ray\Compiler\LazyModuleInterface; use Ray\Di\AbstractModule; @@ -21,7 +21,7 @@ public function __construct( public function __invoke(): AbstractModule { - $module = new ScriptinjectorModule($this->scriptDir, (new Module())($this->appMeta, $this->context)); + $module = new ScriptInjectorModule($this->scriptDir, (new Module())($this->appMeta, $this->context)); $module->install(new ResourceObjectModule($this->appMeta->getResourceListGenerator())); return $module; diff --git a/src/Module/ScriptinjectorModule.php b/src/Module/ScriptInjectorModule.php similarity index 91% rename from src/Module/ScriptinjectorModule.php rename to src/Module/ScriptInjectorModule.php index c8b929e7..fccb2ba5 100644 --- a/src/Module/ScriptinjectorModule.php +++ b/src/Module/ScriptInjectorModule.php @@ -11,7 +11,7 @@ /** * Provides InjectorInterface */ -class ScriptinjectorModule extends AbstractModule +class ScriptInjectorModule extends AbstractModule { public function __construct( private string $scriptDir,