Currently we support a DSL to match routes with variables:
```
[
["arg_name","==","json"],
["arg_weight",">",10],
["arg_weight","!",">",15]
]
```
is evaluated to `ngx.var.arg_name == "json" and ngx.var.arg_weight > 10
and not ngx.var.arg_weight > 15`.
It would be better if the DSL can support `or` relation and nested
expressions.
What about a syntax like:
```
{
"or": [ <- the `or` can be other logical operators, like `and`,
`!or`, `!and`
["arg_name","==","json"],
["arg_weight",">",10],
["arg_weight","!",">",15]
]
}
```
(means `ngx.var.arg_name == "json" or ngx.var.arg_weight > 10 or not
ngx.var.arg_weight > 15` )
and
```
{
"!and": {
"and": [
["arg_name","==","yaml"]
],
"or": [
["arg_name","==","json"],
["arg_weight",">",10],
["arg_weight","!",">",15]
]
}
}
```
(means `not (ngx.var.arg_name == "yaml" and (ngx.var.arg_name == "json" or
ngx.var.arg_weight > 10 or not ngx.var.arg_weight > 15))` )