コード例 #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);
        }
コード例 #2
0
        public static IRouteDefinition BuildRoute(ActionCall call)
        {
            var prefix = call.HandlerType.Name.Replace("FubuDiagnostics", "").ToLower();

            if (call.Method.Name == "Index")
            {
                return(new RouteDefinition("{0}/{1}".ToFormat(DiagnosticsUrl, prefix).TrimEnd('/')));
            }

            var route = call.ToRouteDefinition();

            MethodToUrlBuilder.Alter(route, call);
            route.Prepend(prefix);
            route.Prepend(DiagnosticsUrl);

            return(route);
        }
コード例 #3
0
        public void use_separators_for_underscores_if_not_a_route_input()
        {
            MethodToUrlBuilder.Alter(theRoute, "path_folder1_folder2", theProperties, x => Debug.WriteLine(x));

            theRoute.Pattern.ShouldEqual("path/folder1/folder2");
        }
コード例 #4
0
 public void matches_positive()
 {
     MethodToUrlBuilder.Matches("get_this").ShouldBeTrue();
 }
コード例 #5
0
 public void matches_negative()
 {
     MethodToUrlBuilder.Matches("somethingelse").ShouldBeFalse();
 }
コード例 #6
0
 public void three_underscores_in_a_row_are_a_dash()
 {
     MethodToUrlBuilder.Alter(theRoute, "path_folder1___folder2", theProperties);
     theRoute.Pattern.ShouldEqual("path/folder1-folder2");
 }
コード例 #7
0
 public void two_underscores_in_a_row_are_considered_to_be_an_underscore()
 {
     MethodToUrlBuilder.Alter(theRoute, "path_folder1__folder2", theProperties);
     theRoute.Pattern.ShouldEqual("path/folder1/_folder2");
 }
コード例 #8
0
        public void use_separators_for_underscores_if_not_a_route_input()
        {
            MethodToUrlBuilder.Alter(theRoute, "path_folder1_folder2", theProperties);

            theRoute.Pattern.ShouldBe("path/folder1/folder2");
        }