diff options
author | Matthew Wild <mwild1@gmail.com> | 2020-09-09 17:10:33 +0100 |
---|---|---|
committer | Matthew Wild <mwild1@gmail.com> | 2020-09-09 17:10:33 +0100 |
commit | c00bd4515da975d5db8004b2b92809e04aeaec32 (patch) | |
tree | 30aca2c3e00aa809020322a48f57445e0e21d3ba | |
parent | 97fc84beed9a3187537b9c8f3d68c7ea34fa82ac (diff) | |
download | prosody-c00bd4515da975d5db8004b2b92809e04aeaec32.tar.gz prosody-c00bd4515da975d5db8004b2b92809e04aeaec32.zip |
util.interpolation: Add '~' as the opposite of '&' (render sub-block if falsy)
One more magic character consumed!
-rw-r--r-- | spec/util_interpolation_spec.lua | 12 | ||||
-rw-r--r-- | util/interpolation.lua | 3 |
2 files changed, 14 insertions, 1 deletions
diff --git a/spec/util_interpolation_spec.lua b/spec/util_interpolation_spec.lua index 76000d94..98ed3b74 100644 --- a/spec/util_interpolation_spec.lua +++ b/spec/util_interpolation_spec.lua @@ -32,7 +32,15 @@ local template_map = [[ 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 @@ describe("util.interpolation", function () 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); diff --git a/util/interpolation.lua b/util/interpolation.lua index e0ccf47b..808a45f2 100644 --- a/util/interpolation.lua +++ b/util/interpolation.lua @@ -64,6 +64,9 @@ local function new_render(pat, escape, funcs) 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 |