Skip to content

Commit 244a01b

Browse files
authored
Merge pull request #52 from soranoba/nil-and-empty-string-as-false
Treat nil and empty binaries as false in conditions
2 parents 0bd1892 + 6e8cd41 commit 244a01b

File tree

2 files changed

+18
-2
lines changed

2 files changed

+18
-2
lines changed

src/bbmustache.erl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -287,7 +287,7 @@ compile_impl([{'#', Keys, Tags, Source} | T], Data, Result, State) ->
287287
_ when is_list(Value) ->
288288
compile_impl(T, Data, lists:foldl(fun(X, Acc) -> compile_impl(Tags, X, Acc, NestedState) end,
289289
Result, Value), State);
290-
_ when Value =:= false ->
290+
_ when Value =:= false; Value =:= nil; Value =:= <<"">> ->
291291
compile_impl(T, Data, Result, State);
292292
_ when is_function(Value, 2) ->
293293
Ret = Value(Source, fun(Text) -> render(Text, Data, State#?MODULE.options) end),
@@ -297,7 +297,7 @@ compile_impl([{'#', Keys, Tags, Source} | T], Data, Result, State) ->
297297
end;
298298
compile_impl([{'^', Keys, Tags} | T], Data, Result, State) ->
299299
Value = get_data_recursive(Keys, Data, false, State),
300-
case Value =:= [] orelse Value =:= false of
300+
case Value =:= [] orelse Value =:= false orelse Value =:= nil orelse Value =:= <<"">> of
301301
true -> compile_impl(T, Data, compile_impl(Tags, Data, Result, State), State);
302302
false -> compile_impl(T, Data, Result, State)
303303
end;

test/bbmustache_tests.erl

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -218,6 +218,22 @@ context_stack_test_() ->
218218
[raise_on_context_miss]))}
219219
].
220220

221+
shows_or_hides_content_test_() ->
222+
[
223+
{"It hides content in # tag that is specified as empty list, empty binary, nil or false",
224+
fun() ->
225+
lists:foreach(fun(X) ->
226+
?assertEqual(<<"">>, bbmustache:render(<<"{{#content}}hello world{{/content}}">>, [{"content", X}]))
227+
end, ["", <<"">>, nil, false])
228+
end},
229+
{"It show content in ^ tag that is specified as empty list, empty binary, nil or false",
230+
fun() ->
231+
lists:foreach(fun(X) ->
232+
?assertEqual(<<"hello world">>, bbmustache:render(<<"{{^content}}hello world{{/content}}">>, [{"content", X}]))
233+
end, ["", <<"">>, nil, false])
234+
end}
235+
].
236+
221237
escape_fun_test_() ->
222238
[
223239
{"It is able to specified own escape function",

0 commit comments

Comments
 (0)