Consistent toString() and @EqualsAndHashCode for most classes.

This commit is contained in:
JesseBrault0709 2023-01-08 09:01:56 -06:00
parent 8352e6001d
commit e6e20b5f3e
27 changed files with 214 additions and 37 deletions

View File

@ -5,15 +5,25 @@ import com.jessebrault.ssg.specialpage.SpecialPagesProvider
import com.jessebrault.ssg.template.TemplatesProvider
import com.jessebrault.ssg.text.TextsProvider
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.MapConstructor
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor
@MapConstructor
@NullCheck
@EqualsAndHashCode
class Config {
Collection<TextsProvider> textProviders
Collection<TemplatesProvider> templatesProviders
Collection<PartsProvider> partsProviders
Collection<SpecialPagesProvider> specialPagesProviders
String toString() {
"Config(textProviders: ${ this.textProviders }, templatesProviders: ${ this.templatesProviders }, " +
"partsProviders: ${ this.partsProviders }, specialPagesProviders: ${ this.specialPagesProviders })"
}
}

View File

@ -1,10 +1,16 @@
package com.jessebrault.ssg
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger
import org.slf4j.LoggerFactory
import org.slf4j.Marker
import org.slf4j.MarkerFactory
@TupleConstructor(includeFields = true)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class SimpleStaticSiteGenerator implements StaticSiteGenerator {
private static final Logger logger = LoggerFactory.getLogger(SimpleStaticSiteGenerator)
@ -13,10 +19,6 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
private final Config config
SimpleStaticSiteGenerator(Config config) {
this.config = config
}
@Override
void generate(File buildDir, Map globals) {
logger.trace(enter, 'buildDir: {}, globals: {}', buildDir, globals)
@ -92,4 +94,9 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
logger.trace(exit, '')
}
@Override
String toString() {
"SimpleStaticSiteGenerator()"
}
}

View File

@ -1,11 +1,13 @@
package com.jessebrault.ssg.part
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
class EmbeddablePart {
@EqualsAndHashCode(includeFields = true)
class EmbeddablePart {
private final Part part
private final Map globals
@ -14,4 +16,9 @@ import groovy.transform.TupleConstructor
part.type.renderer.render(this.part.text, binding, this.globals)
}
@Override
String toString() {
"EmbeddablePart(part: ${ this.part }, globals: ${ this.globals })"
}
}

View File

@ -1,8 +1,8 @@
package com.jessebrault.ssg.part
import groovy.transform.ToString
import groovy.transform.EqualsAndHashCode
@ToString(includeFields = true)
@EqualsAndHashCode(includeFields = true)
class EmbeddablePartsMap {
@Delegate
@ -11,8 +11,13 @@ class EmbeddablePartsMap {
EmbeddablePartsMap(Collection<Part> parts, Map globals) {
Objects.requireNonNull(parts)
parts.each {
this.put(it.name, new EmbeddablePart(it, globals))
this.put(it.path, new EmbeddablePart(it, globals))
}
}
@Override
String toString() {
"EmbeddablePartsMap(partsMap: ${ this.partsMap })"
}
}

View File

@ -2,7 +2,9 @@ package com.jessebrault.ssg.part
import groovy.text.GStringTemplateEngine
import groovy.text.TemplateEngine
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode
class GspPartRenderer implements PartRenderer {
private static final TemplateEngine engine = new GStringTemplateEngine()
@ -15,4 +17,9 @@ class GspPartRenderer implements PartRenderer {
])
}
@Override
String toString() {
"GspPartRenderer()"
}
}

View File

@ -1,14 +1,21 @@
package com.jessebrault.ssg.part
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class Part {
String name
String path
PartType type
String text
@Override
String toString() {
"Part(path: ${ this.path }, type: ${ this.type })"
}
}

View File

@ -2,6 +2,7 @@ package com.jessebrault.ssg.part
import com.jessebrault.ssg.util.FileNameHandler
import groovy.io.FileType
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger
@ -9,6 +10,7 @@ import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class PartFilePartsProvider implements PartsProvider {
private static final Logger logger = LoggerFactory.getLogger(PartFilePartsProvider)
@ -18,7 +20,7 @@ class PartFilePartsProvider implements PartsProvider {
private PartType getPartType(File file) {
partTypes.find {
it.extensions.contains(new FileNameHandler(file).getExtension())
it.ids.contains(new FileNameHandler(file).getExtension())
}
}
@ -47,4 +49,9 @@ class PartFilePartsProvider implements PartsProvider {
this.partTypes
}
@Override
String toString() {
"PartFilePartsProvider(partsDir: ${ this.partsDir }, partTypes: ${ this.partTypes })"
}
}

View File

@ -1,13 +1,20 @@
package com.jessebrault.ssg.part
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class PartType {
Collection<String> extensions
Collection<String> ids
PartRenderer renderer
@Override
String toString() {
"PartType(ids: ${ this.ids }, renderer: ${ this.renderer })"
}
}

View File

@ -6,7 +6,9 @@ import com.jessebrault.ssg.text.EmbeddableTextsCollection
import com.jessebrault.ssg.text.Text
import groovy.text.GStringTemplateEngine
import groovy.text.TemplateEngine
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode
class GspSpecialPageRenderer implements SpecialPageRenderer {
private static final TemplateEngine engine = new GStringTemplateEngine()
@ -25,4 +27,9 @@ class GspSpecialPageRenderer implements SpecialPageRenderer {
])
}
@Override
String toString() {
"GspSpecialPageRenderer()"
}
}

