我希望有一个groovy配置,允许我设置一些默认值(即计算值),可以选择性地覆盖环境。以下脚本显示了一个简单示例。
import static junit.framework.Assert.*
def config =
"""
base { value = "X" }
calc { value = base.value }
environments {
overridebase {
base { value = "1" }
}
}
"""
// these asserts work
assertEquals("X", new ConfigSlurper().parse(config).base.value)
assertEquals("X", new ConfigSlurper().parse(config).calc.value)
assertEquals("1", new ConfigSlurper("overridebase").parse(config).base.value)
// this assert fails as calc.value remains "X"
assertEquals("1", new ConfigSlurper("overridebase").parse(config).calc.value)
前三个断言有效,因此原始计算值有效,但即使基数发生变化,它仍然会很快解决,因为它保持原始计算值。
答案 0 :(得分:0)
证明自己错了:
def myConfig = new ConfigSlurper("overridebase").parse(config)
assert "1" == Eval.me("${myConfig.calc.value}", myConfig.base.value, myConfig.calc.value.toString())
你鼓励我不要辜负目的。谢谢。 :)
答案 1 :(得分:0)
看起来最简单的事情就是手动检查缺失值
import static junit.framework.Assert.*
def configs =
"""
base { value = "X" }
calc { }
environments {
overridebase {
base { value = "1" }
}
overridecalc {
calc { value = "2" }
}
}
"""
def config
config = new ConfigSlurper().parse(configs)
assertEquals("X", config.base.value)
assertEquals("X", config.calc.value ?: config.base.value)
config = new ConfigSlurper("overridebase").parse(configs)
assertEquals("1", config.base.value)
assertEquals("1", config.calc.value ?: config.base.value)
config = new ConfigSlurper("overridecalc").parse(configs)
assertEquals("X", config.base.value)
assertEquals("2", config.calc.value ?: config.base.value)