From 32d586df1bb38c3c32749a8646fc00a75122fbd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lo=C3=AFc=20Hoguin?= Date: Tue, 20 Nov 2012 17:56:39 +0100 Subject: [PATCH] Add a contrib_humanize module for the intcomma filter --- src/erlydtl_contrib_humanize.erl | 18 ++++++++++++++++++ tests/src/erlydtl_unittests.erl | 8 +++++++- 2 files changed, 25 insertions(+), 1 deletion(-) create mode 100644 src/erlydtl_contrib_humanize.erl diff --git a/src/erlydtl_contrib_humanize.erl b/src/erlydtl_contrib_humanize.erl new file mode 100644 index 0000000..49419ff --- /dev/null +++ b/src/erlydtl_contrib_humanize.erl @@ -0,0 +1,18 @@ +-module(erlydtl_contrib_humanize). + +-export([intcomma/1]). + +intcomma(Value) when is_integer(Value) -> + intcomma(integer_to_list(Value)); +intcomma(Value) -> + ValueBin = iolist_to_binary(Value), + intcomma(ValueBin, size(ValueBin) rem 3, <<>>). + +intcomma(<<>>, _, Acc) -> + Acc; +intcomma(<< C, Rest/bits >>, 0, <<>>) -> + intcomma(Rest, 2, << C >>); +intcomma(<< C, Rest/bits >>, 0, Acc) -> + intcomma(Rest, 2, << Acc/binary, $,, C >>); +intcomma(<< C, Rest/bits >>, N, Acc) -> + intcomma(Rest, N - 1, << Acc/binary, C >>). diff --git a/tests/src/erlydtl_unittests.erl b/tests/src/erlydtl_unittests.erl index cfb8aa4..a4f9cec 100644 --- a/tests/src/erlydtl_unittests.erl +++ b/tests/src/erlydtl_unittests.erl @@ -1059,12 +1059,18 @@ tests() -> {"unicode", [ {"(tm) somewhere", <<"™">>, [], <<"™">>} + ]}, + {"contrib_humanize", [ + {"intcomma", + <<"{{ a|intcomma }} {{ b|intcomma }} {{ c|intcomma }} {{ d|intcomma }}">>, + [{a, 999}, {b, 123456789}, {c, 12345}, {d, 1234567890}], + <<"999 123,456,789 12,345 1,234,567,890">>} ]} ]. run_tests() -> io:format("Running unit tests...~n"), - DefaultOptions = [], + DefaultOptions = [{custom_filters_modules, [erlydtl_contrib_humanize]}], Failures = lists:foldl( fun({Group, Assertions}, GroupAcc) -> io:format(" Test group ~p...~n", [Group]),