diff --git a/src/FileGenerators/SyncClassGenerator.php b/src/FileGenerators/SyncClassGenerator.php index 7ae6fb1..3f3f24b 100644 --- a/src/FileGenerators/SyncClassGenerator.php +++ b/src/FileGenerators/SyncClassGenerator.php @@ -43,45 +43,10 @@ public function generate(): Node 'wait', [ new Node\Expr\MethodCall( - new Node\Expr\MethodCall( - new Node\Expr\Variable('this'), - 'handleCommand', - [ - new Node\Expr\New_( - new Node\Name('BuildAsyncFromSyncCommand'), - [ - new Node\Expr\ClassConstFetch( - new Node\Name('self'), - 'HYDRATE_CLASS' - ), - new Node\Expr\Variable('this'), - ] - ), - ] - ), + $this->callCommandBus(), 'then', [ - new Node\Expr\Closure( - [ - 'params' => [ - new Node\Param( - Inflector::camelize($className), - null, - $interfaceName - ) - ], - 'stmts' => [ - new Node\Stmt\Return_( - new Node\Expr\MethodCall( - new Node\Expr\Variable( - Inflector::camelize($className) - ), - 'refresh' - ) - ) - ], - ] - ) + $this->createRefreshClosure($className, $interfaceName), ] ), ] @@ -97,4 +62,54 @@ public function generate(): Node ->getNode() ; } + + protected function callCommandBus(): Node\Expr\MethodCall + { + return new Node\Expr\MethodCall( + new Node\Expr\Variable('this'), + 'handleCommand', + [ + $this->createCommand(), + ] + ); + } + + protected function createCommand(): Node\Expr\New_ + { + return new Node\Expr\New_( + new Node\Name('BuildAsyncFromSyncCommand'), + [ + new Node\Expr\ClassConstFetch( + new Node\Name('self'), + 'HYDRATE_CLASS' + ), + new Node\Expr\Variable('this'), + ] + ); + } + + protected function createRefreshClosure(string $className, string $interfaceName): Node\Expr\Closure + { + return new Node\Expr\Closure( + [ + 'params' => [ + new Node\Param( + Inflector::camelize($className), + null, + $interfaceName + ) + ], + 'stmts' => [ + new Node\Stmt\Return_( + new Node\Expr\MethodCall( + new Node\Expr\Variable( + Inflector::camelize($className) + ), + 'refresh' + ) + ) + ], + ] + ); + } }