View File

@ -1,14 +1,21 @@
package com.jessebrault.ssg.specialpage
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class SpecialPage {
String text
String path
SpecialPageType type
@Override
String toString() {
"SpecialPage(path: ${ this.path }, type: ${ this.type })"
}
}

View File

@ -3,6 +3,7 @@ package com.jessebrault.ssg.specialpage
import com.jessebrault.ssg.util.FileNameHandler
import com.jessebrault.ssg.util.RelativePathHandler
import groovy.io.FileType
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger
@ -10,6 +11,7 @@ import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider {
private static final Logger logger = LoggerFactory.getLogger(SpecialPageFileSpecialPagesProvider)
@ -49,4 +51,9 @@ class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider {
this.specialPageTypes
}
@Override
String toString() {
"SpecialPageFileSpecialPagesProvider(specialPagesDir: ${ this.specialPagesDir }, specialPageTypes: ${ this.specialPageTypes })"
}
}

View File

@ -1,13 +1,20 @@
package com.jessebrault.ssg.specialpage
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class SpecialPageType {
Collection<String> ids
SpecialPageRenderer renderer
@Override
String toString() {
"SpecialPageType(ids: ${ this.ids }, renderer: ${ this.renderer })"
}
}

View File

@ -5,7 +5,9 @@ import com.jessebrault.ssg.part.EmbeddablePartsMap
import com.jessebrault.ssg.text.FrontMatter
import groovy.text.GStringTemplateEngine
import groovy.text.TemplateEngine
import groovy.transform.EqualsAndHashCode
@EqualsAndHashCode
class GspTemplateRenderer implements TemplateRenderer {
private static final TemplateEngine engine = new GStringTemplateEngine()
@ -26,4 +28,9 @@ class GspTemplateRenderer implements TemplateRenderer {
])
}
@Override
String toString() {
"GspTemplateRenderer()"
}
}

View File

@ -1,14 +1,21 @@
package com.jessebrault.ssg.template
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class Template {
String text
String relativePath
TemplateType type
@Override
String toString() {
"Template(path: ${ this.relativePath }, type: ${ this.type })"
}
}

View File

@ -2,6 +2,7 @@ package com.jessebrault.ssg.template
import com.jessebrault.ssg.util.FileNameHandler
import groovy.io.FileType
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger
@ -9,6 +10,7 @@ import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class TemplateFileTemplatesProvider implements TemplatesProvider {
private static final Logger logger = LoggerFactory.getLogger(TemplateFileTemplatesProvider)
@ -18,7 +20,7 @@ class TemplateFileTemplatesProvider implements TemplatesProvider {
private TemplateType getType(File file) {
this.templateTypes.find {
it.extensions.contains(new FileNameHandler(file).getExtension())
it.ids.contains(new FileNameHandler(file).getExtension())
}
}
@ -46,4 +48,9 @@ class TemplateFileTemplatesProvider implements TemplatesProvider {
this.templateTypes
}
@Override
String toString() {
"TemplateFileTemplatesProvider(templatesDir: ${ this.templatesDir }, templateTypes: ${ this.templateTypes })"
}
}

View File

@ -1,13 +1,20 @@
package com.jessebrault.ssg.template
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class TemplateType {
Collection<String> extensions
Collection<String> ids
TemplateRenderer renderer
@Override
String toString() {
"TemplateType(ids: ${ this.ids }, renderer: ${ this.renderer })"
}
}

View File

@ -1,11 +1,13 @@
package com.jessebrault.ssg.text
import groovy.transform.EqualsAndHashCode
import groovy.transform.Memoized
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class EmbeddableText {
private final Text text
@ -25,4 +27,9 @@ import groovy.transform.TupleConstructor
this.text.path
}
@Override
String toString() {
"EmbeddableText(text: ${ this.text }, globals: ${ this.globals })"
}
}

View File

@ -1,8 +1,8 @@
package com.jessebrault.ssg.text
import groovy.transform.ToString
import groovy.transform.EqualsAndHashCode
@ToString(includeFields = true)
@EqualsAndHashCode(includeFields = true)
class EmbeddableTextsCollection {
@Delegate
@ -14,6 +14,9 @@ class EmbeddableTextsCollection {
}
}
@Override
String toString() {
"EmbeddableTextsCollection(embeddableTexts: ${ this.embeddableTexts })"
}
}

