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
def texts = config.textProviders.collectMany { it.provide() }
def templates = config.templatesProviders.collectMany { it.getTemplates() }
def parts = config.partsProviders.collectMany { it.getParts() }
def specialPages = config.specialPagesProviders.collectMany { it.getSpecialPages() }
def templates = config.templatesProviders.collectMany { it.provide() }
def parts = config.partsProviders.collectMany { it.provide() }
def specialPages = config.specialPagesProviders.collectMany { it.provide() }
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
import com.jessebrault.ssg.provider.WithWatchableDir
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
import org.slf4j.LoggerFactory
@TupleConstructor(includeFields = true, defaults = false)
@NullCheck
@EqualsAndHashCode(includeFields = true)
class PartFilePartsProvider implements PartsProvider {
class PartFilePartsProvider implements PartsProvider, WithWatchableDir {
private static final Logger logger = LoggerFactory.getLogger(PartFilePartsProvider)
private final Collection<PartType> partTypes
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) {
partTypes.find {
it.ids.contains(new FileNameHandler(file).getExtension())
@ -25,7 +30,7 @@ class PartFilePartsProvider implements PartsProvider {
}
@Override
Collection<Part> getParts() {
Collection<Part> provide() {
if (!partsDir.isDirectory()) {
throw new IllegalArgumentException('partsDir must be a directory')
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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