diff --git a/api/src/main/groovy/com/jessebrault/ssg/property/CollectionProperty.groovy b/api/src/main/groovy/com/jessebrault/ssg/property/CollectionProperty.groovy new file mode 100644 index 0000000..aefbe29 --- /dev/null +++ b/api/src/main/groovy/com/jessebrault/ssg/property/CollectionProperty.groovy @@ -0,0 +1,5 @@ +package com.jessebrault.ssg.property + +interface CollectionProperty extends Property { + // TODO +} \ No newline at end of file diff --git a/api/src/main/groovy/com/jessebrault/ssg/property/MapProperty.groovy b/api/src/main/groovy/com/jessebrault/ssg/property/MapProperty.groovy new file mode 100644 index 0000000..4a0763e --- /dev/null +++ b/api/src/main/groovy/com/jessebrault/ssg/property/MapProperty.groovy @@ -0,0 +1,7 @@ +package com.jessebrault.ssg.property + +interface MapProperty extends Property> { + V get(K key) + void put(K key, V value) + void putAll(Map map) +} diff --git a/api/src/main/groovy/com/jessebrault/ssg/property/Properties.groovy b/api/src/main/groovy/com/jessebrault/ssg/property/Properties.groovy index 9048902..f4f8811 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/property/Properties.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/property/Properties.groovy @@ -14,6 +14,21 @@ final class Properties { new SimpleProperty<>(convention, t) } + static MapProperty getMap() { + new SimpleMapProperty() + } + + static MapProperty getMap(Map convention) { + new SimpleMapProperty(convention) + } + + static MapProperty getMap( + Map convention, + Map value + ) { + new SimpleMapProperty(convention, value) + } + private Properties() {} } diff --git a/api/src/main/groovy/com/jessebrault/ssg/property/SimpleMapProperty.groovy b/api/src/main/groovy/com/jessebrault/ssg/property/SimpleMapProperty.groovy new file mode 100644 index 0000000..7f348b3 --- /dev/null +++ b/api/src/main/groovy/com/jessebrault/ssg/property/SimpleMapProperty.groovy @@ -0,0 +1,122 @@ +package com.jessebrault.ssg.property + +import com.jessebrault.ssg.provider.CollectionProvider +import com.jessebrault.ssg.provider.Provider +import groovy.transform.EqualsAndHashCode +import groovy.transform.NullCheck +import groovy.transform.PackageScope + +import java.util.function.Function +import java.util.function.UnaryOperator + +@PackageScope +@NullCheck +@EqualsAndHashCode(includeFields = true) +final class SimpleMapProperty implements MapProperty { + + private final Map convention = [:] + private final Map m = [:] + + SimpleMapProperty( + Map convention, + Map m + ) { + this.convention.putAll(convention) + this.m.putAll(m) + } + + SimpleMapProperty(Map convention) { + this(convention, [:] as Map) + } + + SimpleMapProperty() {} + + @Override + V get(K key) { + if (m[key] != null) { + m[key] + } else if (convention[key] != null) { + convention[key] + } else { + throw new NullPointerException("no such key: ${ key }") + } + } + + @Override + void put(K key, V value) { + this.m.put(key, value) + } + + @Override + void putAll(Map map) { + this.m.putAll(map) + } + + @Override + void set(Map kvMap) { + this.m.clear() + this.m.putAll(kvMap) + } + + @Override + void set(Provider> provider) { + // TODO + } + + @Override + void unset() { + this.m.clear() + } + + @Override + Map getConvention() { + this.convention + } + + @Override + void setConvention(Map kvMap) { + this.convention.clear() + this.convention.putAll(kvMap) + } + + @Override + void setConvention(Provider> provider) { + // TODO + } + + @Override + void unsetConvention() { + this.convention.clear() + } + + @Override + void map(UnaryOperator> operator) { + this.m.putAll(operator.apply(this.convention + this.m)) + } + + @Override + void flatMap(Function, Provider>> function) { + // TODO + } + + @Override + Map provide() { + this.convention + this.m + } + + @Override + CollectionProvider> plus(Provider> other) { + // TODO + } + + @Override + CollectionProvider> asType(Class collectionProviderClass) { + // TODO + } + + @Override + boolean isEmpty() { + return false + } + +} diff --git a/api/src/main/groovy/com/jessebrault/ssg/provider/Provider.groovy b/api/src/main/groovy/com/jessebrault/ssg/provider/Provider.groovy index 2473250..75212e9 100644 --- a/api/src/main/groovy/com/jessebrault/ssg/provider/Provider.groovy +++ b/api/src/main/groovy/com/jessebrault/ssg/provider/Provider.groovy @@ -7,6 +7,7 @@ interface Provider { @Deprecated CollectionProvider plus(Provider other) + @Deprecated CollectionProvider asType(Class collectionProviderClass) boolean isEmpty() diff --git a/sketchingBaseBuild.groovy b/sketchingBaseBuild.groovy new file mode 100644 index 0000000..ec0ea15 --- /dev/null +++ b/sketchingBaseBuild.groovy @@ -0,0 +1,36 @@ +abstractBuild(name: 'redDogAll', extends: 'default') { + siteSpec.merge { + name = 'Red Dog Ensemble' + baseUrl = 'https://reddogensemble.com' + } + + globals.merge { + greeting = 'Say hello to good music!' + } + + sources { types -> + models.map { acc -> + old + someMethodThatGetsEventModels() + } + } + + taskFactories { sources -> + register(name: 'eventToHtml', supplier: ModelToHtmlFactory::new) { + modelsProvider.map { acc -> + acc + CollectionProviders.fromSupplier { + sources.models.provide().findAll { it.name.startsWith('event/') } + } + } + } + } +} + +build(name: 'preview', extends: 'redDogAll') { + siteSpec.merge { + baseUrl += '/preview' // if possible + } + + globals.merge { + greeting = 'Hello from preview!' + } +} \ No newline at end of file