Added API examples

This commit is contained in:
Eduard Urbach 2018-03-28 01:32:49 +02:00
parent f3b9eff1f4
commit c5de0c6d6f
7 changed files with 99 additions and 49 deletions

View File

@ -9,6 +9,7 @@ import (
"github.com/animenotifier/notify.moe/auth"
"github.com/animenotifier/notify.moe/middleware"
"github.com/animenotifier/notify.moe/pages"
"github.com/animenotifier/notify.moe/utils/routetests"
)
var app = aero.New()
@ -73,7 +74,7 @@ func configure(app *aero.Application) *aero.Application {
})
// Specify test routes
for route, examples := range routeTests {
for route, examples := range routetests.All() {
app.Test(route, examples)
}

View File

@ -7,6 +7,7 @@ import (
"testing"
"github.com/aerogo/aero"
"github.com/animenotifier/notify.moe/utils/routetests"
)
// TestRouteStatusCodes tests the status code of every route registered in routeTests.
@ -14,7 +15,7 @@ func TestRouteStatusCodes(t *testing.T) {
app := configure(aero.New())
// Iterate through every route
for _, examples := range routeTests {
for _, examples := range routetests.All() {
// Iterate through every example specified for that route
for _, example := range examples {
// Create a new HTTP request

View File

@ -2,12 +2,14 @@ package apidocs
import (
"reflect"
"strings"
"unicode"
"github.com/aerogo/aero"
"github.com/animenotifier/arn"
"github.com/animenotifier/notify.moe/components"
"github.com/animenotifier/notify.moe/utils"
"github.com/animenotifier/notify.moe/utils/routetests"
)
// ByType renders the api docs page for the given type.
@ -16,6 +18,7 @@ func ByType(typeName string) func(*aero.Context) string {
t := arn.API.Type(typeName)
fields := []*utils.APIField{}
if t.Kind() == reflect.Struct {
for i := 0; i < t.NumField(); i++ {
field := t.Field(i)
@ -48,7 +51,11 @@ func ByType(typeName string) func(*aero.Context) string {
Type: typeName,
})
}
}
return ctx.HTML(components.APIDocs(t, fields))
route := "/api/" + strings.ToLower(typeName) + "/:id"
examples := routetests.All()[route]
return ctx.HTML(components.APIDocs(t, examples, fields))
}
}

View File

@ -1,19 +1,30 @@
component APIDocs(t reflect.Type, fields []*utils.APIField)
component APIDocs(t reflect.Type, examples []string, fields []*utils.APIField)
.api-docs-page
h1= "API: " + t.Name()
h2 Examples
if len(examples) == 0
p.no-data No examples have been added to this type yet.
else
.buttons
each example in examples
a.button(href="https://notify.moe" + example, target="_blank")
Icon("external-link")
span= example
h2 Fields
table
thead
tr
th Field name
th JavaScript notation
th Field
th Type
tbody
each field in fields
tr
td= field.Name
td= field.JSON
td= field.Type
tr.api-field
td.api-field-json(title=field.Name + " (Go)")= field.JSON
td.api-field-type= field.Type
.corner-buttons
a.button(href="/api")

View File

@ -0,0 +1,19 @@
.api-docs-page
h1,
h2
text-align left
table
margin 0
.buttons
justify-content flex-start
.api-field
//
.api-field-json
//
.api-field-type
opacity 0.5

View File

@ -1,9 +1,15 @@
h1, h2
h1
font-size 2em
font-weight bold
text-align center
line-height 1.3em
h2
font-size 1.6em
line-height 1.3em
font-weight bold
text-align center
h3
font-size 1.5em
line-height 1.6em

View File

@ -1,4 +1,4 @@
package main
package routetests
var routeTests = map[string][]string{
// User
@ -364,3 +364,8 @@ var routeTests = map[string][]string{
"/inventory": nil,
"/extension/embed": nil,
}
// All returns which specific routes to test for a given generic route.
func All() map[string][]string {
return routeTests
}