//2.0 operations don't have a path so.... private OperationPath20 NormalizeOperationPath(NormalizationApiOperation op) { var pathBuilder = new StringBuilder('/'); var basePath = NormalizeBasePath(op.BasePath); if (!string.IsNullOrWhiteSpace(basePath)) { pathBuilder.Append(basePath); } if (!string.IsNullOrWhiteSpace(op.Path)) { var opPath = op.Path; if (opPath.StartsWith("/", StringComparison.InvariantCultureIgnoreCase)) { opPath = opPath.Length == 1 ? string.Empty : opPath.Substring(1); } pathBuilder.Append(opPath); } var path = pathBuilder.ToString(); var versionParam = op.Parameters.FirstOrDefault(x => x.Name.IndexOf(Constants.ParameterName_Version, StringComparison.InvariantCultureIgnoreCase) >= 0); if (versionParam != null) { var template = new UriTemplate(path, true); template.SetParameter(versionParam.Name, op.ApiVersion); path = template.Resolve(); op.Parameters.Remove(versionParam); } return(new OperationPath20(path)); }
public Task <ILifecycleContext> Execute(ILifecycleContext context) { OperationFilter = context.OperationFilter ?? Defaults.DefaultOperationFilter; OperationParameterFilter = context.OperationParameterFilter ?? Defaults.DefaultOperationParameterFilter; var ctx = new LifecycleContext(context) { State = LifecycleState.Continue }; foreach (var apiOp in ExtractApiOperations(context)) { if (!OperationFilter(apiOp.JObject)) { continue; } NormalizationApiOperation op = ParseOperationData(apiOp); op.ApiNamespace = context.ApiNamespace; op.ModelNamespace = context.ModelNamespace; op.Response.ApiNamespace = context.ApiNamespace; op.Response.ModelNamespace = context.ModelNamespace; foreach (var param in op.Parameters) { param.ApiNamespace = context.ApiNamespace; param.ModelNamespace = context.ModelNamespace; } ctx.NormalizationContext.Operations.Add(op); } return(Task.FromResult <ILifecycleContext>(ctx)); }
private ResponseDefinition NormalizeResponseDefinition(NormalizationApiOperation op) { var dt = op.Response.AsDataType(); return(new ResponseDefinition(op.Response.AsMetadata()) { DataType = dt }); }
private ResponseDefinition NormalizeResponseDefinition(NormalizationApiOperation op) { var dt = op.Response.AsDataType(); //this is a weird way of going about this. dt.Title20 = op.Response.Title20; return(new ResponseDefinition(op.Response.AsMetadata()) { DataType = dt }); }
private QualifiedName ExtractName(NormalizationApiOperation op) { var name = op.Name; if (name[0] == '_') { name = name.Substring(1); } if (char.IsLower(name[0])) { name = char.ToUpperInvariant(name[0]) + name.Substring(1); } return(new QualifiedName(name)); }
private QualifiedName ExtractName(NormalizationApiOperation op) { var name = op.Name; var resourceName = op.ResourcePath.ResourceNameFromPath(); if (name.StartsWith(resourceName)) { name = name.Substring(resourceName.Length); } if (name[0] == '_') { name = name.Substring(1); } if (char.IsLower(name[0])) { name = char.ToUpperInvariant(name[0]) + name.Substring(1); } return(new QualifiedName(name)); }
private NormalizationApiOperation ParseOperationData(object obj) { dynamic extractedOp = obj; var opObj = extractedOp.JObject; var op = new NormalizationApiOperation { ApiVersion = (string)extractedOp.ApiVersion, BasePath = (string)extractedOp.BasePath, Path = (string)extractedOp.OperationPath, ResourcePath = (string)extractedOp.ResourcePath, HttpMethod = (opObj.ContainsKey("method") ? (string)opObj.method : string.Empty).ParseHttpMethodType(), Description = opObj.ContainsKey("summary") ? (string)opObj.summary : string.Empty, Name = opObj.ContainsKey("nickname") ? (string)opObj.nickname : string.Empty }; op.Parameters.AddRange(ParseParameters(opObj)); op.Response = ParseResponse(opObj); op.SupportsStreamingUpload = ParseSupportsStreamingUpload(opObj); op.SupportsStreamingDownload = ParseSupportsStreamingDownload(opObj); return(op); }
private NormalizationApiOperation ParseOperationData(object obj) { dynamic extractedOp = obj; var opObj = extractedOp.JObject; //I should really iterate over opObj.Value.tags here and concatenate all tags but I'm not going to. //My excuse is "minimum viable product." var op = new NormalizationApiOperation { BasePath = (string)extractedOp.BasePath, Path = (string)extractedOp.OperationPath, HttpMethod = ((string)opObj.Key).ParseHttpMethodType(), Description = opObj.Value.ContainsKey("summary") ? (string)opObj.Value.summary : string.Empty, Name = opObj.Value.ContainsKey("operationId") ? (string)opObj.Value.operationId : string.Empty, ResourcePath = opObj.Value.ContainsKey("tags") ? (string)opObj.Value.tags[0] : string.Empty }; op.Parameters.AddRange(ParseParameters(opObj)); op.Response = ParseResponse(opObj); op.SupportsStreamingUpload = ParseSupportsStreamingUpload(opObj.Value); op.SupportsStreamingDownload = ParseSupportsStreamingDownload(opObj.Value); return(op); }