ergo
ergo copied to clipboard
Optional DateTime always return TRUE for `some(myDate)`
Bug Report 🐛
Please see LOOM video for demo of bug. https://www.loom.com/share/4d628fd1e1ec4afa9d5a50444e69ebe9
In summary, optional
variables return unexpected results when interrogated in code blocks within grammar.tem.md
files.
An optional DateTime variable myDate
is defined as:
o DateTime myDate optional
A value in the data.json
file is set as...
"myDate": "2000-01-01T00:00:00"
A code block is defined in the grammar.tem.md
as:
{{%
match some(myDate)
with let? completionDate then "YES - Found myDate - " ++ toString(myDate)
else "NO - myDate not found"
%}}
A draft
command is executed as:
cicero draft --template . --data ./data.json --unquoteVariables
and the following response is returned...
YES - Found myDate - {"$left": 01/01/2000}
When the myDate
value is deleted from data.json
and the same draft
command executed then the following response is returned.
YES - Found myDate - {"$right": null}
Expected Result
If myDate
present then expected
YES - Found myDate - 01/01/2000
If myDate
not present then expected
NO - myDate not found
Example CTA archive attached: OptionalDateTime CTA
Is this issue still prevalent? Are you still facing it?
You shouldn't match on some(myDate)
, because in this case expression some(myDate)
will always has value and completionDate
will have type DateTime optional
. Your code snipped is equivalent to just
{{%
"YES - Found myDate - " ++ toString(myDate)
%}}
Match should be done on myDate
itself:
{{%
match myDate
with let? completionDate then "YES - Found myDate - " ++ toString(completionDate)
else "NO - myDate not found"
%}}
Converting optional value to string is quite ugly, yes.
I agree with @prekel here some(MyDate)
shouldn't be pattern matched here.
@prekel can you please create a PR (if you are willing to) for the tests that you added to the your fork I think that would be helpful in avoiding this :smiley: