All file-based providers implement WithWatchableDir.

This commit is contained in:
JesseBrault0709 2023-01-10 12:40:50 -06:00
parent 3c8ac6a743
commit baf425739b
10 changed files with 48 additions and 30 deletions

View File

@ -27,9 +27,9 @@ class SimpleStaticSiteGenerator implements StaticSiteGenerator {
// Get all texts, templates, parts, and specialPages // Get all texts, templates, parts, and specialPages
def texts = config.textProviders.collectMany { it.provide() } def texts = config.textProviders.collectMany { it.provide() }
def templates = config.templatesProviders.collectMany { it.getTemplates() } def templates = config.templatesProviders.collectMany { it.provide() }
def parts = config.partsProviders.collectMany { it.getParts() } def parts = config.partsProviders.collectMany { it.provide() }
def specialPages = config.specialPagesProviders.collectMany { it.getSpecialPages() } def specialPages = config.specialPagesProviders.collectMany { it.provide() }
logger.debug('\n\ttexts: {}\n\ttemplates: {}\n\tparts: {}\n\tspecialPages: {}', texts, templates, parts, specialPages) logger.debug('\n\ttexts: {}\n\ttemplates: {}\n\tparts: {}\n\tspecialPages: {}', texts, templates, parts, specialPages)

View File

@ -1,23 +1,28 @@
package com.jessebrault.ssg.part package com.jessebrault.ssg.part
import com.jessebrault.ssg.provider.WithWatchableDir
import com.jessebrault.ssg.util.FileNameHandler import com.jessebrault.ssg.util.FileNameHandler
import groovy.io.FileType import groovy.io.FileType
import groovy.transform.EqualsAndHashCode import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck @NullCheck
@EqualsAndHashCode(includeFields = true) @EqualsAndHashCode(includeFields = true)
class PartFilePartsProvider implements PartsProvider { class PartFilePartsProvider implements PartsProvider, WithWatchableDir {
private static final Logger logger = LoggerFactory.getLogger(PartFilePartsProvider) private static final Logger logger = LoggerFactory.getLogger(PartFilePartsProvider)
private final Collection<PartType> partTypes private final Collection<PartType> partTypes
private final File partsDir private final File partsDir
PartFilePartsProvider(Collection<PartType> partTypes, File partsDir) {
this.partTypes = partTypes
this.partsDir = partsDir
this.watchableDir = this.partsDir
}
private PartType getPartType(File file) { private PartType getPartType(File file) {
partTypes.find { partTypes.find {
it.ids.contains(new FileNameHandler(file).getExtension()) it.ids.contains(new FileNameHandler(file).getExtension())
@ -25,7 +30,7 @@ class PartFilePartsProvider implements PartsProvider {
} }
@Override @Override
Collection<Part> getParts() { Collection<Part> provide() {
if (!partsDir.isDirectory()) { if (!partsDir.isDirectory()) {
throw new IllegalArgumentException('partsDir must be a directory') throw new IllegalArgumentException('partsDir must be a directory')
} }

View File

@ -1,6 +1,7 @@
package com.jessebrault.ssg.part package com.jessebrault.ssg.part
interface PartsProvider { import com.jessebrault.ssg.provider.Provider
Collection<Part> getParts()
interface PartsProvider extends Provider<Collection<Part>> {
Collection<PartType> getPartTypes() Collection<PartType> getPartTypes()
} }

View File

@ -1,24 +1,29 @@
package com.jessebrault.ssg.specialpage package com.jessebrault.ssg.specialpage
import com.jessebrault.ssg.provider.WithWatchableDir
import com.jessebrault.ssg.util.FileNameHandler import com.jessebrault.ssg.util.FileNameHandler
import com.jessebrault.ssg.util.RelativePathHandler import com.jessebrault.ssg.util.RelativePathHandler
import groovy.io.FileType import groovy.io.FileType
import groovy.transform.EqualsAndHashCode import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck @NullCheck
@EqualsAndHashCode(includeFields = true) @EqualsAndHashCode(includeFields = true)
class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider { class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider, WithWatchableDir {
private static final Logger logger = LoggerFactory.getLogger(SpecialPageFileSpecialPagesProvider) private static final Logger logger = LoggerFactory.getLogger(SpecialPageFileSpecialPagesProvider)
private final Collection<SpecialPageType> specialPageTypes private final Collection<SpecialPageType> specialPageTypes
private final File specialPagesDir private final File specialPagesDir
SpecialPageFileSpecialPagesProvider(Collection<SpecialPageType> specialPageTypes, File specialPagesDir) {
this.specialPageTypes = specialPageTypes
this.specialPagesDir = specialPagesDir
this.watchableDir = this.specialPagesDir
}
private SpecialPageType getSpecialPageType(File file) { private SpecialPageType getSpecialPageType(File file) {
this.specialPageTypes.find { this.specialPageTypes.find {
it.ids.contains(new FileNameHandler(file).getExtension()) it.ids.contains(new FileNameHandler(file).getExtension())
@ -26,7 +31,7 @@ class SpecialPageFileSpecialPagesProvider implements SpecialPagesProvider {
} }
@Override @Override
Collection<SpecialPage> getSpecialPages() { Collection<SpecialPage> provide() {
if (!this.specialPagesDir.isDirectory()) { if (!this.specialPagesDir.isDirectory()) {
throw new IllegalArgumentException('specialPagesDir must be a directory') throw new IllegalArgumentException('specialPagesDir must be a directory')
} }

View File

@ -1,6 +1,7 @@
package com.jessebrault.ssg.specialpage package com.jessebrault.ssg.specialpage
interface SpecialPagesProvider { import com.jessebrault.ssg.provider.Provider
Collection<SpecialPage> getSpecialPages()
interface SpecialPagesProvider extends Provider<Collection<SpecialPage>> {
Collection<SpecialPageType> getSpecialPageTypes() Collection<SpecialPageType> getSpecialPageTypes()
} }

View File

@ -1,23 +1,28 @@
package com.jessebrault.ssg.template package com.jessebrault.ssg.template
import com.jessebrault.ssg.provider.WithWatchableDir
import com.jessebrault.ssg.util.FileNameHandler import com.jessebrault.ssg.util.FileNameHandler
import groovy.io.FileType import groovy.io.FileType
import groovy.transform.EqualsAndHashCode import groovy.transform.EqualsAndHashCode
import groovy.transform.NullCheck import groovy.transform.NullCheck
import groovy.transform.TupleConstructor
import org.slf4j.Logger import org.slf4j.Logger
import org.slf4j.LoggerFactory import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck @NullCheck
@EqualsAndHashCode(includeFields = true) @EqualsAndHashCode(includeFields = true)
class TemplateFileTemplatesProvider implements TemplatesProvider { class TemplateFileTemplatesProvider implements TemplatesProvider, WithWatchableDir {
private static final Logger logger = LoggerFactory.getLogger(TemplateFileTemplatesProvider) private static final Logger logger = LoggerFactory.getLogger(TemplateFileTemplatesProvider)
private final Collection<TemplateType> templateTypes private final Collection<TemplateType> templateTypes
private final File templatesDir private final File templatesDir
TemplateFileTemplatesProvider(Collection<TemplateType> templateTypes, File templatesDir) {
this.templateTypes = templateTypes
this.templatesDir = templatesDir
this.watchableDir = this.templatesDir
}
private TemplateType getType(File file) { private TemplateType getType(File file) {
this.templateTypes.find { this.templateTypes.find {
it.ids.contains(new FileNameHandler(file).getExtension()) it.ids.contains(new FileNameHandler(file).getExtension())
@ -25,7 +30,7 @@ class TemplateFileTemplatesProvider implements TemplatesProvider {
} }
@Override @Override
Collection<Template> getTemplates() { Collection<Template> provide() {
if (!this.templatesDir.isDirectory()) { if (!this.templatesDir.isDirectory()) {
throw new IllegalArgumentException('templatesDir must be a directory') throw new IllegalArgumentException('templatesDir must be a directory')
} }

View File

@ -1,6 +1,7 @@
package com.jessebrault.ssg.template package com.jessebrault.ssg.template
interface TemplatesProvider { import com.jessebrault.ssg.provider.Provider
Collection<Template> getTemplates()
interface TemplatesProvider extends Provider<Collection<Template>> {
Collection<TemplateType> getTemplateTypes() Collection<TemplateType> getTemplateTypes()
} }

View File

@ -24,7 +24,7 @@ class PartFilePartsProviderTests {
write('Hello <%= name %>!') write('Hello <%= name %>!')
} }
def r = this.partsProvider.getParts() def r = this.partsProvider.provide()
assertEquals(1, r.size()) assertEquals(1, r.size())
def p0 = r[0] def p0 = r[0]
assertEquals('testPart.gsp', p0.path) assertEquals('testPart.gsp', p0.path)
@ -40,7 +40,7 @@ class PartFilePartsProviderTests {
} }
} }
def r = this.partsProvider.getParts() def r = this.partsProvider.provide()
assertEquals(1, r.size()) assertEquals(1, r.size())
def p0 = r[0] def p0 = r[0]
assertEquals('nested/testPart.gsp', p0.path) assertEquals('nested/testPart.gsp', p0.path)
@ -54,7 +54,7 @@ class PartFilePartsProviderTests {
write 'Ignored!' write 'Ignored!'
} }
def r = this.partsProvider.getParts() def r = this.partsProvider.provide()
assertEquals(0, r.size()) assertEquals(0, r.size())
} }

View File

@ -23,7 +23,7 @@ class SpecialPageFileSpecialPagesProviderTests {
new FileTreeBuilder(this.specialPagesDir) new FileTreeBuilder(this.specialPagesDir)
.file('test.gsp', '<%= "Hello, World!" %>') .file('test.gsp', '<%= "Hello, World!" %>')
def r = this.specialPagesProvider.getSpecialPages() def r = this.specialPagesProvider.provide()
assertEquals(1, r.size()) assertEquals(1, r.size())
def f0 = r[0] def f0 = r[0]
assertEquals('test', f0.path) assertEquals('test', f0.path)
@ -37,7 +37,7 @@ class SpecialPageFileSpecialPagesProviderTests {
file('nested.gsp', '<%= "Hello, World!" %>') file('nested.gsp', '<%= "Hello, World!" %>')
} }
def r = this.specialPagesProvider.getSpecialPages() def r = this.specialPagesProvider.provide()
assertEquals(1, r.size()) assertEquals(1, r.size())
def f0 = r[0] def f0 = r[0]
assertEquals('nested/nested', f0.path) assertEquals('nested/nested', f0.path)
@ -49,7 +49,7 @@ class SpecialPageFileSpecialPagesProviderTests {
void ignoresUnsupportedFile() { void ignoresUnsupportedFile() {
new FileTreeBuilder(this.specialPagesDir).file('.ignored', 'Ignored!') new FileTreeBuilder(this.specialPagesDir).file('.ignored', 'Ignored!')
def r = this.specialPagesProvider.getSpecialPages() def r = this.specialPagesProvider.provide()
assertEquals(0, r.size()) assertEquals(0, r.size())
} }

View File

@ -22,7 +22,7 @@ class PageTemplatesProviderTests {
void findsTemplate() { void findsTemplate() {
new File(this.templatesDir, 'test.gsp').write('<% out << text %>') new File(this.templatesDir, 'test.gsp').write('<% out << text %>')
def r = this.templatesProvider.getTemplates() def r = this.templatesProvider.provide()
assertEquals(1, r.size()) assertEquals(1, r.size())
def t0 = r[0] def t0 = r[0]
assertEquals('test.gsp', t0.path) assertEquals('test.gsp', t0.path)
@ -38,7 +38,7 @@ class PageTemplatesProviderTests {
} }
} }
def r = this.templatesProvider.getTemplates() def r = this.templatesProvider.provide()
assertEquals(1, r.size()) assertEquals(1, r.size())
def t0 = r[0] def t0 = r[0]
assertEquals('nested/nested.gsp', t0.path) assertEquals('nested/nested.gsp', t0.path)
@ -52,7 +52,7 @@ class PageTemplatesProviderTests {
write('Ignored!') write('Ignored!')
} }
def r = this.templatesProvider.getTemplates() def r = this.templatesProvider.provide()
assertEquals(0, r.size()) assertEquals(0, r.size())
} }