66
77
88use Mathematicator \Router \Router ;
9- use Mathematicator \SearchController \BaseController ;
9+ use Mathematicator \SearchController \IController ;
1010use Nette \DI \Container ;
1111use Tracy \Debugger ;
1212
13- class Engine
13+ final class Engine
1414{
1515
1616 /**
@@ -36,41 +36,43 @@ public function __construct(Router $router, Container $container)
3636 /**
3737 * @param string $query
3838 * @return EngineResult
39+ * @throws InvalidDataException
3940 */
4041 public function compute (string $ query ): EngineResult
4142 {
42- if (preg_match ('/^(?<left>.+?)\s*vs\.?\s*(?<right>.+?)$/ ' , $ query , $ versus )) {
43- $ result = new EngineMultiResult ($ query , null );
44-
45- $ result ->addResult ($ this ->compute ($ versus ['left ' ]), 'left ' );
46- $ result ->addResult ($ this ->compute ($ versus ['right ' ]), 'right ' );
47-
48- return $ result ;
43+ if (preg_match ('/^(?<left>.+?)\s+vs\.?\s+(?<right>.+?)$/ ' , $ query , $ versus )) {
44+ return (new EngineMultiResult ($ query , null ))
45+ ->addResult ($ this ->compute ($ versus ['left ' ]), 'left ' )
46+ ->addResult ($ this ->compute ($ versus ['right ' ]), 'right ' );
4947 }
5048
5149 $ callback = $ this ->router ->routeQuery ($ query );
52- $ callbackResult = $ this ->callCallback ($ query , $ callback );
53-
54- $ result = new EngineSingleResult (
55- $ query ,
56- preg_replace ('/^.+ \\\\([^ \\\\]+)$/ ' , '$1 ' , $ callback ),
57- $ callbackResult === null ? null : $ callbackResult ->getInterpret (),
58- $ callbackResult === null ? null : $ callbackResult ->getBoxes (),
59- $ callbackResult === null ? [] : $ callbackResult ->getSources ()
60- );
61- $ result ->setTime ((int ) round (Debugger::timer ('search_request ' ) * 1000 ));
62-
63- return $ result ;
50+ $ matchedRoute = (string ) preg_replace ('/^.+ \\\\([^ \\\\]+)$/ ' , '$1 ' , $ callback );
51+
52+ if ($ result = $ this ->processCallback ($ query , $ callback )) {
53+ $ return = new EngineSingleResult (
54+ $ query ,
55+ $ matchedRoute ,
56+ $ result ->getInterpret (),
57+ $ result ->getBoxes (),
58+ $ result ->getSources ()
59+ );
60+ } else {
61+ $ return = new EngineSingleResult ($ query , $ matchedRoute );
62+ }
63+
64+ return $ return ->setTime ((int ) round (Debugger::timer ('search_request ' ) * 1000 ));
6465 }
6566
6667 /**
6768 * @param string $query
6869 * @param string $callback
69- * @return BaseController|null
70+ * @return IController|null
71+ * @throws InvalidDataException
7072 */
71- private function callCallback (string $ query , string $ callback ): ?BaseController
73+ private function processCallback (string $ query , string $ callback ): ?IController
7274 {
73- /** @var BaseController |null $return */
75+ /** @var IController |null $return */
7476 $ return = $ this ->serviceFactory ->getByType ($ callback );
7577
7678 if ($ return !== null ) {
@@ -83,7 +85,7 @@ private function callCallback(string $query, string $callback): ?BaseController
8385 }
8486 }
8587
86- return $ return ;
88+ return $ return ?? null ;
8789 }
8890
8991}
0 commit comments