Skip to content

Commit a64bc9b

Browse files
committed
ルートとテンプレートをYAMLファイルで設定できるようにしました。
1 parent 9f965e1 commit a64bc9b

10 files changed

Lines changed: 88 additions & 0 deletions

File tree

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ dependencies {
4040
compile "com.google.guava:guava:21.0"
4141
compile "com.atilika.kuromoji:kuromoji-ipadic:0.9.0"
4242
compile "org.antlr:ST4:4.0.8"
43+
compile "org.yaml:snakeyaml:1.18"
4344
compile "org.reflections:reflections:0.9.11"
4445
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
4546
testCompile 'junit:junit:4.12'
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
package xyz.javecs.tools.text2expr.utils
2+
3+
import org.yaml.snakeyaml.Yaml
4+
5+
data class Templates(var templates: List<RuleTemplate> = ArrayList<RuleTemplate>())
6+
data class RuleTemplate(var rule:String = "", var template:String = "")
7+
8+
class TemplateConfig(path: String = "rule-template.yml", val defaultTemplate: String = "") {
9+
private val config = Yaml().loadAs(read(path), Templates::class.java)
10+
fun templateOf(rule:String): String {
11+
val item = config.templates.find { it.rule == rule }
12+
return if (item == null) {
13+
defaultTemplate
14+
} else {
15+
read(item.template)
16+
}
17+
}
18+
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
templates:
2+
- rule: default
3+
template: templates/reply.st
4+
- rule: rules/length/mileToKilometer.txt
5+
template: templates/simple-expr.st
Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
答えは、
2+
<value>
Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
package xyz.javecs.tools.text2expr.test.kotlin
2+
3+
import org.junit.Test
4+
import xyz.javecs.tools.text2expr.utils.TemplateConfig
5+
import kotlin.test.assertEquals
6+
7+
class TemplateConfigTest {
8+
@Test fun template1() {
9+
val config = TemplateConfig("config/rule-template-test1.yml")
10+
assertEquals("HELLO", config.templateOf("hello"))
11+
assertEquals("", config.templateOf("world"))
12+
13+
}
14+
15+
@Test fun template2() {
16+
val config = TemplateConfig("config/rule-template-test2.yml")
17+
assertEquals("HELLO", config.templateOf("hello"))
18+
assertEquals("WORLD", config.templateOf("world"))
19+
}
20+
21+
@Test fun template3() {
22+
val config = TemplateConfig("config/rule-template-test2.yml")
23+
assertEquals("HELLO", config.templateOf("hello"))
24+
assertEquals("WORLD", config.templateOf("world"))
25+
}
26+
27+
@Test fun template4() {
28+
val config = TemplateConfig("config/rule-template-test1.yml", defaultTemplate = "Ok")
29+
assertEquals("Ok", config.templateOf("xyz"))
30+
}
31+
32+
@Test fun template5() {
33+
val expected = """
34+
|<if(variables)>
35+
|<variables:{v|<v.key> = <v.value>
36+
|}>
37+
|<endif>
38+
|<if(expr)>
39+
|こうだから、
40+
|<expr:{e|<e>
41+
|}>
42+
|<endif>
43+
|答えは、
44+
|<value>
45+
|
46+
""".trimMargin("|")
47+
val config = TemplateConfig()
48+
assertEquals(expected, config.templateOf("default"))
49+
}
50+
51+
}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
templates:
2+
- rule: hello
3+
template: config/templates/template1.st
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
templates:
2+
- rule: hello
3+
template: config/templates/template1.st
4+
- rule: world
5+
template: config/templates/template2.st
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
Hello, world
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
HELLO
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
WORLD

0 commit comments

Comments
 (0)