public void Find_ParserList_Does_Not_Ignores_Types() { var resolver1 = TypeParserResolverCache.Find(new DateTime_Local_Parser()); var resolver2 = TypeParserResolverCache.Find(new DateTimeOffset_Local_Parser()); Assert.AreNotSame(resolver1, resolver2); }
public void Find_ParserList_Accepts_Null() { var resolver1 = TypeParserResolverCache.Find((ITypeParser[])null); var resolver2 = TypeParserResolverCache.Find((ITypeParser[])null); Assert.IsNotNull(resolver1); Assert.AreSame(resolver1, resolver2); }
public void Find_ParserList_Ignores_Order_Of_Types() { var resolver1 = TypeParserResolverCache.Find(new DateTime_Local_Parser(), new DateTimeOffset_Local_Parser()); var resolver2 = TypeParserResolverCache.Find(new DateTimeOffset_Local_Parser(), new DateTime_Local_Parser()); Assert.IsNotNull(resolver1); Assert.AreSame(resolver1, resolver2); }
public void Find_ParserList_Returns_Existing_Resolver() { var resolver1 = TypeParserResolverCache.Find(new DateTime_Local_Parser()); var resolver2 = TypeParserResolverCache.Find(new DateTime_Local_Parser()); Assert.IsNotNull(resolver1); Assert.AreSame(resolver1, resolver2); }
public void Clear_Empties_Cache() { var resolver1 = TypeParserResolverCache.Find(new DateTime_Local_Parser()); TypeParserResolverCache.Clear(); var resolver2 = TypeParserResolverCache.Find(new DateTime_Local_Parser()); Assert.AreNotSame(resolver1, resolver2); }
/// <summary> /// Returns a <see cref="TypeParserResolver"/> filled with the parsers from the <see cref="UseParserAttribute"/> attribute. /// </summary> /// <param name="useParser"></param> /// <param name="defaultResolver"></param> /// <returns></returns> public static TypeParserResolver ToTypeParserResolver(UseParserAttribute useParser, TypeParserResolver defaultResolver) { var result = defaultResolver; if (useParser?.IsValid ?? false) { result = result == null ? TypeParserResolverCache.Find(useParser.Parsers) : TypeParserResolverCache.Find(result.GetAugmentedParsers(useParser.Parsers)); } return(result); }
/// <summary> /// See interface docs. /// </summary> /// <param name="next"></param> /// <returns></returns> public AppFunc AppFuncBuilder(AppFunc next) { var controllerFinder = Factory.Resolve <IControllerFinder>(); controllerFinder.DefaultTypeParserResolver = TypeParserResolverCache.Find(DefaultParsers.ToArray()); controllerFinder.DefaultTypeFormatterResolver = TypeFormatterResolverCache.Find(DefaultFormatters.ToArray()); var controllerTypes = controllerFinder.DiscoverControllers(); var routeFinder = Factory.Resolve <IRouteFinder>(); var routes = routeFinder.DiscoverRoutes(controllerTypes); var routeMapper = Factory.Resolve <IRouteMapper>(); routeMapper.AreFormNamesCaseSensitive = AreFormNamesCaseSensitive; routeMapper.AreQueryStringNamesCaseSensitive = AreQueryStringNamesCaseSensitive; routeMapper.Initialise(routes); var routeFilter = Factory.Resolve <IRouteFilter>(); var routeCaller = Factory.Resolve <IRouteCaller>(); var responder = Factory.Resolve <IWebApiResponder>(); return(async(IDictionary <string, object> environment) => { var route = routeMapper.FindRouteForRequest(environment); if (route == null) { await next(environment); } else { environment[WebApiEnvironmentKey.Route] = route; if (routeFilter.CanCallRoute(route, environment)) { var parameters = routeMapper.BuildRouteParameters(route, environment); if (!parameters.IsValid) { environment[EnvironmentKey.ResponseStatusCode] = 400; } else { var result = routeCaller.CallRoute(environment, route, parameters); if (!route.IsVoidMethod) { if (result == null && (route.RouteAttribute?.NullStatusCode ?? 0) != 0) { environment[EnvironmentKey.ResponseStatusCode] = route.RouteAttribute.NullStatusCode; } else { responder.ReturnJsonObject(environment, result); } } } if (!environment.ContainsKey(EnvironmentKey.ResponseStatusCode)) { environment[EnvironmentKey.ResponseStatusCode] = 200; } } } }); }