All file-based providers implement WithWatchableDir.
This commit is contained in:
parent
3c8ac6a743
commit
baf425739b
@ -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)
|
||||||
|
|
||||||
|
@ -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')
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
@ -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')
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
@ -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')
|
||||||
}
|
}
|
||||||
|
@ -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()
|
||||||
}
|
}
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user