/** * @covers jjok\String\String::capitalise */ public function testStringCanBeCapitalised() { $this->assertSame('', String::capitalise('')); $this->assertSame('', String::capitalise(' ')); $this->assertSame('', String::capitalise('-')); $this->assertSame('1234567890', String::capitalise('1234567890')); $this->assertSame('Qwertyuiop', String::capitalise('qwertyuiop')); $this->assertSame('QWERTYUIOP', String::capitalise('QWERTYUIOP')); $this->assertSame('AHyphenatedString', String::capitalise('a-hyphenated-string')); $this->assertSame('AnHyphenatedString', String::capitalise('an-hyphenated-string')); $this->assertSame('CamelCaseString', String::capitalise('CamelCaseString')); $this->assertSame('SomeCamelCaseString', String::capitalise('someCamelCaseString')); $this->assertSame('AStringWithSpaces', String::capitalise('a string with spaces')); }
/** * Find a defined Route based on the given query. * @param string $query * @return Route? */ public function match($query) { #530600 // #Exact match // if(array_key_exists($query, $this->routes)) { // echo 'Exact match'; // return $this->routes[$query]; // } foreach ($this->routes as $path => $route) { if (preg_match(sprintf('#^%s$#', $path), $query, $matches)) { // echo 'Preg match', PHP_EOL, $path, PHP_EOL; // print_r($matches); $route = clone $route; if (count($matches) > 1) { # Remove the full match array_shift($matches); # Split up any grouped matches $new_matches = array(); foreach ($matches as $match) { foreach (explode('/', $match) as $param) { $new_matches[] = $param; } } $matches = $new_matches; # Set controller, if null if ($route->getController() == null) { $route->setController(String::capitalise(array_shift($matches))); } # Set action, if null if ($route->getAction() == null) { # No more matches are available if (count($matches) == 0) { continue; } $route->setAction(String::camelise(array_shift($matches))); } # Merge any additional params $route->setParams(array_merge($route->getParams(), $matches)); } return $route; } } return null; }