Ejemplo n.º 1
0
        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();
 }