diff --git a/spring-restdocs-asciidoctor/build.gradle b/spring-restdocs-asciidoctor/build.gradle index ceb5202f..717744ea 100644 --- a/spring-restdocs-asciidoctor/build.gradle +++ b/spring-restdocs-asciidoctor/build.gradle @@ -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"] + } +} \ No newline at end of file diff --git a/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/RestDocsExtensionRegistry.java b/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/RestDocsExtensionRegistry.java index 0a58a7cf..5432b23c 100644 --- a/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/RestDocsExtensionRegistry.java +++ b/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/RestDocsExtensionRegistry.java @@ -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"); diff --git a/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java b/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java index af2e9482..2ca3ea5f 100644 --- a/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java +++ b/spring-restdocs-asciidoctor/src/main/java/org/springframework/restdocs/asciidoctor/SnippetsDirectoryResolver.java @@ -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 @@ * * @author Andy Wilkinson */ -class SnippetsDirectoryResolver { +public class SnippetsDirectoryResolver { - File getSnippetsDirectory(Map attributes) { + /** + * Returns the snippets directory derived from the given {@code attributes}. + * @param attributes the attributes + * @return the snippets directory + */ + public File getSnippetsDirectory(Map attributes) { if (System.getProperty("maven.home") != null) { return getMavenSnippetsDirectory(attributes); } diff --git a/spring-restdocs-asciidoctor/src/main/resources/extensions/default_attributes.rb b/spring-restdocs-asciidoctor/src/main/resources/extensions/default_attributes.rb new file mode 100644 index 00000000..a4060d5b --- /dev/null +++ b/spring-restdocs-asciidoctor/src/main/resources/extensions/default_attributes.rb @@ -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 + \ No newline at end of file diff --git a/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/DefaultAttributesPreprocessorTests.java b/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/DefaultAttributesPreprocessorTests.java deleted file mode 100644 index 154cd73f..00000000 --- a/spring-restdocs-asciidoctor/src/test/java/org/springframework/restdocs/asciidoctor/DefaultAttributesPreprocessorTests.java +++ /dev/null @@ -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; - } - -}