Comments 3
Очень интересно, но слишком кратко. Вы бы объяснили как реализован этот DSL, пример входного файла и как на нём работает этот DSL
0
DSL реализован с помощью AST трансформаций на этапе компиляции. Все выражения конвертируются и заменяются на соответствующие вызовы методов библиотеки. После этого на выходе получаем обычный Groovy скрипт. К примеру, файл из статьи HelloGrules.groovy будет выглядеть следующим образом:
Затем, на этапе выполнения, скармливаем скрипту набор входящих параметров и, анализируя результат каждого метода, собираем все воедино в виде отчета.
Добавил HelloWorld пример для наглядности. Также есть небольшое видео с туториалом по использованию библиотеки в проекте под управлением Grails (English).
public class test.HelloGrules extends groovy.lang.Script {
public test.HelloGrules() {
}
public test.HelloGrules(groovy.lang.Binding context) {
super.setBinding(context)
}
public static void main(java.lang.String[] args) {
org.codehaus.groovy.runtime.InvokerHelper.runScript(test.HelloGrules, args)
}
public java.lang.Object run() {
this.applyRuleToRequiredParameter('email', {
org.grules.script.expressions.SubrulesSeqWrapper.wrap(new org.grules.script.expressions.FunctionTerm({
this.isEmail(it)
}, 'isEmail') [ 'Invalid email'])
})
this.applyRuleToRequiredParameter('age', {
org.grules.script.expressions.SubrulesSeqWrapper.wrap(new org.grules.script.expressions.FunctionTerm({
this.toPositiveInt(it)
}, 'toPositiveInt') [ 'Invalid age']) >> {
it > 18
} [ 'You must be and adult']
})
}
}
Затем, на этапе выполнения, скармливаем скрипту набор входящих параметров и, анализируя результат каждого метода, собираем все воедино в виде отчета.
Добавил HelloWorld пример для наглядности. Также есть небольшое видео с туториалом по использованию библиотеки в проекте под управлением Grails (English).
0
Sign up to leave a comment.
Validation DSL на Groovy