public static void Alter(IRouteDefinition route, string methodName, IEnumerable<string> properties, Action<string> log) { log("Method name interpreted by the MethodToUrlBuilder"); var parts = AddHttpConstraints(route, methodName, log); for (var i = 0; i < parts.Count; i++) { var part = parts[i]; if (properties.Contains(part)) { log(" - adding route input for property " + part); parts[i] = "{" + part + "}"; } else { parts[i] = part.ToLower(); } } if (parts.Any()) { route.Append(parts.Join("/")); } }
public void Given() { var graph = new BehaviorGraph(); var chain = graph.AddActionFor("api/action1/{input}/", typeof(Action1)); _route = chain.Route; }
public void Setup() { _policy = new RouteConstraintPolicy(); _routeDefinition = new RouteDefinition("something"); _policy.AddHttpMethodFilter(x => x.Method.Name.StartsWith("Query"), "GET"); _policy.AddHttpMethodFilter(x => x.Method.Name.EndsWith("Command"), "POST"); }
public IRouteDefinition Build(ActionCall call) { IRouteDefinition route = call.ToRouteDefinition(); if (!IgnoreControllerNamespaceEntirely) { addNamespace(route, call); } if (!IgnoreControllerNamesEntirely) { addClassName(route, call); } addMethodName(route, call); if (call.HasInput) { _routeInputPolicy.AlterRoute(route, call); } _modifications.Each(m => { if (m.Filter(call)) { m.Modify(route); } }); return(route); }
public void VisitRoute(IRouteDefinition route, BehaviorChain chain) { if (_behaviorFilters.MatchesAll(chain) && _routeFilters.MatchesAll(route)) { _actions.Do(route, chain); } }
public void Apply(BehaviorGraph graph, BehaviorChain chain) { // Don't override the route if it already exists if (chain.Route != null) { return; } var log = graph.Observer; ActionCall call = chain.Calls.FirstOrDefault(); if (call == null) { return; } IUrlPolicy policy = _policies.FirstOrDefault(x => x.Matches(call, log)) ?? _defaultUrlPolicy; log.RecordCallStatus(call, "First matching UrlPolicy (or default): {0}".ToFormat(policy.GetType().Name)); IRouteDefinition route = policy.Build(call); _constraintPolicy.Apply(call, route, log); log.RecordCallStatus(call, "Route definition determined by url policy: [{0}]".ToFormat(route.ToRoute().Url)); graph.RegisterRoute(chain, route); }
public static void Alter(IRouteDefinition route, string methodName, IEnumerable<string> properties, Action<string> log) { log("Method name interpreted by the MethodToUrlBuilder"); var parts = methodName.Split('_').ToList(); var method = parts.First().ToUpper(); if (RouteDefinition.VERBS.Contains(method)) { log(" - adding Http method constraint {0}".ToFormat(method)); route.AddHttpMethodConstraint(method); parts.RemoveAt(0); } for (int i = 0; i < parts.Count; i++) { var part = parts[i]; if (properties.Contains(part)) { log(" - adding route input for property " + part); parts[i] = "{" + part + "}"; } else { parts[i] = part.ToLower(); } } route.Append(parts.Join("/")); }
public static void Alter(IRouteDefinition route, string methodName, IEnumerable <string> properties, Action <string> log) { log("Method name interpreted by the MethodToUrlBuilder"); var parts = AddHttpConstraints(route, methodName, log); for (var i = 0; i < parts.Count; i++) { var part = parts[i]; if (properties.Contains(part)) { log(" - adding route input for property " + part); parts[i] = "{" + part + "}"; } else { parts[i] = part.ToLower(); } } if (parts.Any()) { route.Append(parts.Join("/")); } }
public static void Alter(IRouteDefinition route, string methodName, IEnumerable <string> properties, Action <string> log) { log("Method name interpreted by the MethodToUrlBuilder"); var parts = methodName.Split('_').ToList(); var method = parts.First().ToUpper(); if (RouteDefinition.VERBS.Contains(method)) { log(" - adding Http method constraint {0}".ToFormat(method)); route.AddHttpMethodConstraint(method); parts.RemoveAt(0); } for (int i = 0; i < parts.Count; i++) { var part = parts[i]; if (properties.Contains(part)) { log(" - adding route input for property " + part); parts[i] = "{" + part + "}"; } else { parts[i] = part.ToLower(); } } route.Append(parts.Join("/")); }
public static Parameter createParameter(PropertyInfo propertyInfo, IRouteDefinition route) { var parameter = new Parameter { name = propertyInfo.Name, dataType = propertyInfo.PropertyType.Name, paramType = "post", allowMultiple = false, required = propertyInfo.HasAttribute <RequiredAttribute>(), description = propertyInfo.GetAttribute <DescriptionAttribute>(a => a.Description), defaultValue = propertyInfo.GetAttribute <DefaultValueAttribute>(a => a.Value.ToString()), allowableValues = getAllowableValues(propertyInfo) }; if (route.Input.RouteParameters.Any(r => r.Name == propertyInfo.Name)) { parameter.paramType = "path"; } if (route.Input.QueryParameters.Any(r => r.Name == propertyInfo.Name)) { parameter.paramType = "query"; } return(parameter); }
public void Apply(ActionCall call, IRouteDefinition routeDefinition) { var httpMethods = _httpMethodFilters.Where(x => x.Filter(call)).Select(x => x.Method).ToArray(); if (httpMethods.Length > 0) { routeDefinition.AddRouteConstraint(HTTP_METHOD_CONSTRAINT, new HttpMethodConstraint(httpMethods)); } }
public void Setup() { _policy = new RouteConstraintPolicy(); _routeDefinition = new RouteDefinition("something"); _observer = new RecordingConfigurationObserver(); _policy.AddHttpMethodFilter(x => x.Method.Name.StartsWith("Query"), "GET"); _policy.AddHttpMethodFilter(x => x.Method.Name.EndsWith("Command"), "POST"); }
private bool shouldBeClickable(IRouteDefinition routeDefinition) { if (routeDefinition == null || routeDefinition.Rank > 0) return false; if (routeDefinition is NulloRouteDefinition) return false; var httpConstraint = routeDefinition.Constraints.Select(c => c.Value).OfType<HttpMethodConstraint>().FirstOrDefault(); if (httpConstraint != null && !httpConstraint.AllowedMethods.Any(m => m.Equals("GET", StringComparison.OrdinalIgnoreCase))) return false; return true; }
public static void ConstrainToHttpMethods(this IRouteDefinition routeDef, params string[] methods) { if (methods.Length == 0) { return; } routeDef.AddRouteConstraint(RouteConstraintPolicy.HTTP_METHOD_CONSTRAINT, new HttpMethodConstraint(methods)); }
public void Setup() { _policy = new RouteConstraintPolicy(); _routeDefinition = MockRepository.GenerateMock<IRouteDefinition>(); _policy.AddHttpMethodFilter(x => x.Method.Name.StartsWith("Query"), "GET"); _policy.AddHttpMethodFilter(x => x.Method.Name.EndsWith("Command"), "POST"); _argsToAddConstraint = _routeDefinition.CaptureArgumentsFor(r => r.AddRouteConstraint(null, null)); }
public static void ApplyQueryStringAttributes(this IRouteDefinition routeDefinition, ActionCall call) { if (call.HasInput) { call .InputType() .PropertiesWhere(p => p.HasAttribute <QueryStringAttribute>()) .Each(routeDefinition.Input.AddQueryInput); } }
public static void ApplyRouteInputAttributes(this IRouteDefinition routeDefinition, ActionCall call) { if (call.HasInput) { call .InputType() .PropertiesWhere(p => p.HasAttribute <RouteInputAttribute>()) .Each(p => routeDefinition.Input.AddRouteInput(new RouteParameter(new SingleProperty(p)), true)); } }
public void Apply(ActionCall call, IRouteDefinition routeDefinition) { _httpMethodFilters.Where(x => x.Filter(call)).Each(filter => { routeDefinition.Trace("Adding route constraint {0} based on filter [{1}]", filter.Method, filter.Description); routeDefinition.AddHttpMethodConstraint(filter.Method); }); }
public void Given() { var graph = new BehaviorGraph(); var chain = graph.AddActionFor("api/action1/{input}/", typeof (Action1)); _route = chain.Route; _property = ReflectionHelper.GetProperty<ActionRequest>(a => a.redfish); _result = ActionCallMapper.createParameter(_property, _route); }
public void SetUp() { graph = new FubuRegistry(x => { x.Route("/area/sub/{Name}/{Age}") .Calls<InputController>(c => c.DoSomething(null)).OutputToJson(); }).BuildGraph(); route = graph.Behaviors.Where(x => x.InputType() == typeof (Registration.InputModel)).First().Route; }
public RoutedChain(IRouteDefinition route) { if (route == null) { throw new ArgumentNullException("route"); } UrlCategory = new UrlCategory(); Route = route; }
public void AddMethodName(IRouteDefinition route, ActionCall call) { if (_ignoredMethodNames.Contains(call.Method.Name.ToLower())) return; var urlPart = _methodNameBuilder.Build(call.Method); if (urlPart.IsNotEmpty()) { route.Append(urlPart.ToLower()); } }
public RoutedChain(IRouteDefinition route) { if (route == null) { throw new ArgumentNullException("route"); } Route = route; }
public void Given() { var graph = new BehaviorGraph(); var chain = graph.AddActionFor("api/action1/{input}/", typeof(Action1)); _route = chain.Route; _property = ReflectionHelper.GetProperty <ActionRequest>(a => a.redfish); _result = ActionCallMapper.createParameter(_property, _route); }
private static void AppendMethod(IRouteDefinition route, ActionCallBase call, IEnumerable <PropertyInfo> properties, IEnumerable <Regex> ignore) { var part = RemovePattern(call.Method.Name, ignore); Append(route, properties, part); if (call.HasInput) { route.ApplyInputType(call.InputType()); } }
public void Apply(ActionCall call, IRouteDefinition routeDefinition, IConfigurationObserver observer) { _httpMethodFilters.Where(x => x.Filter(call)).Each(filter => { observer.RecordCallStatus(call, "Adding route constraint {0} based on filter [{1}]".ToFormat(filter.Method, filter.Description)); routeDefinition.AddHttpMethodConstraint(filter.Method); }); }
public void Setup() { _policy = new RouteConstraintPolicy(); _routeDefinition = MockRepository.GenerateMock <IRouteDefinition>(); _observer = new RecordingConfigurationObserver(); _policy.AddHttpMethodFilter(x => x.Method.Name.StartsWith("Query"), "GET"); _policy.AddHttpMethodFilter(x => x.Method.Name.EndsWith("Command"), "POST"); _argsToAddConstraint = _routeDefinition.CaptureArgumentsFor(r => r.AddRouteConstraint(null, null)); }
public void SetUp() { visitor = new RouteVisitor(); route = MockRepository.GenerateMock<IRouteDefinition>(); chain = new BehaviorChain(); processor = MockRepository.GenerateMock<RouteProcessor>(); visitor.Actions += (x, y) => processor.Got(x, y); }
private static void Append(IRouteDefinition route, IEnumerable <PropertyInfo> properties, params string[] parts) { var url = parts.Select(x => x.Split('_').Select(y => properties.Select(z => z.Name).Contains(y) ? "{" + y + "}" : y.ToLower())) .Select(x => x.Where(y => !string.IsNullOrEmpty(y)).Join("/")) .Where(x => !string.IsNullOrEmpty(x)).ToList(); if (url.Any()) { route.Append(url.Join("/")); } }
/// <summary> /// Finds the matching BehaviorChain for the given IRouteDefinition. If no /// BehaviorChain exists, one is created and added to the BehaviorGraph /// </summary> /// <param name = "route"></param> /// <returns></returns> public BehaviorChain ChainFor(IRouteDefinition route) { var chain = _chains.OfType<RoutedChain>().FirstOrDefault(x => x.Route == route); if (chain == null) { chain = new RoutedChain(route); _chains.Fill(chain); } return chain; }
public static List<string> AddHttpConstraints(IRouteDefinition route, string methodName) { var parts = methodName.Replace("___", "-").Replace("__", "_^").Split('_').ToList(); var method = parts.First().ToUpper(); if (RouteDefinition.VERBS.Contains(method)) { route.AddHttpMethodConstraint(method); parts.RemoveAt(0); } return parts; }
public RoutedChain(IRouteDefinition route, Type inputType, Type resourceType) : this(route) { if (inputType != null) { route.ApplyInputType(inputType); } if (resourceType != null) { ResourceType(resourceType); } }
private void addNamespace(IRouteDefinition route, ActionCall call) { var ns = replace(call.HandlerType.Namespace, _ignoredNamespaces).TrimStart('.'); ns = ns.Replace('.', '/'); route.Append(ns); if (IgnoreControllerFolderName) { route.RemoveLastPatternPart(); } }
private RouteBase buildRoute(IServiceFactory factory, SessionStateRequirement defaultSessionRequirement, BehaviorChain chain, IRouteDefinition routeDefinition) { var requiresSession = routeDefinition.SessionStateRequirement ?? defaultSessionRequirement; var route = routeDefinition.ToRoute(); var handlerSource = DetermineHandlerSource(requiresSession, chain); var invoker = DetermineInvoker(factory, chain); route.RouteHandler = new FubuRouteHandler(invoker, handlerSource); return route; }
public static List<string> AddHttpConstraints(IRouteDefinition route, string methodName, Action<string> log) { var parts = methodName.Split('_').ToList(); var method = parts.First().ToUpper(); if (RouteDefinition.VERBS.Contains(method)) { log(" - adding Http method constraint {0}".ToFormat(method)); route.AddHttpMethodConstraint(method); parts.RemoveAt(0); } return parts; }
public static List <string> AddHttpConstraints(IRouteDefinition route, string methodName) { var parts = methodName.Replace("___", "-").Replace("__", "_^").Split('_').ToList(); var method = parts.First().ToUpper(); if (RouteDefinition.VERBS.Contains(method)) { route.AddHttpMethodConstraint(method); parts.RemoveAt(0); } return(parts); }
public void Apply(ActionCall call, IRouteDefinition routeDefinition, IConfigurationObserver observer) { var matchingFilters = _httpMethodFilters.Where(x => x.Filter(call)); var httpMethods = matchingFilters.Select(x => x.Method).ToArray(); if (httpMethods.Length > 0) { routeDefinition.AddRouteConstraint(HTTP_METHOD_CONSTRAINT, new HttpMethodConstraint(httpMethods)); matchingFilters.Each(filter => observer.RecordCallStatus(call, "Adding route constraint {0} based on filter [{1}]".ToFormat(filter.Method, filter.Description))); } }
public static void Alter(IRouteDefinition route, ActionCall call) { var properties = call.HasInput ? new TypeDescriptorCache().GetPropertiesFor(call.InputType()).Keys : new string[0]; Alter(route, call.Method.Name, properties, text => call.Trace(text)); if (call.HasInput) { route.ApplyInputType(call.InputType()); } }
public static IEnumerable <string> getRouteVerbs(IRouteDefinition route) { var verbs = route.AllowedHttpMethods; //no constraints are presnt so we default to GET //Better than emitting operations for all known HTTP verbs? if (!verbs.Any()) { verbs.Add("GET"); } return(verbs); }
private void addMethodName(IRouteDefinition route, ActionCall call) { if (_ignoredMethodNames.Contains(call.Method.Name.ToLower())) { return; } string urlPart = _methodNameBuilder.Build(call.Method); if (urlPart.IsNotEmpty()) { route.Append(urlPart.ToLower()); } }
public static IEnumerable<string> getRouteVerbs(IRouteDefinition route) { var verbs = route.AllowedHttpMethods; //no constraints are presnt so we default to GET //Better than emitting operations for all known HTTP verbs? if (!verbs.Any()) { verbs.Add("GET"); } return verbs; }
public static void Alter(IRouteDefinition route, ActionCall call, IConfigurationObserver observer) { var properties = call.HasInput ? new TypeDescriptorCache().GetPropertiesFor(call.InputType()).Keys : new string[0]; Alter(route, call.Method.Name, properties, text => observer.RecordCallStatus(call, text)); if (call.HasInput) { route.ApplyInputType(call.InputType()); } }
private RouteBase buildRoute(IServiceFactory factory, SessionStateRequirement defaultSessionRequirement, BehaviorChain chain, IRouteDefinition routeDefinition) { var requiresSession = routeDefinition.SessionStateRequirement ?? defaultSessionRequirement; var route = routeDefinition.ToRoute(); var handlerSource = DetermineHandlerSource(requiresSession, chain); var invoker = DetermineInvoker(factory, chain); route.RouteHandler = new FubuRouteHandler(invoker, handlerSource); return(route); }
/// <summary> /// Finds the matching BehaviorChain for the given IRouteDefinition. If no /// BehaviorChain exists, one is created and added to the BehaviorGraph /// </summary> /// <param name = "route"></param> /// <returns></returns> public BehaviorChain BehaviorFor(IRouteDefinition route) { var chain = _behaviors.FirstOrDefault(x => x.Route == route); if (chain == null) { chain = new BehaviorChain { Route = route }; _behaviors.Fill(chain); } return(chain); }
public static List <string> AddHttpConstraints(IRouteDefinition route, string methodName, Action <string> log) { var parts = methodName.Split('_').ToList(); var method = parts.First().ToUpper(); if (RouteDefinition.VERBS.Contains(method)) { log(" - adding Http method constraint {0}".ToFormat(method)); route.AddHttpMethodConstraint(method); parts.RemoveAt(0); } return(parts); }
private static void ConstrainToHttpMethod( IRouteDefinition route, ActionCallBase call, IEnumerable<Configuration.HttpConstraintPattern> patterns) { Func<Configuration.Segment, string> getName = s => { switch (s) { case Configuration.Segment.Namespace: return call.HandlerType.Namespace; case Configuration.Segment.Class: return call.HandlerType.Name; case Configuration.Segment.Method: return call.Method.Name; } return null; }; patterns.Where(x => x.Regex.IsMatch(getName(x.Type))).ToList(). ForEach(x => route.AddHttpMethodConstraint(x.Method)); }
public void VisitRoute(IRouteDefinition route, BehaviorChain chain) { ActionCall action = chain.FirstCall(); if (action == null) return; if (action.HasInput) { // TODO: throw if route is null; var model = (IModelUrl) route; _registration.AddModel(model); } var actionUrl = new ActionUrl(route, action); _registration.AddAction(actionUrl); }
public static void Alter(IRouteDefinition route, ActionCall call) { var properties = call.HasInput ? new TypeDescriptorCache().GetPropertiesFor(call.InputType()).Keys : new string[0]; Alter(route, call.Method.Name, properties); if (call.HasInput) { route.ApplyInputType(call.InputType()); if (call.InputType().CanBeCastTo<ResourcePath>()) { ResourcePath.AddResourcePathInputs(route); } } }
public static Parameter createParameter(PropertyInfo propertyInfo, IRouteDefinition route) { var parameter = new Parameter { name = propertyInfo.Name, dataType = propertyInfo.PropertyType.Name, paramType = "post", allowMultiple = false, required = propertyInfo.HasAttribute<RequiredAttribute>(), description = propertyInfo.GetAttribute<DescriptionAttribute>(a => a.Description), defaultValue = propertyInfo.GetAttribute<DefaultValueAttribute>(a => a.Value.ToString()), allowableValues = getAllowableValues(propertyInfo) }; if (route.Input.RouteParameters.Any(r => r.Name == propertyInfo.Name)) parameter.paramType = "path"; if (route.Input.QueryParameters.Any(r => r.Name == propertyInfo.Name)) parameter.paramType = "query"; return parameter; }
public static void Alter(IRouteDefinition route, string methodName, IEnumerable<string> properties) { var parts = AddHttpConstraints(route, methodName); for (var i = 0; i < parts.Count; i++) { var part = parts[i]; if (properties.Contains(part)) { parts[i] = "{" + part + "}"; } else { parts[i] = part.ToLower(); } } if (parts.Any()) { route.Append(parts.Join("/").Replace('^', '_')); } }
public static void AddResourcePathInputs(IRouteDefinition route) { route.Append(UrlSuffix); route.RegisterRouteCustomization(r => { if (r.Defaults == null) { r.Defaults = new RouteValueDictionary(); } r.Defaults.Add("Part0", null); r.Defaults.Add("Part1", null); r.Defaults.Add("Part2", null); r.Defaults.Add("Part3", null); r.Defaults.Add("Part4", null); r.Defaults.Add("Part5", null); r.Defaults.Add("Part6", null); r.Defaults.Add("Part7", null); r.Defaults.Add("Part8", null); r.Defaults.Add("Part9", null); }); }
protected virtual void visit(IRouteDefinition routeDefinition) { // no-op }
private void addNamespace(IRouteDefinition route, ActionCall call) { string ns = replace(call.HandlerType.Namespace, _ignoredNamespaces).TrimStart('.'); ns = ns.Replace('.', '/'); route.Append(ns); if (IgnoreControllerFolderName) { route.RemoveLastPatternPart(); } }