Fix incompatibility with AsciidoctorJ 3.0
AsciidoctorJ 3.0 contains a breaking change to the signature of Preprocessor#process. This commit avoids this incompatibility by rewriting the preprocessor extension in Ruby. Fixes gh-949
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
plugins {
|
||||
id "java-library"
|
||||
id "maven-publish"
|
||||
id "io.spring.compatibility-test" version "0.0.3"
|
||||
}
|
||||
|
||||
description = "Spring REST Docs Asciidoctor Extension"
|
||||
@@ -19,3 +20,11 @@ dependencies {
|
||||
|
||||
testRuntimeOnly("org.asciidoctor:asciidoctorj-pdf")
|
||||
}
|
||||
|
||||
compatibilityTest {
|
||||
dependency("AsciidoctorJ") { asciidoctorj ->
|
||||
asciidoctorj.groupId = "org.asciidoctor"
|
||||
asciidoctorj.artifactId = "asciidoctorj"
|
||||
asciidoctorj.versions = ["3.0.0"]
|
||||
}
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2023 the original author or authors.
|
||||
* Copyright 2014-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -28,7 +28,9 @@ public final class RestDocsExtensionRegistry implements ExtensionRegistry {
|
||||
|
||||
@Override
|
||||
public void register(Asciidoctor asciidoctor) {
|
||||
asciidoctor.javaExtensionRegistry().preprocessor(new DefaultAttributesPreprocessor());
|
||||
asciidoctor.rubyExtensionRegistry()
|
||||
.loadClass(RestDocsExtensionRegistry.class.getResourceAsStream("/extensions/default_attributes.rb"))
|
||||
.preprocessor("DefaultAttributes");
|
||||
asciidoctor.rubyExtensionRegistry()
|
||||
.loadClass(RestDocsExtensionRegistry.class.getResourceAsStream("/extensions/operation_block_macro.rb"))
|
||||
.blockMacro("operation", "OperationBlockMacro");
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2014-2021 the original author or authors.
|
||||
* Copyright 2014-2024 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -30,9 +30,14 @@ import java.util.function.Supplier;
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
class SnippetsDirectoryResolver {
|
||||
public class SnippetsDirectoryResolver {
|
||||
|
||||
File getSnippetsDirectory(Map<String, Object> attributes) {
|
||||
/**
|
||||
* Returns the snippets directory derived from the given {@code attributes}.
|
||||
* @param attributes the attributes
|
||||
* @return the snippets directory
|
||||
*/
|
||||
public File getSnippetsDirectory(Map<String, Object> attributes) {
|
||||
if (System.getProperty("maven.home") != null) {
|
||||
return getMavenSnippetsDirectory(attributes);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,14 @@
|
||||
require 'asciidoctor/extensions'
|
||||
require 'java'
|
||||
|
||||
class DefaultAttributes < Asciidoctor::Extensions::Preprocessor
|
||||
|
||||
def process(document, reader)
|
||||
resolver = org.springframework.restdocs.asciidoctor.SnippetsDirectoryResolver.new()
|
||||
attributes = document.attributes
|
||||
attributes["snippets"] = resolver.getSnippetsDirectory(attributes) unless attributes.has_key?("snippets")
|
||||
false
|
||||
end
|
||||
|
||||
end
|
||||
|
||||
@@ -1,67 +0,0 @@
|
||||
/*
|
||||
* Copyright 2014-2021 the original author or authors.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* https://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package org.springframework.restdocs.asciidoctor;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import org.asciidoctor.Asciidoctor;
|
||||
import org.asciidoctor.Attributes;
|
||||
import org.asciidoctor.Options;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
/**
|
||||
* Tests for {@link DefaultAttributesPreprocessor}.
|
||||
*
|
||||
* @author Andy Wilkinson
|
||||
*/
|
||||
public class DefaultAttributesPreprocessorTests {
|
||||
|
||||
@Test
|
||||
public void snippetsAttributeIsSet() {
|
||||
String converted = createAsciidoctor().convert("{snippets}", createOptions("projectdir=../../.."));
|
||||
assertThat(converted).contains("build" + File.separatorChar + "generated-snippets");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void snippetsAttributeFromConvertArgumentIsNotOverridden() {
|
||||
String converted = createAsciidoctor().convert("{snippets}",
|
||||
createOptions("snippets=custom projectdir=../../.."));
|
||||
assertThat(converted).contains("custom");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void snippetsAttributeFromDocumentPreambleIsNotOverridden() {
|
||||
String converted = createAsciidoctor().convert(":snippets: custom\n{snippets}",
|
||||
createOptions("projectdir=../../.."));
|
||||
assertThat(converted).contains("custom");
|
||||
}
|
||||
|
||||
private Options createOptions(String attributes) {
|
||||
Options options = Options.builder().build();
|
||||
options.setAttributes(Attributes.builder().arguments(attributes).build());
|
||||
return options;
|
||||
}
|
||||
|
||||
private Asciidoctor createAsciidoctor() {
|
||||
Asciidoctor asciidoctor = Asciidoctor.Factory.create();
|
||||
asciidoctor.javaExtensionRegistry().preprocessor(new DefaultAttributesPreprocessor());
|
||||
return asciidoctor;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user