Use file-reader-writer (#290)

* Use file-reader-writer

* Update changelog
This commit is contained in:
Paul Campbell 2020-03-29 12:19:00 +01:00 committed by GitHub
parent 7efd65c652
commit ad0fc315f1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
10 changed files with 43 additions and 118 deletions

View file

@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
* next-release
** Changed
- Use `file-reader-writer` to replace own implementations (#290)
* [5.4.0] - 2020-03-18
** Changed

View file

@ -41,6 +41,7 @@
<kemitix.checkstyle.ruleset.level>5-complexity</kemitix.checkstyle.ruleset.level>
<kemitix.checkstyle.ruleset.location>net/kemitix/checkstyle-${kemitix.checkstyle.ruleset.level}.xml</kemitix.checkstyle.ruleset.location>
<javax.annotation-api.version>1.3.2</javax.annotation-api.version>
<file-reader-writer.version>1.0.0</file-reader-writer.version>
</properties>
<dependencyManagement>
@ -56,6 +57,11 @@
</dependencyManagement>
<dependencies>
<dependency>
<groupId>net.kemitix</groupId>
<artifactId>file-reader-writer</artifactId>
<version>${file-reader-writer.version}</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>

View file

@ -1,6 +1,7 @@
package net.kemitix.checkstyle.ruleset.builder;
import lombok.RequiredArgsConstructor;
import net.kemitix.files.FileReaderWriter;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
@ -37,4 +38,14 @@ public class BuilderConfiguration {
private static <K, V> AbstractMap.SimpleEntry<K, V> entry(final K key, final V value) {
return new AbstractMap.SimpleEntry<>(key, value);
}
/**
* A wrapper for reading and writing files.
*
* @return An instance of {@link FileReaderWriter}.
*/
@Bean
public FileReaderWriter fileReaderWriter() {
return new FileReaderWriter();
}
}

View file

@ -1,27 +0,0 @@
package net.kemitix.checkstyle.ruleset.builder;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
@Component
public class FileReader {
private static final String NEWLINE = "\n";
/**
* Reads the content from the file path.
*
* <p>File content will be read using UTF-8 encoding and line endings will
* be replaced with a newline (\n).</p>
*
* @param path the file to read
* @throws IOException if there is an error.
*/
public String read(final Path path) throws IOException {
return String.join(NEWLINE,
Files.readAllLines(path, StandardCharsets.UTF_8));
}
}

View file

@ -1,31 +0,0 @@
package net.kemitix.checkstyle.ruleset.builder;
import org.springframework.stereotype.Component;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.StandardOpenOption;
@Component
public class FileWriter {
/**
* Writes the content to the file path, replacing any existing file.
*
* <p>File content will be written using UTF-8 encoding.</p>
*
* @param path the file to write
* @param content the content to write
* @throws IOException if there is an error.
*/
public void write(
final Path path,
final String content
) throws IOException {
Files.write(path,
content.getBytes(StandardCharsets.UTF_8),
StandardOpenOption.TRUNCATE_EXISTING);
}
}

View file

@ -1,10 +1,11 @@
package net.kemitix.checkstyle.ruleset.builder;
import lombok.RequiredArgsConstructor;
import net.kemitix.files.FileReaderWriter;
import org.springframework.boot.CommandLineRunner;
import org.springframework.stereotype.Component;
import java.nio.file.Path;
import java.io.File;
import java.nio.file.Paths;
/**
@ -19,16 +20,15 @@ class ReadmeWriter implements CommandLineRunner {
private final TemplateProperties templateProperties;
private final OutputProperties outputProperties;
private final ReadmeBuilder readmeBuilder;
private final FileReader fileReader;
private final FileWriter fileWriter;
private final FileReaderWriter fileReaderWriter;
@Override
public void run(final String... args) throws Exception {
Path templatePath = templateProperties.getReadmeTemplate();
String templateBody = fileReader.read(templatePath);
Path outputPath = Paths.get(outputProperties.getReadme());
File templateFile = templateProperties.getReadmeTemplate();
String templateBody = fileReaderWriter.read(templateFile);
File outputFile = Paths.get(outputProperties.getReadme()).toFile();
String outputBody = readmeBuilder.build(templateBody);
fileWriter.write(outputPath, outputBody);
fileReaderWriter.write(outputFile, outputBody);
}
}

View file

@ -5,6 +5,7 @@ import lombok.Setter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.io.File;
import java.nio.file.Path;
/**
@ -26,7 +27,7 @@ class TemplateProperties {
/**
* Template for README.md file.
*/
private Path readmeTemplate;
private File readmeTemplate;
/**
* The directory containing the README fragments.

View file

@ -1,41 +0,0 @@
package net.kemitix.checkstyle.ruleset.builder;
import org.junit.Before;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import java.io.IOException;
import java.nio.file.Path;
import java.util.UUID;
import static org.assertj.core.api.Assertions.assertThat;
public class FileWriterReaderTest {
private String line1 = UUID.randomUUID().toString();
private String line2 = UUID.randomUUID().toString();
private String body = line1 + "\n" + line2;
@org.junit.Rule
public TemporaryFolder folder = new TemporaryFolder();
private Path path;
private FileWriter writer = new FileWriter();
private FileReader reader = new FileReader();
@Before
public void setUp() throws IOException {
path = folder.newFile().toPath();
}
@Test
public void writeTheReadFile() throws IOException {
//when
writer.write(path, body);
String read = reader.read(path);
//then
assertThat(read).isEqualTo(body);
}
}

View file

@ -1,13 +1,14 @@
package net.kemitix.checkstyle.ruleset.builder;
import net.kemitix.files.FileReaderWriter;
import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.io.File;
import java.io.IOException;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.UUID;
@ -28,16 +29,13 @@ public class ReadmeWriterTest {
private OutputProperties outputProperties = new OutputProperties();
@Mock
private FileReader fileReader;
@Mock
private FileWriter fileWriter;
private FileReaderWriter fileReaderWriter;
@InjectMocks
private ReadmeWriter readmeWriter;
@Mock
private Path templatePath;
private File templateFile;
private String outputPath = UUID.randomUUID().toString();
private String templateBody = UUID.randomUUID().toString();
private String formattedOutput = UUID.randomUUID().toString();
@ -48,11 +46,11 @@ public class ReadmeWriterTest {
readmeWriter =
new ReadmeWriter(templateProperties, outputProperties,
readmeBuilder, fileReader, fileWriter);
readmeBuilder, fileReaderWriter);
templateProperties.setReadmeTemplate(templatePath);
templateProperties.setReadmeTemplate(templateFile);
outputProperties.setReadme(outputPath);
given(fileReader.read(templatePath))
given(fileReaderWriter.read(templateFile))
.willReturn(templateBody);
given(readmeBuilder.build(templateBody))
.willReturn(formattedOutput);
@ -63,7 +61,8 @@ public class ReadmeWriterTest {
//when
readmeWriter.run();
//then
verify(fileWriter).write(Paths.get(outputPath), formattedOutput);
verify(fileReaderWriter)
.write(Paths.get(outputPath).toFile(), formattedOutput);
}
}

View file

@ -4,6 +4,7 @@ import org.assertj.core.api.SoftAssertions;
import org.junit.Before;
import org.junit.Test;
import java.io.File;
import java.nio.file.Path;
import java.nio.file.Paths;
@ -25,7 +26,7 @@ public class TemplatePropertiesTest {
public void setAndGet() throws Exception {
//given
final Path checkstyleXml = Paths.get("checkstyle.xml");
final Path readmeTemplate = Paths.get("readme.md");
final File readmeTemplate = Paths.get("readme.md").toFile();
final Path readmeFragments = Paths.get("readme.dir");
//when
templateProperties.setCheckstyleXml(checkstyleXml);