Tweaking for better usability.

This commit is contained in:
JesseBrault0709 2023-06-08 20:40:20 +02:00
parent 9cd303d317
commit f5697fb99b
6 changed files with 60 additions and 10 deletions

View File

@ -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 {

View File

@ -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
})
}
}

View File

@ -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)],

View 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() {}
}

View File

@ -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

View File

@ -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