From 7bb5cf9783a6ab994364e6898ba52ce25a1995e4 Mon Sep 17 00:00:00 2001 From: Ryan O'Meara Date: Tue, 9 Mar 2021 17:08:02 -0500 Subject: [PATCH] GH-154 Allow override of the descriptor validation link extractor --- .../epages/restdocs/apispec/DescriptorValidator.kt | 6 +++--- .../restdocs/apispec/ResourceSnippetParameters.kt | 12 ++++++++++-- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/DescriptorValidator.kt b/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/DescriptorValidator.kt index 5f6cb8b0..1f8ba518 100644 --- a/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/DescriptorValidator.kt +++ b/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/DescriptorValidator.kt @@ -4,8 +4,8 @@ import org.springframework.restdocs.headers.HeaderDescriptor import org.springframework.restdocs.headers.HeaderDocumentation.headerWithName import org.springframework.restdocs.headers.RequestHeadersSnippet import org.springframework.restdocs.headers.ResponseHeadersSnippet -import org.springframework.restdocs.hypermedia.HypermediaDocumentation import org.springframework.restdocs.hypermedia.LinkDescriptor +import org.springframework.restdocs.hypermedia.LinkExtractor import org.springframework.restdocs.hypermedia.LinksSnippet import org.springframework.restdocs.operation.Operation import org.springframework.restdocs.payload.FieldDescriptor @@ -29,7 +29,7 @@ internal object DescriptorValidator { validateIfDescriptorsPresent( links, operation - ) { LinksSnippetWrapper(links) } + ) { LinksSnippetWrapper(links, linkExtractor) } validateIfDescriptorsPresent( responseFieldsWithLinks, @@ -174,7 +174,7 @@ internal object DescriptorValidator { } } - private class LinksSnippetWrapper(descriptors: List) : LinksSnippet(HypermediaDocumentation.halLinks(), descriptors), + private class LinksSnippetWrapper(descriptors: List, linkExtractor: LinkExtractor) : LinksSnippet(linkExtractor, descriptors), ValidateableSnippet { override fun validate(operation: Operation) { this.createModel(operation) diff --git a/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/ResourceSnippetParameters.kt b/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/ResourceSnippetParameters.kt index bf094fa0..534d64aa 100755 --- a/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/ResourceSnippetParameters.kt +++ b/restdocs-api-spec/src/main/kotlin/com/epages/restdocs/apispec/ResourceSnippetParameters.kt @@ -2,7 +2,9 @@ package com.epages.restdocs.apispec import com.epages.restdocs.apispec.SimpleType.STRING import org.springframework.restdocs.headers.HeaderDescriptor +import org.springframework.restdocs.hypermedia.HypermediaDocumentation import org.springframework.restdocs.hypermedia.LinkDescriptor +import org.springframework.restdocs.hypermedia.LinkExtractor import org.springframework.restdocs.payload.FieldDescriptor import org.springframework.restdocs.payload.JsonFieldType import org.springframework.restdocs.payload.PayloadDocumentation @@ -28,7 +30,8 @@ data class ResourceSnippetParameters @JvmOverloads constructor( val requestParameters: List = emptyList(), val requestHeaders: List = emptyList(), val responseHeaders: List = emptyList(), - val tags: Set = emptySet() + val tags: Set = emptySet(), + val linkExtractor: LinkExtractor = HypermediaDocumentation.halLinks() ) { val responseFieldsWithLinks by lazy { responseFields + links.map(Companion::toFieldDescriptor) } @@ -190,6 +193,8 @@ class ResourceSnippetParametersBuilder : ResourceSnippetDetails() { private set var responseHeaders: List = emptyList() private set + var linkExtractor: LinkExtractor = HypermediaDocumentation.halLinks() + private set override fun summary(summary: String?) = apply { this.summary = summary } override fun description(description: String?) = apply { this.description = description } @@ -236,6 +241,8 @@ class ResourceSnippetParametersBuilder : ResourceSnippetDetails() { override fun tag(tag: String) = tags(tag) override fun tags(vararg tags: String) = apply { this.tags += tags } + fun linkExtractor(linkExtractor: LinkExtractor) = apply { this.linkExtractor = linkExtractor } + fun build() = ResourceSnippetParameters( summary, description, @@ -250,6 +257,7 @@ class ResourceSnippetParametersBuilder : ResourceSnippetDetails() { requestParameters, requestHeaders, responseHeaders, - tags + tags, + linkExtractor ) }