Software /
code /
prosody
Changeset
11064:af1e3b7d9ea3
util.interpolation: Add '~' as the opposite of '&' (render sub-block if falsy)
One more magic character consumed!
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Wed, 09 Sep 2020 17:10:33 +0100 |
parents | 11062:dd3b1b9d867d |
children | 11065:95eb1a981ef6 |
files | spec/util_interpolation_spec.lua util/interpolation.lua |
diffstat | 2 files changed, 14 insertions(+), 1 deletions(-) [+] |
line wrap: on
line diff
--- a/spec/util_interpolation_spec.lua Tue Sep 08 22:50:43 2020 +0200 +++ b/spec/util_interpolation_spec.lua Wed Sep 09 17:10:33 2020 +0100 @@ -32,7 +32,15 @@ local expect_map = [[ FOO: bar ]] - +local template_not = [[ +{thing~Thing is nil}{thing&Thing is not nil} +]] +local expect_not_true = [[ +Thing is not nil +]] +local expect_not_nil = [[ +Thing is nil +]] describe("util.interpolation", function () it("renders", function () local render = require "util.interpolation".new("%b{}", string.upper, { sort = function (t) table.sort(t) return t end }); @@ -43,5 +51,7 @@ assert.equal(expect_func_pipe, render(template_func_pipe, { foo = { "c", "a", "d", "b", } })); -- assert.equal("", render(template_func_pipe, { foo = nil })); -- FIXME assert.equal(expect_map, render(template_map, { foo = { foo = "bar" } })); + assert.equal(expect_not_true, render(template_not, { thing = true })); + assert.equal(expect_not_nil, render(template_not, { thing = nil })); end); end);
--- a/util/interpolation.lua Tue Sep 08 22:50:43 2020 +0200 +++ b/util/interpolation.lua Wed Sep 09 17:10:33 2020 +0100 @@ -64,6 +64,9 @@ elseif opt == '&' then if not value then return ""; end return render(s_sub(block, e), values); + elseif opt == '~' then + if value then return ""; end + return render(s_sub(block, e), values); elseif opt == '?' and not value then return render(s_sub(block, e), values); elseif value ~= nil then