Unverified Commit 33c38670 authored by Flávio Fernandes's avatar Flávio Fernandes Committed by GitHub
Browse files

Fix the reference to objects in Map (#846)

* Fix the reference to objects in Map

* Fix the prefix removal for refs
parent c6aa5669
Loading
Loading
Loading
Loading
+48 −37
Original line number Diff line number Diff line
@@ -218,10 +218,18 @@ func enumDescriptions(def Definition) (output []string) {
	return def.Enum
}

func convertRefToClassName(input string) (className string) {
func convertRefToClassName(prefixesToRemove []string) func(string) string {
	return func(input string) string {
		cleanRef := strings.TrimPrefix(input, "#/definitions/")
	className = strings.Title(cleanRef)
	return
		for _, prefix := range prefixesToRemove {
			if strings.HasPrefix(cleanRef, prefix) {
				cleanRef = strings.TrimPrefix(cleanRef, prefix)
				break
			}
		}

		return strings.Title(cleanRef)
	}
}

// camelToPascal converts a string from camel case to Pascal case.
@@ -272,11 +280,12 @@ func main() {

	var schema = &Swagger{}

	convertRefToClassNameFunc := convertRefToClassName(prefixesToRemove)
	fmap := template.FuncMap{
		"enumDescriptions": enumDescriptions,
		"enumSummary":      enumSummary,
		"snakeToCamel":     snakeToCamel,
		"cleanRef":         convertRefToClassName,
		"cleanRef":         convertRefToClassNameFunc,
		"isRefToEnum": func(ref string) bool {
			// swagger schema definition keys have inconsistent casing
			var camelOk bool
@@ -303,7 +312,7 @@ func main() {
		"title":           strings.Title,
		"camelToSnake":    camelToSnake,
		"uppercase":       strings.ToUpper,
		"convertType":     convertType,
		"convertType":     convertType(prefixesToRemove, convertRefToClassNameFunc),
		"convertPathToJs": convertPathToJs,
		"inc":             func(i int) int { return i + 1 },
		"removeNewline":   func(s string) string { return strings.Replace(s, "\n", " / ", -1) },
@@ -352,7 +361,8 @@ func main() {
	writer.Flush()
}

func convertType(prop Property) (tsType string) {
func convertType(prefixesToRemove []string, convertRefToClassName func(string) string) func(Property) (tsType string) {
	return func(prop Property) (tsType string) {
		switch prop.Type {
		case "string":
			return "string"
@@ -386,12 +396,13 @@ func convertType(prop Property) (tsType string) {
			case "boolean":
				return "Map<string, boolean>"
			default:
			return "Map<string, " + convertRefToClassName(prop.AdditionalProperties.Type) + ">"
				return "Map<string, " + convertRefToClassName(prop.AdditionalProperties.Ref) + ">"
			}
		default:
			return convertRefToClassName(prop.Ref)
		}
	}
}

// Converts a path with params to a JS interpolated string
// E.g.: "/v1/builder/{name}/user/{user_id}" becomes `/v1/builder/${name}/user/${user_id}`
+9 −8
Original line number Diff line number Diff line
@@ -55,6 +55,7 @@ type Property struct {
	}
	AdditionalProperties struct { // used for dictionaries with string keys (Property.Type=object)
		Type string
		Ref  string `json:"$ref"`
	}
	Description string
	Title       string