private static string GetOutputFile(OperationInfo op) { var name = op.Category ?? "uncategorized"; return(name + ".md"); }
private static void WriteOperation(OperationInfo op, TextWriter output, TextWriter mainWriter, Options options) { output.WriteLine("## {0}", op.OperationName); List <string> head; if (options.ForBackend) { head = new List <string> { op.IsAction ? "- Type: **ACTION**" : "- Type: **FUNCTION**", $"- Repository: **{op.GithubRepository}**", $"- Project: **{op.ProjectName}**", $"- File: **{op.FileRelative}**", $"- Class: **{op.Namespace}.{op.ClassName}**", $"- Method: **{op.MethodName}**" }; if (op.Icon != null) { head.Add($"- Icon: **{op.Icon}**"); } } else { head = new List <string> { op.IsAction ? "- Type: **ACTION**" : "- Type: **FUNCTION**" }; if (op.Icon != null) { head.Add($"- Icon: **{op.Icon}**"); } } output.Write(string.Join(Environment.NewLine, head)); output.WriteLine("."); if (op.Description != null) { output.WriteLine("### Description:"); output.WriteLine(); output.WriteLine(op.Description); } output.WriteLine(); if (!string.IsNullOrEmpty(op.Documentation)) { output.WriteLine(op.Documentation); } output.WriteLine(); if (options.ForBackend) { output.WriteLine("### Parameters:"); foreach (var prm in op.Parameters) { output.WriteLine("- **{0}** ({1}){2}: {3}", prm.Name, prm.Type.FormatType(), prm.IsOptional ? " optional" : "", prm.Documentation); } if (op.ReturnValue.Type != "void") { output.WriteLine("- **Return value** ({0}): {1}", op.ReturnValue.Type.FormatType(), op.ReturnValue.Documentation); } } else { output.WriteLine("### Requested resource:"); var res = op.Parameters.First(); output.WriteLine(res.Documentation); var onlyRoot = op.ContentTypes.Count == 1 && op.ContentTypes[0] == "N.CT.PortalRoot"; if (onlyRoot) { output.WriteLine("Can only be called on the root content."); } if (!onlyRoot && op.ContentTypes.Count > 0) { var contentTypes = string.Join(", ", op.ContentTypes.Select(x => x.Replace("N.CT.", ""))); if (contentTypes == "GenericContent, ContentType") { output.WriteLine("The `targetContent` can be any content type"); } else { output.WriteLine("The `targetContent` can be {0}", contentTypes); } } var request = onlyRoot ? $"/odata.svc/('Root')/{op.OperationName}" : $"/odata.svc/Root/...('targetContent')/{op.OperationName}"; output.WriteLine("```"); output.WriteLine(request); output.WriteLine("```"); output.WriteLine("### Parameters:"); var prms = op.Parameters.Skip(1).ToArray(); if (prms.Length == 0) { output.WriteLine("There are no parameters."); } else { foreach (var prm in prms) { output.WriteLine("- **{0}** ({1}){2}: {3}", prm.Name, prm.Type.FormatType(), prm.IsOptional ? " optional" : "", prm.Documentation); } } } output.WriteLine(); if (0 < op.ContentTypes.Count + op.AllowedRoles.Count + op.RequiredPermissions.Count + op.RequiredPolicies.Count + op.Scenarios.Count) { output.WriteLine("### Requirements:"); if (options.ForBackend) { WriteAttribute("ContentTypes", op.ContentTypes, output); } WriteAttribute("AllowedRoles", op.AllowedRoles, output); WriteAttribute("RequiredPermissions", op.RequiredPermissions, output); WriteAttribute("RequiredPolicies", op.RequiredPolicies, output); WriteAttribute("Scenarios", op.Scenarios, output); } output.WriteLine(); //// all existing parameters //foreach (var parameter in op.Parameters) // mainWriter.WriteLine("{0}\t{1}\t{2}\tparam\t{3}", op.Project.Name, op.FileRelative, op.MethodName, parameter.Type); //mainWriter.WriteLine("{0}\t{1}\t{2}\treturn\t{3}", op.Project.Name, op.FileRelative, op.MethodName, op.ReturnValue.Type); }