private static IDictionary <string, string> CreateLookup(IEndpointOverrides global, IEndpointOverrides local, string type, Func <IEndpointOverrides, IDictionary <string, string> > @from, ICollection <string> declaredKeys ) { var d = new SortedDictionary <string, string>(); foreach (var kv in from(global)) { d[kv.Key] = kv.Value; } if (local == null) { return(d); } var localDictionary = from(local); foreach (var kv in localDictionary) { d[kv.Key] = kv.Value; } var name = local.GetType().Name; foreach (var p in localDictionary.Keys.Except(declaredKeys)) { Generator.ApiGenerator.Warnings.Add($"On {name} {type} key '{p}' is not found in spec"); } return(d); }
public static Dictionary <string, ApiQueryParameters> Patch( IDictionary <string, ApiQueryParameters> source, IEndpointOverrides overrides) { if (source == null) { return(null); } var globalOverrides = new GlobalOverrides(); var declaredKeys = source.Keys; var skipList = CreateSkipList(globalOverrides, overrides, declaredKeys); var partialList = CreatePartialList(globalOverrides, overrides, declaredKeys); var renameLookup = CreateRenameLookup(globalOverrides, overrides, declaredKeys); var obsoleteLookup = CreateObsoleteLookup(globalOverrides, overrides, declaredKeys); var patchedParams = new Dictionary <string, ApiQueryParameters>(); foreach (var kv in source) { var queryStringKey = kv.Key; kv.Value.QueryStringKey = queryStringKey; if (!renameLookup.TryGetValue(queryStringKey, out var preferredName)) { preferredName = kv.Key; } kv.Value.ClsName = CreateCSharpName(preferredName); if (skipList.Contains(queryStringKey)) { continue; } if (partialList.Contains(queryStringKey)) { kv.Value.RenderPartial = true; } if (obsoleteLookup.TryGetValue(queryStringKey, out var obsolete)) { kv.Value.Obsolete = obsolete; } //make sure source_enabled takes a boolean only if (preferredName == "source_enabled") { kv.Value.Type = "boolean"; } patchedParams.Add(preferredName, kv.Value); } return(patchedParams); }
private static IList <string> CreateList(IEndpointOverrides global, IEndpointOverrides local, string type, Func <IEndpointOverrides, IEnumerable <string> > @from, ICollection <string> declaredKeys) { var list = new List <string>(); if (global != null) { list.AddRange(from(global)); } if (local != null) { var localList = from(local).ToList(); list.AddRange(localList); var name = local.GetType().Name; foreach (var p in localList.Except(declaredKeys)) { ApiGenerator.Warnings.Add($"On {name} {type} key '{p}' is not found in spec"); } } return(list.Distinct().ToList()); }
private static IDictionary <string, string> CreateObsoleteLookup(IEndpointOverrides global, IEndpointOverrides local, ICollection <string> declaredKeys ) => CreateLookup(global, local, "obsolete", e => e.ObsoleteQueryStringParams, declaredKeys);
public static SortedDictionary <string, QueryParameters> Patch( string endpointName, IDictionary <string, QueryParameters> source, IEndpointOverrides overrides, bool checkCommon = true ) { if (source == null) { return(null); } var globalOverrides = new GlobalOverrides(); var declaredKeys = source.Keys; var skipList = CreateSkipList(globalOverrides, overrides, declaredKeys); var partialList = CreatePartialList(globalOverrides, overrides, declaredKeys); var renameLookup = CreateRenameLookup(globalOverrides, overrides, declaredKeys); var obsoleteLookup = CreateObsoleteLookup(globalOverrides, overrides, declaredKeys); var patchedParams = new SortedDictionary <string, QueryParameters>(); var name = overrides?.GetType().Name ?? endpointName ?? "unknown"; foreach (var kv in source) { var queryStringKey = kv.Key; kv.Value.QueryStringKey = queryStringKey; if (checkCommon && RestApiSpec.CommonApiQueryParameters.Keys.Contains(queryStringKey)) { Generator.ApiGenerator.Warnings.Add($"key '{queryStringKey}' in {name} is already declared in _common.json"); continue; } if (!renameLookup.TryGetValue(queryStringKey, out var preferredName)) { preferredName = kv.Key; } kv.Value.ClsName = CreateCSharpName(preferredName); if (skipList.Contains(queryStringKey)) { kv.Value.Skip = true; } if (partialList.Contains(queryStringKey)) { kv.Value.RenderPartial = true; } if (obsoleteLookup.TryGetValue(queryStringKey, out var obsolete)) { kv.Value.Obsolete = obsolete; } //make sure source_enabled takes a boolean only if (preferredName == "source_enabled") { kv.Value.Type = "boolean"; } patchedParams[preferredName] = kv.Value; } return(patchedParams); }
private static IList <string> CreatePartialList(IEndpointOverrides global, IEndpointOverrides local, ICollection <string> declaredKeys) => CreateList(global, local, "partial", e => e.RenderPartial, declaredKeys);
private static IList <string> CreateSkipList(IEndpointOverrides global, IEndpointOverrides local, ICollection <string> declaredKeys) => CreateList(global, local, "skip", e => e.SkipQueryStringParams, declaredKeys);
private void PatchRequestParameters(IEndpointOverrides overrides) { if (this.Url.Params == null) { return; } foreach (var param in RestApiSpec.CommonApiQueryParameters) { if (!this.Url.Params.ContainsKey(param.Key)) { this.Url.Params.Add(param.Key, param.Value); } } if (this.ObsoleteQueryParameters != null) { foreach (var param in this.ObsoleteQueryParameters) { if (!this.Url.Params.ContainsKey(param.Key)) { this.Url.Params.Add(param.Key, param.Value); } } } var declaredKeys = this.Url.Params.Select(p => p.Value.OriginalQueryStringParamName ?? p.Key).ToList(); IEnumerable <string> skipList = new List <string>(); IDictionary <string, string> queryStringParamsRenameList = new Dictionary <string, string>(); if (overrides != null) { var name = overrides.GetType().Name; skipList = overrides.SkipQueryStringParams ?? skipList; queryStringParamsRenameList = overrides.RenameQueryStringParams ?? queryStringParamsRenameList; foreach (var p in skipList.Except(declaredKeys)) { ApiGenerator.Warnings.Add($"On {name} skip key '{p}' is not found in spec"); } foreach (var p in queryStringParamsRenameList.Keys.Except(declaredKeys)) { ApiGenerator.Warnings.Add($"On {name} rename key '{p}' is not found in spec"); } } var globalQueryStringRenames = new Dictionary <string, string> { { "_source", "source_enabled" }, { "_source_include", "source_include" }, { "_source_exclude", "source_exclude" }, { "q", "query_on_query_string" }, { "docvalue_fields", "doc_value_fields" }, }; foreach (var kv in globalQueryStringRenames) { if (!queryStringParamsRenameList.ContainsKey(kv.Key)) { queryStringParamsRenameList[kv.Key] = kv.Value; } } var globalOverrides = new GlobalOverrides(); var patchedParams = new Dictionary <string, ApiQueryParameters>(); foreach (var kv in this.Url.Params) { if (kv.Value.OriginalQueryStringParamName.IsNullOrEmpty()) { kv.Value.OriginalQueryStringParamName = kv.Key; } if (skipList.Contains(kv.Key)) { continue; } if (globalOverrides.RenderPartial.Contains(kv.Key)) { kv.Value.RenderPartial = true; } if (!queryStringParamsRenameList.TryGetValue(kv.Key, out var newName)) { patchedParams.Add(kv.Key, kv.Value); continue; } if (globalOverrides.RenderPartial.Contains(newName)) { kv.Value.RenderPartial = true; } //make sure source_enabled takes a boolean only if (newName == "source_enabled") { kv.Value.Type = "boolean"; } patchedParams.Add(newName, kv.Value); } this.Url.Params = patchedParams; }
private void PatchRequestParameters(IEndpointOverrides overrides) { var newParams = ApiQueryParametersPatcher.Patch(this.Url.Params, overrides); this.Url.Params = newParams; }