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))` )

Reply via email to