forked from s-mang/test2doc
-
Notifications
You must be signed in to change notification settings - Fork 0
/
action.go
72 lines (56 loc) · 1.43 KB
/
action.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package doc
import (
"net/http"
"strings"
"text/template"
"github.com/happyreturns/test2doc/doc/parse"
)
var (
actionTmpl *template.Template
actionFmt = `### {{.Title}} [{{.Method}}]
{{.Description}}{{range $req := .Requests}}
{{with $req}}{{.Render}}
{{.Response.Render}}{{end}}{{end}}`
)
func init() {
actionTmpl = template.Must(template.New("action").Parse(actionFmt))
}
type Action struct {
Title string
Description string
Method HTTPMethod
Requests []*Request
}
func (a *Action) Render() string {
reqsMap := map[int][]*Request{}
for i, req := range a.Requests {
if reqsMap[req.Response.StatusCode] == nil {
reqsMap[req.Response.StatusCode] = []*Request{}
}
reqsMap[req.Response.StatusCode] = append(reqsMap[req.Response.StatusCode], a.Requests[i])
}
sortedReqs := reqsMap[http.StatusOK]
delete(reqsMap, http.StatusOK)
for _, reqs := range reqsMap {
sortedReqs = append(sortedReqs, reqs...)
}
a.Requests = sortedReqs
return render(actionTmpl, a)
}
func NewAction(method, handlerName string) (*Action, error) {
title := parse.GetTitle(handlerName)
if len(title) == 0 {
title = strings.Title(method)
}
desc := parse.GetDescription(handlerName)
return &Action{
Title: title,
Description: desc,
Method: HTTPMethod(method),
Requests: []*Request{},
}, nil
}
func (a *Action) AddRequest(req *Request, resp *Response) {
req.Response = resp
a.Requests = append(a.Requests, req)
}