示例#1
0
        private static string GetOutputFile(OperationInfo op)
        {
            var name = op.Category ?? "uncategorized";

            return(name + ".md");
        }
示例#2
0
        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);
        }