View File

@ -1,14 +1,14 @@
package com.jessebrault.ssg.text
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.ToString
import groovy.transform.TupleConstructor
import org.slf4j.Logger
import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@ToString(includeFields = true)
@EqualsAndHashCode(includeFields = true)
class FrontMatter {
private static final Logger logger = LoggerFactory.getLogger(FrontMatter)
@ -37,4 +37,9 @@ class FrontMatter {
}
}
@Override
String toString() {
"FrontMatter(data: ${ this.data })"
}
}

View File

@ -1,9 +1,11 @@
package com.jessebrault.ssg.text
import groovy.transform.EqualsAndHashCode
import org.commonmark.ext.front.matter.YamlFrontMatterExtension
import org.commonmark.ext.front.matter.YamlFrontMatterVisitor
import org.commonmark.parser.Parser
@EqualsAndHashCode
class MarkdownFrontMatterGetter implements FrontMatterGetter {
private static final Parser parser = Parser.builder()
@ -18,4 +20,9 @@ class MarkdownFrontMatterGetter implements FrontMatterGetter {
new FrontMatter(v.data)
}
@Override
String toString() {
"MarkdownFrontMatterGetter()"
}
}

View File

@ -1,9 +1,11 @@
package com.jessebrault.ssg.text
import groovy.transform.EqualsAndHashCode
import org.commonmark.ext.front.matter.YamlFrontMatterExtension
import org.commonmark.parser.Parser
import org.commonmark.renderer.html.HtmlRenderer
@EqualsAndHashCode
class MarkdownTextRenderer implements TextRenderer {
private static final Parser parser = Parser.builder()
@ -16,4 +18,9 @@ class MarkdownTextRenderer implements TextRenderer {
htmlRenderer.render(parser.parse(text))
}
@Override
String toString() {
"MarkdownTextRenderer()"
}
}

View File

@ -1,14 +1,21 @@
package com.jessebrault.ssg.text
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class Text {
String text
String path
TextType type
@Override
String toString() {
"Text(path: ${ this.path }, type: ${ this.type })"
}
}

View File

@ -3,6 +3,7 @@ package com.jessebrault.ssg.text
import com.jessebrault.ssg.util.FileNameHandler
import com.jessebrault.ssg.util.RelativePathHandler
import groovy.io.FileType
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger
@ -10,6 +11,7 @@ import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class TextFileTextsProvider implements TextsProvider {
private static final Logger logger = LoggerFactory.getLogger(TextFileTextsProvider)
@ -49,4 +51,9 @@ class TextFileTextsProvider implements TextsProvider {
this.textTypes
}
@Override
String toString() {
"TextFileTextsProvider(textsDir: ${ this.textsDir }, textTypes: ${ this.textTypes })"
}
}

View File

@ -1,14 +1,21 @@
package com.jessebrault.ssg.text
import groovy.transform.Canonical
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@Canonical
@TupleConstructor(defaults = false)
@NullCheck
@EqualsAndHashCode
class TextType {
Collection<String> ids
TextRenderer renderer
FrontMatterGetter frontMatterGetter
@Override
String toString() {
"TextType(ids: ${ this.ids }, renderer: ${ this.renderer }, frontMatterGetter: ${ this.renderer })"
}
}

View File

@ -1,10 +1,12 @@
package com.jessebrault.ssg.util
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class FileNameHandler {
private final File file
@ -22,4 +24,9 @@ class FileNameHandler {
this.file.name.substring(0, this.file.name.lastIndexOf('.'))
}
@Override
String toString() {
"FileNameHandler(file: ${ this.file })"
}
}

View File

@ -1,10 +1,12 @@
package com.jessebrault.ssg.util
import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class RelativePathHandler {
private final String relativePath
@ -13,4 +15,9 @@ class RelativePathHandler {
this.relativePath.subSequence(0, this.relativePath.lastIndexOf('.'))
}
@Override
String toString() {
"RelativePathHandler(relativePath: ${ this.relativePath })"
}
}

View File

@ -27,7 +27,7 @@ class PartFilePartsProviderTests {
def r = this.partsProvider.getParts()
assertEquals(1, r.size())
def p0 = r[0]
assertEquals('testPart.gsp', p0.name)
assertEquals('testPart.gsp', p0.path)
assertEquals(gspPartType, p0.type)
assertEquals('Hello <%= name %>!', p0.text)
}
@ -43,7 +43,7 @@ class PartFilePartsProviderTests {
def r = this.partsProvider.getParts()
assertEquals(1, r.size())
def p0 = r[0]
assertEquals('nested/testPart.gsp', p0.name)
assertEquals('nested/testPart.gsp', p0.path)
assertEquals(gspPartType, p0.type)
assertEquals('Hello, World!', p0.text)
}