/// <summary> /// Compares two <see cref="VersionedApiDescription">API descriptions</see>. /// </summary> /// <param name="x">The <see cref="VersionedApiDescription">API descriptions</see> to compare.</param> /// <param name="y">The <see cref="VersionedApiDescription">API descriptions</see> to compare against.</param> /// <returns>0 if the objects are equal, 1 if <paramref name="x"/> is greater than <paramref name="y"/>, /// or -1 if <paramref name="x"/> is less than <paramref name="y"/>.</returns> public virtual int Compare(VersionedApiDescription x, VersionedApiDescription y) { if (x == null) { return(y == null ? 0 : -1); } else if (y == null) { return(1); } var result = CompareStrings(x.HttpMethod?.Method, y.HttpMethod?.Method); if (result == 0) { result = CompareStrings(x.RelativePath, y.RelativePath); if (result == 0) { result = CompareVersions(x.ApiVersion, y.ApiVersion); } } return(result); }
void PopulateActionDescriptions( HttpActionDescriptor actionDescriptor, IHttpRoute route, ODataRouteBuilderContext routeBuilderContext, string relativePath, Collection <VersionedApiDescription> apiDescriptions, ApiVersion apiVersion) { Contract.Requires(actionDescriptor != null); Contract.Requires(route != null); Contract.Requires(relativePath != null); Contract.Requires(apiDescriptions != null); Contract.Requires(apiVersion != null); var documentation = DocumentationProvider?.GetDocumentation(actionDescriptor); var responseDescription = CreateResponseDescriptionWithRoute(actionDescriptor, route); var responseType = responseDescription.ResponseType ?? responseDescription.DeclaredType; var requestFormatters = new List <MediaTypeFormatter>(); var responseFormatters = new List <MediaTypeFormatter>(); var supportedMethods = GetHttpMethodsSupportedByAction(route, actionDescriptor); var model = actionDescriptor.GetApiVersionModel(); var deprecated = !model.IsApiVersionNeutral && model.DeprecatedApiVersions.Contains(apiVersion); PopulateMediaTypeFormatters(actionDescriptor, routeBuilderContext.ParameterDescriptions, route, responseType, requestFormatters, responseFormatters); foreach (var method in supportedMethods) { var apiDescription = new VersionedApiDescription() { Documentation = documentation, HttpMethod = method, RelativePath = relativePath, ActionDescriptor = actionDescriptor, Route = route, ResponseDescription = responseDescription, ApiVersion = apiVersion, IsDeprecated = deprecated, Properties = { [typeof(IEdmModel)] = routeBuilderContext.EdmModel }, }; if (routeBuilderContext.EntitySet != null) { apiDescription.Properties[typeof(IEdmEntitySet)] = routeBuilderContext.EntitySet; } if (routeBuilderContext.Operation != null) { apiDescription.Properties[typeof(IEdmOperation)] = routeBuilderContext.Operation; } apiDescription.ParameterDescriptions.AddRange(routeBuilderContext.ParameterDescriptions); apiDescription.SupportedRequestBodyFormatters.AddRange(requestFormatters); apiDescription.SupportedResponseFormatters.AddRange(responseFormatters); PopulateApiVersionParameters(apiDescription, apiVersion); apiDescriptions.Add(apiDescription); } }
public void shadowed_ResponseDescription_property_should_set_internal_value() { // arrange var apiDescription = new VersionedApiDescription(); var responseDescription = new ResponseDescription() { Documentation = "Test" }; // act apiDescription.ResponseDescription = responseDescription; // assert apiDescription.ResponseDescription.Should().BeSameAs(responseDescription); }
void PopulateActionDescriptions(HttpActionDescriptor actionDescriptor, IHttpRoute route, string localPath, Collection <VersionedApiDescription> apiDescriptions, ApiVersion apiVersion) { var parameterDescriptions = CreateParameterDescriptions(actionDescriptor, route); var context = new ODataRouteBuilderContext(Configuration, localPath, (ODataRoute)route, actionDescriptor, parameterDescriptions); if (context.EdmModel.EntityContainer == null) { return; } var relativePath = new ODataRouteBuilder(context).Build(); var documentation = DocumentationProvider?.GetDocumentation(actionDescriptor); var responseDescription = CreateResponseDescription(actionDescriptor); var responseType = responseDescription.ResponseType ?? responseDescription.DeclaredType; var requestFormatters = new List <MediaTypeFormatter>(); var responseFormatters = new List <MediaTypeFormatter>(); var supportedMethods = GetHttpMethodsSupportedByAction(route, actionDescriptor); var deprecated = actionDescriptor.ControllerDescriptor.GetApiVersionModel().DeprecatedApiVersions.Contains(apiVersion); PopulateMediaTypeFormatters(actionDescriptor, parameterDescriptions, route, responseType, requestFormatters, responseFormatters); foreach (var method in supportedMethods) { var apiDescription = new VersionedApiDescription() { Documentation = documentation, HttpMethod = method, RelativePath = relativePath, ActionDescriptor = actionDescriptor, Route = route, ResponseDescription = responseDescription, ApiVersion = apiVersion, IsDeprecated = deprecated, Properties = { [typeof(IEdmModel)] = context.EdmModel } }; apiDescription.ParameterDescriptions.AddRange(parameterDescriptions); apiDescription.SupportedRequestBodyFormatters.AddRange(requestFormatters); apiDescription.SupportedResponseFormatters.AddRange(responseFormatters); PopulateApiVersionParameters(apiDescription, apiVersion); apiDescriptions.Add(apiDescription); } }
/// <summary> /// Determines whether the two <see cref="VersionedApiDescription">API descriptions</see> are equal. /// </summary> /// <param name="x">The <see cref="VersionedApiDescription">API descriptions</see> to compare.</param> /// <param name="y">The <see cref="VersionedApiDescription">API descriptions</see> to compare against.</param> /// <returns>True if the two API descriptions are equal; otherwise, false.</returns> public virtual bool Equals(VersionedApiDescription x, VersionedApiDescription y) { if (x == null) { return(y == null); } else if (y == null) { return(false); } if (string.Equals(x.ID, y.ID, OrdinalIgnoreCase)) { return(x.ApiVersion == y.ApiVersion); } return(false); }
/// <summary> /// Returns a hash code for the especified <see cref="VersionedApiDescription">API description</see>. /// </summary> /// <param name="obj">The object to get a hash code for.</param> /// <returns>The hash code of the specified object.</returns> public virtual int GetHashCode(VersionedApiDescription obj) { if (obj == null) { return(0); } var id = obj.ID; if (id == null) { return(0); } var hash = comparer.GetHashCode(id); var apiVersion = obj.ApiVersion; return((hash * 397) ^ apiVersion?.GetHashCode() ?? 0); }