use referred type's type when it is not an object
i think we should also do this when it has no GVK? objects with no GVK cant be explained Kubernetes-commit: 636c259474a5e7c5743d3084cca7b50f658d982c
This commit is contained in:
parent
175f88290e
commit
ef349ea77d
|
@ -88,7 +88,7 @@ Takes dictionary as argument with keys:
|
|||
{{- $subschema := index $resolved.properties (first $.FieldPath) -}}
|
||||
{{- if eq 1 (len $.FieldPath) -}}
|
||||
{{- /* TODO: The original explain would say RESOURCE instead of FIELD here under some circumstances */ -}}
|
||||
FIELD: {{first $.FieldPath}} <{{ template "typeGuess" (dict "schema" $subschema) }}>{{"\n"}}
|
||||
FIELD: {{first $.FieldPath}} <{{ template "typeGuess" (dict "schema" $subschema "Document" $.Document) }}>{{"\n"}}
|
||||
{{- "\n" -}}
|
||||
{{- end -}}
|
||||
{{- template "output" (set $nextContext "history" (dict) "FieldPath" (slice $.FieldPath 1) "schema" $subschema ) -}}
|
||||
|
@ -149,7 +149,7 @@ Takes dictionary as argument with keys:
|
|||
{{- $nextContext := set $ "history" (set $.history $refString 1) -}}
|
||||
{{- $resolved := or (resolveRef $refString $.Document) $.schema -}}
|
||||
{{- range $k, $v := $resolved.properties -}}
|
||||
{{- template "fieldDetail" (dict "name" $k "schema" $resolved "short" $.Recursive "level" $.level) -}}
|
||||
{{- template "fieldDetail" (dict "name" $k "schema" $resolved "short" $.Recursive "level" $.level "Document" $.Document) -}}
|
||||
{{- if $.Recursive -}}
|
||||
{{- /* Check if we already know about this element */}}
|
||||
{{- template "fieldList" (set $nextContext "schema" $v "level" (add $.level 1)) -}}
|
||||
|
@ -174,12 +174,13 @@ Takes dictionary as argument with keys:
|
|||
name: name of field
|
||||
short: limit printing to a single-line summary
|
||||
level: indentation amount
|
||||
Document: openapi document
|
||||
*/ -}}
|
||||
{{- define "fieldDetail" -}}
|
||||
{{- $level := or $.level 0 -}}
|
||||
{{- $indentAmount := mul $level 2 -}}
|
||||
{{- $fieldSchema := index $.schema.properties $.name -}}
|
||||
{{- $.name | indent $indentAmount -}}{{"\t"}}<{{ template "typeGuess" (dict "schema" $fieldSchema) }}>
|
||||
{{- $.name | indent $indentAmount -}}{{"\t"}}<{{ template "typeGuess" (dict "schema" $fieldSchema "Document" $.Document) }}>
|
||||
{{- if contains $.schema.required $.name}} -required-{{- end -}}
|
||||
{{- "\n" -}}
|
||||
{{- if not $.short -}}
|
||||
|
@ -225,22 +226,31 @@ Takes dictionary as argument with keys:
|
|||
|
||||
Takes dictionary as argument with keys:
|
||||
schema: openapiv3 JSON schema
|
||||
Document: openapi document
|
||||
*/ -}}
|
||||
{{- define "typeGuess" -}}
|
||||
{{- with $.schema -}}
|
||||
{{- if .items -}}
|
||||
[]{{template "typeGuess" (dict "schema" .items)}}
|
||||
[]{{template "typeGuess" (set $ "schema" .items)}}
|
||||
{{- else if .additionalProperties -}}
|
||||
map[string]{{template "typeGuess" (dict "schema" .additionalProperties)}}
|
||||
map[string]{{template "typeGuess" (set $ "schema" .additionalProperties)}}
|
||||
{{- else if and .allOf (not .properties) (eq (len .allOf) 1) -}}
|
||||
{{- /* If allOf has a single element and there are no direct
|
||||
properties on the schema, defer to the allOf */ -}}
|
||||
{{- template "typeGuess" (dict "schema" (first .allOf)) -}}
|
||||
{{- template "typeGuess" (set $ "schema" (first .allOf)) -}}
|
||||
{{- else if index . "$ref"}}
|
||||
{{- /* Parse the #!/components/schemas/io.k8s.Kind string into just the Kind name */ -}}
|
||||
{{- $ref := index . "$ref" -}}
|
||||
{{- $name := split $ref "/" | last -}}
|
||||
{{- or (split $name "." | last) "Object" -}}
|
||||
{{- /* Look up ref schema to see primitive type. Only put the ref type name if it is an object. */ -}}
|
||||
{{- $refSchema := resolveRef $ref $.Document -}}
|
||||
{{- if (or (not $refSchema) (or (not $refSchema.type) (eq $refSchema.type "object"))) -}}
|
||||
{{- $name := split $ref "/" | last -}}
|
||||
{{- or (split $name "." | last) "Object" -}}
|
||||
{{- else if $refSchema.type -}}
|
||||
{{- or $refSchema.type "Object" -}}
|
||||
{{- else -}}
|
||||
{{- or .type "Object" -}}
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{/* Old explain used capitalized "Object". Just follow suit */}}
|
||||
{{- if eq .type "object" -}}Object
|
||||
|
|
|
@ -295,6 +295,30 @@ func TestPlaintext(t *testing.T) {
|
|||
checkEquals("string"),
|
||||
},
|
||||
},
|
||||
{
|
||||
// Show that a ref to a primitive type uses the referred type's type
|
||||
Name: "PrimitiveRef",
|
||||
Subtemplate: "typeGuess",
|
||||
Context: map[string]any{
|
||||
"schema": map[string]any{
|
||||
"description": "a cool field",
|
||||
"$ref": "#/components/schemas/v1.Time",
|
||||
},
|
||||
"Document": map[string]any{
|
||||
"components": map[string]any{
|
||||
"schemas": map[string]any{
|
||||
"v1.Time": map[string]any{
|
||||
"type": "string",
|
||||
"format": "date-time",
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
Checks: []check{
|
||||
checkEquals("string"),
|
||||
},
|
||||
},
|
||||
{
|
||||
// Shows that the typeguess template behaves correctly given an
|
||||
// array with unknown items
|
||||
|
|
Loading…
Reference in New Issue