public virtual IRouteDefinition Build(ActionCall call) { var routeDefinition = call.ToRouteDefinition(); var strippedNamespace = stripNamespace(call); visit(routeDefinition); if (strippedNamespace != call.HandlerType.Namespace) { if (!strippedNamespace.Contains(".")) { routeDefinition.Append(breakUpCamelCaseWithHypen(strippedNamespace)); } else { var patternParts = strippedNamespace.Split(new[] { "." }, StringSplitOptions.None); foreach (var patternPart in patternParts) { routeDefinition.Append(breakUpCamelCaseWithHypen(patternPart.Trim())); } } } var handlerName = call.HandlerType.Name; var match = HandlerExpression.Match(handlerName); if (match.Success && MethodToUrlBuilder.Matches(handlerName)) { // We're forcing handlers to end with "_handler" in this case handlerName = handlerName.Substring(0, match.Index); var properties = call.HasInput ? new TypeDescriptorCache().GetPropertiesFor(call.InputType()).Keys : new string[0]; MethodToUrlBuilder.Alter(routeDefinition, handlerName, properties); } else { // Otherwise we're expecting something like "GetHandler" var httpMethod = call.HandlerType.Name.Replace(HANDLER, string.Empty); routeDefinition.ConstrainToHttpMethods(httpMethod.ToUpper()); } if (call.HasInput) { routeDefinition.ApplyInputType(call.InputType()); } return(routeDefinition); }
public void matches_positive() { MethodToUrlBuilder.Matches("get_this").ShouldBeTrue(); }
public void matches_negative() { MethodToUrlBuilder.Matches("somethingelse").ShouldBeFalse(); }