in coverage/index.go [240:286]
func GetModelInfoFromIndexRef(ref openapispec.Ref, swaggerRepo string) (*SwaggerModel, error) {
_, swaggerPath := SchemaNamePathFromRef(swaggerRepo, ref)
seperator := "/"
// in windows the ref might use backslashes
if strings.Contains(ref.GetURL().Path, string(os.PathSeparator)) {
seperator = string(os.PathSeparator)
}
relativeBase := swaggerRepo + strings.Split(ref.GetURL().Path, seperator)[0]
operation, err := openapispec.ResolvePathItemWithBase(nil, ref, &openapispec.ExpandOptions{RelativeBase: relativeBase})
if err != nil {
return nil, err
}
pointerTokens := ref.GetPointer().DecodedTokens()
apiPath := pointerTokens[1]
var modelName string
for _, param := range operation.Parameters {
paramRef := param.Ref
if paramRef.String() != "" {
refParam, err := openapispec.ResolveParameterWithBase(nil, param.Ref, &openapispec.ExpandOptions{RelativeBase: swaggerPath})
if err != nil {
return nil, fmt.Errorf("resolve param ref %q: %+v", param.Ref.String(), err)
}
// Update the param
param = *refParam
}
if param.In == "body" {
if paramRef.String() != "" {
modelName, swaggerPath = SchemaNamePathFromRef(swaggerPath, paramRef)
}
if param.Schema.Ref.String() != "" {
modelName, swaggerPath = SchemaNamePathFromRef(swaggerPath, param.Schema.Ref)
}
break
}
}
return &SwaggerModel{
ApiPath: apiPath,
ModelName: modelName,
SwaggerPath: swaggerPath,
}, nil
}