function testLoadConfiguration() { $serverKey = "the-server-key"; $configuration = RESTConfigurationLoader::loadConfiguration($serverKey); $this->assertFalse($configuration == null); $this->assertEquals(1, count($configuration->getMethods())); $this->assertEquals(0, count($configuration->getObjects())); }
function findRoute($requestUri, &$routeParameters, $httpRequestMethod, $serverKey) { $routeMethod = null; $configuration = RESTConfigurationLoader::loadConfiguration($serverKey); $methods = $configuration->getMethods(); for ($i = 0; $i < count($methods); $i++) { if ($methods[$i]->getHttp() != $httpRequestMethod) { unset($methods[$i]); } } $requestUri = Explode("?", substr($requestUri, 1)); $requestUriParts = Explode("/", $requestUri[0]); $likelyMethods = array(); $excludedMethods = array(); // Backward loop for ($i = count($requestUriParts) - 1; $i >= 0; $i--) { // Find if there's a path like that, otherwise check for placeholders foreach ($methods as $method) { $methodName = $method->getName(); if (in_array($methodName, $excludedMethods)) { continue; } $route = $method->getRoute(); if (!empty($route)) { $routeParts = Explode("/", substr($route, 1)); if (count($routeParts) <= count($requestUriParts)) { $backwardIndex = count($routeParts) - (count($requestUriParts) - $i); if ($backwardIndex >= 0) { if ($routeParts[$backwardIndex] == $requestUriParts[$i]) { if (!ArrayUtils::existKey($methodName, $likelyMethods)) { $likelyMethods[$methodName] = array(); } } else { if (RouteUtils::isRoutePlaceholder($routeParts[$backwardIndex])) { $foundParameters; $placeHolder = RouteUtils::getRoutePlaceholder($routeParts[$backwardIndex]); if (!ArrayUtils::existKey($methodName, $likelyMethods)) { $foundParameters = array(); } else { $foundParameters = $likelyMethods[$methodName]; } $foundParameters[$placeHolder] = $requestUriParts[$i]; $likelyMethods[$methodName] = $foundParameters; } else { array_push($excludedMethods, $methodName); unset($likelyMethods[$methodName]); } } } } } } } if (count($likelyMethods) > 1) { // Get the route with the highest matches $maxRouteSize = 0; foreach ($likelyMethods as $key => $value) { $route = RESTConfigurationLoader::getMethod($key, $serverKey)->getRoute(); $routeSize = count(Explode("/", substr($route, 1))); if ($routeSize > $maxRouteSize) { $maxRouteSize = $routeSize; } } foreach ($likelyMethods as $key => $value) { $route = RESTConfigurationLoader::getMethod($key, $serverKey)->getRoute(); $routeSize = count(Explode("/", substr($route, 1))); if ($routeSize < $maxRouteSize) { unset($likelyMethods[$key]); } } } if (count($likelyMethods) > 1) { $ambiguousMethods = ""; foreach ($likelyMethods as $key => $value) { $ambiguousMethods .= "\"" . $key . "\", "; } $ambiguousMethods = substr($ambiguousMethods, 0, strlen($ambiguousMethods) - 2); throw new MashapeException(sprintf(EXCEPTION_AMBIGUOUS_ROUTE, $ambiguousMethods), EXCEPTION_SYSTEM_ERROR_CODE); } // Get the first item (just one or none item can exist) foreach ($likelyMethods as $key => $value) { $routeMethod = RESTConfigurationLoader::getMethod($key, $serverKey); $routeParameters = array_merge($routeParameters, $value); break; } return $routeMethod; }