func (g *Generator) generateIndexHTML(htmlFile string, api *design.APIDefinition, exampleAction *design.ActionDefinition) error { file, err := codegen.SourceFileFor(htmlFile) if err != nil { return err } g.genfiles = append(g.genfiles, htmlFile) argNames := params(exampleAction) var args string if len(argNames) > 0 { query := exampleAction.QueryParams.Type.ToObject() argValues := make([]string, len(argNames)) for i, n := range argNames { q := query[n].Type.ToArray().ElemType // below works because we deal with simple types in query strings if q.Example != nil { argValues[i] = fmt.Sprintf("%v", q.Example) } else { argValues[i] = fmt.Sprintf("%v", q.GenerateExample(api.RandomGenerator())) } } args = strings.Join(argValues, ", ") } examplePath := exampleAction.Routes[0].FullPath(design.Design.APIVersionDefinition) pathParams := exampleAction.Routes[0].Params(design.Design.APIVersionDefinition) if len(pathParams) > 0 { pathVars := exampleAction.AllParams().Type.ToObject() pathValues := make([]interface{}, len(pathParams)) for i, n := range pathParams { if pathVars[n].Example != nil { pathValues[i] = fmt.Sprintf("%v", pathVars[n].Example) } else { pathValues[i] = pathVars[n].GenerateExample(api.RandomGenerator()) } } format := design.WildcardRegex.ReplaceAllLiteralString(examplePath, "/%v") examplePath = fmt.Sprintf(format, pathValues...) } if len(argNames) > 0 { args = ", " + args } exampleFunc := fmt.Sprintf( `%s%s ("%s"%s)`, exampleAction.Name, strings.Title(exampleAction.Parent.Name), examplePath, args, ) data := map[string]interface{}{ "API": api, "ExampleFunc": exampleFunc, } return file.ExecuteTemplate("exampleHTML", exampleT, nil, data) }
// buildAttributeSchema initializes the given JSON schema that corresponds to the given attribute. func buildAttributeSchema(api *design.APIDefinition, s *JSONSchema, at *design.AttributeDefinition) *JSONSchema { if at.View != "" { inner := NewJSONSchema() inner.Ref = MediaTypeRef(api, at.Type.(*design.MediaTypeDefinition), at.View) s.Merge(inner) return s } s.Merge(TypeSchema(api, at.Type)) if s.Ref != "" { // Ref is exclusive with other fields return s } s.DefaultValue = toStringMap(at.DefaultValue) s.Description = at.Description s.Example = at.GenerateExample(api.RandomGenerator(), nil) val := at.Validation if val == nil { return s } s.Enum = val.Values s.Format = val.Format s.Pattern = val.Pattern if val.Minimum != nil { s.Minimum = val.Minimum } if val.Maximum != nil { s.Maximum = val.Maximum } if val.MinLength != nil { s.MinLength = val.MinLength } if val.MaxLength != nil { s.MaxLength = val.MaxLength } s.Required = val.Required return s }