Compare commits
5 Commits
3202e51d7f
...
869bef51dd
Author | SHA1 | Date | |
---|---|---|---|
![]() |
869bef51dd | ||
![]() |
db78a190ff | ||
![]() |
2d6eed2591 | ||
![]() |
df395da792 | ||
![]() |
13f85325a1 |
9
README.md
Normal file
9
README.md
Normal file
@ -0,0 +1,9 @@
|
||||
# Groowt (Groovy Web Tools/Templates)
|
||||
|
||||
## Project Version-Bumping
|
||||
|
||||
Update the version property in `buildSrc/src/main/groovy/groowt/gradle/groowt-conventions.gradle`.
|
||||
|
||||
## Dependency Versions
|
||||
|
||||
All dependencies and their version refs should be declared in `gradle/libs.versions.toml`.
|
@ -4,7 +4,7 @@ plugins {
|
||||
}
|
||||
|
||||
group = 'groowt'
|
||||
version = '0.1.3'
|
||||
version = '0.1.4'
|
||||
|
||||
repositories {
|
||||
mavenCentral()
|
||||
|
@ -3,30 +3,35 @@
|
||||
|
||||
[versions]
|
||||
antlr = '4.13.2'
|
||||
groovy = '4.0.25'
|
||||
junit = '5.11.4'
|
||||
asm = '9.8'
|
||||
groovy = '4.0.27'
|
||||
jakarta-inject = '2.0.1'
|
||||
jansi = '2.4.2'
|
||||
jbarchiva = '0.2.2'
|
||||
jetbrains-annotations = '26.0.2'
|
||||
junit = '5.13.0'
|
||||
kotlin = '1.9.25'
|
||||
log4j = '2.24.3'
|
||||
mockito = '5.15.2'
|
||||
slf4j = '2.0.16'
|
||||
mockito = '5.18.0'
|
||||
picocli = '4.7.7'
|
||||
slf4j = '2.0.17'
|
||||
|
||||
[libraries]
|
||||
antlr = { module = 'org.antlr:antlr4', version.ref = 'antlr' }
|
||||
antlr-runtime = { module = 'org.antlr:antlr4-runtime', version.ref = 'antlr' }
|
||||
asm = 'org.ow2.asm:asm:9.7.1'
|
||||
gradle-tooling = 'org.gradle:gradle-tooling-api:8.12.1'
|
||||
asm = { module = 'org.ow2.asm:asm', version.ref = 'asm' }
|
||||
groovy = { module = 'org.apache.groovy:groovy', version.ref = 'groovy' }
|
||||
groovy-console = { module = 'org.apache.groovy:groovy-console', version.ref = 'groovy' }
|
||||
groovy-templates = { module = 'org.apache.groovy:groovy-templates', version.ref = 'groovy' }
|
||||
jakarta-inject = 'jakarta.inject:jakarta.inject-api:2.0.1'
|
||||
jansi = 'org.fusesource.jansi:jansi:2.4.1'
|
||||
jbarchiva = 'com.jessebrault.jbarchiva:jbarchiva:0.2.2'
|
||||
jetbrains-anotations = 'org.jetbrains:annotations:26.0.2'
|
||||
jakarta-inject = { module = 'jakarta.inject:jakarta.inject-api', version.ref = 'jakarta-inject' }
|
||||
jansi = { module = 'org.fusesource.jansi:jansi', version.ref = 'jansi' }
|
||||
jbarchiva = { module = 'com.jessebrault.jbarchiva:jbarchiva', version.ref = 'jbarchiva' }
|
||||
jetbrains-anotations = { module = 'org.jetbrains:annotations', version.ref = 'jetbrains-annotations' }
|
||||
junit-jupiter-api = { module = 'org.junit.jupiter:junit-jupiter-api', version.ref = 'junit' }
|
||||
kotlin-stdlib = { module = 'org.jetbrains.kotlin:kotlin-stdlib', version.ref = 'kotlin' }
|
||||
log4j-core = { module = 'org.apache.logging.log4j:log4j-core', version.ref = 'log4j' }
|
||||
log4j-slf4jBinding = { module = 'org.apache.logging.log4j:log4j-slf4j2-impl', version.ref = 'log4j' }
|
||||
mockito-core = { module = 'org.mockito:mockito-core', version.ref = 'mockito' }
|
||||
mockito-junit = { module = 'org.mockito:mockito-junit-jupiter', version.ref = 'mockito' }
|
||||
picocli = 'info.picocli:picocli:4.7.6'
|
||||
picocli = { module = 'info.picocli:picocli', version.ref = 'picocli' }
|
||||
slf4j-api = { module = 'org.slf4j:slf4j-api', version.ref = 'slf4j' }
|
||||
|
@ -97,8 +97,7 @@ public class DefaultComponentContext implements ComponentContext {
|
||||
|
||||
@Override
|
||||
public List<ViewComponent> getAllAncestors() {
|
||||
final List<ViewComponent> componentStack = this.getRenderContext().getComponentStack();
|
||||
return componentStack.subList(1, componentStack.size());
|
||||
return this.renderContext.getComponentStack();
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,26 +1,34 @@
|
||||
package groowt.view.component.web.lib
|
||||
|
||||
import groowt.view.View
|
||||
import groowt.view.component.runtime.DefaultComponentWriter
|
||||
|
||||
class Render extends DelegatingWebViewComponent {
|
||||
|
||||
private final Object item
|
||||
private final Object items
|
||||
|
||||
Render(Map attr) {
|
||||
item = Objects.requireNonNull(attr.item, "<Render> attribute 'item' must not be null.")
|
||||
if (attr.item && attr.items) {
|
||||
throw new IllegalArgumentException("<Render> cannot have both 'item' and 'items' attributes.")
|
||||
}
|
||||
this.items = attr.item ? [attr.item] : attr.items ?: []
|
||||
}
|
||||
|
||||
@Override
|
||||
protected View getDelegate() {
|
||||
return { Writer w ->
|
||||
if (item.respondsTo('renderTo', [Writer] as Class[])) {
|
||||
item.renderTo(w)
|
||||
} else if (item.respondsTo('render')) {
|
||||
w << item.render()
|
||||
items.each {
|
||||
if (it instanceof Closure) {
|
||||
it = it()
|
||||
}
|
||||
if (it.respondsTo('renderTo', [Writer] as Class[])) {
|
||||
it.renderTo(w)
|
||||
} else if (it.respondsTo('render')) {
|
||||
w << it.render()
|
||||
} else {
|
||||
throw new IllegalArgumentException(
|
||||
'<Render> must use an item which responds to either renderTo(Writer) or render().'
|
||||
)
|
||||
def cw = new DefaultComponentWriter(w, context.renderContext, context)
|
||||
cw << it
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,6 +1,5 @@
|
||||
package groowt.view.component.web.lib
|
||||
|
||||
|
||||
import groowt.view.component.web.WebViewComponentContext
|
||||
import groowt.view.component.web.WebViewComponentScope
|
||||
import org.junit.jupiter.api.Test
|
||||
|
@ -1,5 +1,7 @@
|
||||
package groowt.view.component.web.lib
|
||||
|
||||
|
||||
import groowt.view.component.web.BaseWebViewComponent
|
||||
import org.junit.jupiter.api.Test
|
||||
|
||||
class RenderTests extends AbstractWebViewComponentTests {
|
||||
@ -20,6 +22,14 @@ class RenderTests extends AbstractWebViewComponentTests {
|
||||
|
||||
}
|
||||
|
||||
static final class Hello extends BaseWebViewComponent {
|
||||
|
||||
Hello() {
|
||||
super('Hello, World!')
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
void renderToExample() {
|
||||
doTest('''
|
||||
@ -44,4 +54,18 @@ class RenderTests extends AbstractWebViewComponentTests {
|
||||
)
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersComponent() {
|
||||
doTest('<Render item={<RenderTests.Hello />} />', 'Hello, World!', context {
|
||||
configureRootScope {
|
||||
addWithNoArgConstructor(Hello)
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
@Test
|
||||
void rendersItems() {
|
||||
doTest('<Render items={[0, 1, 2]} />', '012')
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user