Tweaking for better usability.
This commit is contained in:
parent
9cd303d317
commit
f5697fb99b
@ -21,6 +21,10 @@ dependencies {
|
||||
|
||||
// https://mvnrepository.com/artifact/org.jgrapht/jgrapht-core
|
||||
implementation 'org.jgrapht:jgrapht-core:1.5.2'
|
||||
|
||||
// So we can use Grape dependency management
|
||||
// https://mvnrepository.com/artifact/org.apache.ivy/ivy
|
||||
runtimeOnly 'org.apache.ivy:ivy:2.5.1'
|
||||
}
|
||||
|
||||
jar {
|
||||
|
@ -5,25 +5,27 @@ import groovy.transform.EqualsAndHashCode
|
||||
import groovy.transform.NullCheck
|
||||
import org.jetbrains.annotations.Nullable
|
||||
|
||||
import java.util.function.Predicate
|
||||
|
||||
@NullCheck
|
||||
@EqualsAndHashCode(includeFields = true)
|
||||
final class ModelCollection<T> {
|
||||
|
||||
@Delegate
|
||||
private final Collection<Model<T>> ts = []
|
||||
private final Collection<Model<T>> models = []
|
||||
|
||||
ModelCollection(Collection<Model<T>> ts) {
|
||||
this.ts.addAll(ts)
|
||||
ModelCollection(Collection<Model<T>> models) {
|
||||
this.models.addAll(models)
|
||||
}
|
||||
|
||||
@Nullable
|
||||
Model<T> getByName(String name) {
|
||||
this.ts.find { it.name == name }
|
||||
this.models.find { it.name == name }
|
||||
}
|
||||
|
||||
@Nullable
|
||||
<E extends T> Model<E> getByNameAndType(String name, Class<E> type) {
|
||||
this.ts.find { it.name == name && type.isAssignableFrom(it.get().class) } as Model<E>
|
||||
this.models.find { it.name == name && type.isAssignableFrom(it.get().class) } as Model<E>
|
||||
}
|
||||
|
||||
Optional<Model<T>> findByName(String name) {
|
||||
@ -35,10 +37,31 @@ final class ModelCollection<T> {
|
||||
}
|
||||
|
||||
def <E extends T> ModelCollection<E> findAllByType(Class<E> type) {
|
||||
def es = this.ts.findResults {
|
||||
def es = this.models.findResults {
|
||||
type.isAssignableFrom(it.get().class) ? it as Model<E> : null
|
||||
}
|
||||
new ModelCollection<>(es)
|
||||
}
|
||||
|
||||
def <E extends T> Optional<Model<E>> findOne(Class<E> type, Predicate<E> filter) {
|
||||
Optional.ofNullable(this.models.find {
|
||||
def t = it.get()
|
||||
if (type.isAssignableFrom(t.class)) {
|
||||
filter.test(t as E) ? it : null
|
||||
} else {
|
||||
null
|
||||
}
|
||||
} as Model<E>)
|
||||
}
|
||||
|
||||
def <E extends T> Optional<Model<E>> findOne(Class<E> type) {
|
||||
this.findOne(type) { true }
|
||||
}
|
||||
|
||||
Optional<Model<T>> findOne(Predicate<T> filter) {
|
||||
Optional.ofNullable(this.models.find {
|
||||
filter.test(it.get()) ? it : null
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -20,7 +20,7 @@ final class MarkdownTextRenderer implements TextRenderer {
|
||||
@Override
|
||||
Result<String> render(Text text) {
|
||||
try {
|
||||
Result.of(htmlRenderer.render(parser.parse(text.text)))
|
||||
Result.of(TextUtil.renderMarkdown(text.text))
|
||||
} catch (Exception e) {
|
||||
Result.of(
|
||||
[new Diagnostic("There was an exception while rendering ${ text.path }:\n${ e }", e)],
|
||||
|
23
api/src/main/groovy/com/jessebrault/ssg/text/TextUtil.java
Normal file
23
api/src/main/groovy/com/jessebrault/ssg/text/TextUtil.java
Normal file
@ -0,0 +1,23 @@
|
||||
package com.jessebrault.ssg.text;
|
||||
|
||||
import org.commonmark.ext.front.matter.YamlFrontMatterExtension;
|
||||
import org.commonmark.parser.Parser;
|
||||
import org.commonmark.renderer.html.HtmlRenderer;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public final class TextUtil {
|
||||
|
||||
private static final Parser parser = Parser.builder()
|
||||
.extensions(List.of(YamlFrontMatterExtension.create()))
|
||||
.build();
|
||||
|
||||
private static final HtmlRenderer htmlRenderer = HtmlRenderer.builder().build();
|
||||
|
||||
public static String renderMarkdown(String markdown) {
|
||||
return htmlRenderer.render(parser.parse(markdown));
|
||||
}
|
||||
|
||||
private TextUtil() {}
|
||||
|
||||
}
|
@ -22,9 +22,9 @@ dependencies {
|
||||
* Logging
|
||||
*/
|
||||
// https://mvnrepository.com/artifact/org.slf4j/slf4j-api
|
||||
implementation 'org.slf4j:slf4j-api:1.7.36'
|
||||
api 'org.slf4j:slf4j-api:1.7.36'
|
||||
|
||||
testFixturesImplementation 'org.slf4j:slf4j-api:1.7.36'
|
||||
testFixturesApi 'org.slf4j:slf4j-api:1.7.36'
|
||||
|
||||
/**
|
||||
* TESTING
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionPath=wrapper/dists
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-8.1.1-bin.zip
|
||||
networkTimeout=10000
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
zipStorePath=wrapper/dists
|
||||
|
Loading…
Reference in New Issue
Block a user