Raise the minimum supported version of AsciidoctorJ to 3.0

Closes gh-957
This commit is contained in:
Andy Wilkinson
2025-01-30 16:28:44 +00:00
parent 85ebc4eb86
commit 0b103fdc0e
9 changed files with 118 additions and 37 deletions

View File

@@ -1,7 +1,6 @@
plugins {
id "java-library"
id "maven-publish"
id "io.spring.compatibility-test" version "0.0.3"
}
description = "Spring REST Docs Asciidoctor Extension"
@@ -20,11 +19,3 @@ dependencies {
testRuntimeOnly("org.asciidoctor:asciidoctorj-pdf")
}
compatibilityTest {
dependency("AsciidoctorJ") { asciidoctorj ->
asciidoctorj.groupId = "org.asciidoctor"
asciidoctorj.artifactId = "asciidoctorj"
asciidoctorj.versions = ["3.0.0"]
}
}

View File

@@ -0,0 +1,41 @@
/*
* Copyright 2014-2025 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 org.asciidoctor.ast.Document;
import org.asciidoctor.extension.Preprocessor;
import org.asciidoctor.extension.PreprocessorReader;
import org.asciidoctor.extension.Reader;
/**
* {@link Preprocessor} that sets defaults for REST Docs-related {@link Document}
* attributes.
*
* @author Andy Wilkinson
*/
final class DefaultAttributesPreprocessor extends Preprocessor {
private final SnippetsDirectoryResolver snippetsDirectoryResolver = new SnippetsDirectoryResolver();
@Override
public Reader process(Document document, PreprocessorReader reader) {
document.setAttribute("snippets", this.snippetsDirectoryResolver.getSnippetsDirectory(document.getAttributes()),
false);
return reader;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2024 the original author or authors.
* Copyright 2014-2023 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,9 +28,7 @@ public final class RestDocsExtensionRegistry implements ExtensionRegistry {
@Override
public void register(Asciidoctor asciidoctor) {
asciidoctor.rubyExtensionRegistry()
.loadClass(RestDocsExtensionRegistry.class.getResourceAsStream("/extensions/default_attributes.rb"))
.preprocessor("DefaultAttributes");
asciidoctor.javaExtensionRegistry().preprocessor(new DefaultAttributesPreprocessor());
asciidoctor.rubyExtensionRegistry()
.loadClass(RestDocsExtensionRegistry.class.getResourceAsStream("/extensions/operation_block_macro.rb"))
.blockMacro("operation", "OperationBlockMacro");

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2024 the original author or authors.
* 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.
@@ -29,14 +29,9 @@ import java.util.function.Supplier;
*
* @author Andy Wilkinson
*/
public class SnippetsDirectoryResolver {
class SnippetsDirectoryResolver {
/**
* 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) {
File getSnippetsDirectory(Map<String, Object> attributes) {
if (System.getProperty("maven.home") != null) {
return getMavenSnippetsDirectory(attributes);
}

View File

@@ -1,14 +0,0 @@
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

View File

@@ -0,0 +1,67 @@
/*
* Copyright 2014-2025 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;
}
}