Skip to content
Snippets Groups Projects
Commit 9f9f2840 authored by Johan de Klerk's avatar Johan de Klerk
Browse files

docs - added summary

parent da5c234b
Branches
Tags
No related merge requests found
......@@ -3,6 +3,7 @@ package api_documentation
import (
"fmt"
"gitlab.com/uafrica/go-utils/logs"
"gitlab.com/uafrica/go-utils/string_utils"
"go/doc"
"go/parser"
"go/token"
......@@ -30,6 +31,7 @@ type DocSchemas struct {
type DocMethodInfo struct {
Description string `json:"description"`
Summary string `json:"summary"`
Tags []string `json:"tags"`
RequestBody *DocRequestBody `json:"requestBody,omitempty"`
Parameters []DocParam `json:"parameters,omitempty"`
......@@ -92,6 +94,7 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string
// Meta data
functionName := GetFunctionName(handler.FuncValue.Interface())
docMethod.Description = functionDocs[functionName]
docMethod.Summary = functionNameToSummary(functionName, method)
docMethod.Tags = []string{path}
// Parameters
......@@ -138,6 +141,29 @@ func GetDocs(endpointHandlers map[string]map[string]interface{}, corePath string
return docs, nil
}
func functionNameToSummary(name string, method string) string {
name = string_utils.ReplaceCaseInsensitive(name, "GET", "")
name = string_utils.ReplaceCaseInsensitive(name, "POST", "")
name = string_utils.ReplaceCaseInsensitive(name, "PATCH", "")
name = string_utils.ReplaceCaseInsensitive(name, "DELETE", "")
var cleanMethod string
if method == "GET" {
cleanMethod = "Fetch"
} else if method == "POST" {
cleanMethod = "Create"
} else if method == "DELETE" {
cleanMethod = "Delete"
} else if method == "PATCH" {
cleanMethod = "Update"
}
summary := string_utils.PascalCaseToSentence(name)
summary = cleanMethod + " " + strings.ToLower(summary)
return summary
}
func addDefaultSchemas(docs Docs) {
docs.Components.Schemas["error"] = map[string]string{
"type": "string",
......@@ -365,8 +391,7 @@ func GetStructDocs(corePath string) map[string]string {
return nil
}
for k, f := range d {
fmt.Println("package", k)
for _, f := range d {
p := doc.New(f, "./", 2)
for _, objectTypes := range p.Types {
......
......@@ -234,10 +234,10 @@ func KeyToHumanReadable(s string) string {
re := regexp.MustCompile("(_|-)")
s = re.ReplaceAllString(s, " ")
return sentenceCase(string(s))
return SentenceCase(string(s))
}
func sentenceCase(str string) string {
func SentenceCase(str string) string {
for i, v := range str {
return string(unicode.ToUpper(v)) + str[i+1:]
}
......@@ -311,3 +311,20 @@ func IsValidEmail(email string) bool {
isValidEmail := regex.MatchString(email)
return isValidEmail
}
func PascalCaseToSentence(pascal string) string {
var parts []string
start := 0
for end, r := range pascal {
if end != 0 && unicode.IsUpper(r) {
parts = append(parts, pascal[start:end])
start = end
}
}
if start != len(pascal) {
parts = append(parts, pascal[start:])
}
sentence := strings.Join(parts, " ")
return sentence
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment