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

View File

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

View File

@ -2,12 +2,14 @@ package apidocs
import ( import (
"reflect" "reflect"
"strings"
"unicode" "unicode"
"github.com/aerogo/aero" "github.com/aerogo/aero"
"github.com/animenotifier/arn" "github.com/animenotifier/arn"
"github.com/animenotifier/notify.moe/components" "github.com/animenotifier/notify.moe/components"
"github.com/animenotifier/notify.moe/utils" "github.com/animenotifier/notify.moe/utils"
"github.com/animenotifier/notify.moe/utils/routetests"
) )
// ByType renders the api docs page for the given type. // 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) t := arn.API.Type(typeName)
fields := []*utils.APIField{} fields := []*utils.APIField{}
if t.Kind() == reflect.Struct {
for i := 0; i < t.NumField(); i++ { for i := 0; i < t.NumField(); i++ {
field := t.Field(i) field := t.Field(i)
@ -48,7 +51,11 @@ func ByType(typeName string) func(*aero.Context) string {
Type: typeName, 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() 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 table
thead thead
tr tr
th Field name th Field
th JavaScript notation
th Type th Type
tbody tbody
each field in fields each field in fields
tr tr.api-field
td= field.Name td.api-field-json(title=field.Name + " (Go)")= field.JSON
td= field.JSON td.api-field-type= field.Type
td= field.Type
.corner-buttons .corner-buttons
a.button(href="/api") 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-size 2em
font-weight bold font-weight bold
text-align center text-align center
line-height 1.3em line-height 1.3em
h2
font-size 1.6em
line-height 1.3em
font-weight bold
text-align center
h3 h3
font-size 1.5em font-size 1.5em
line-height 1.6em line-height 1.6em

View File

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