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