Browse Source

1. "|join" processes iodata()
2. atoms can be compared to lists in "ifequal" clause

Thanks to indogus, insane, and kiszl for bug reports and patches.



git-svn-id: http://erlydtl.googlecode.com/svn/trunk@160 a5195066-8e3e-0410-a82a-05b01b1b9875

emmiller 15 years ago
parent
commit
a4f061a00f

+ 5 - 1
src/erlydtl/erlydtl_filters.erl

@@ -122,7 +122,7 @@ format_number(Input) ->
     Input.
     Input.
 
 
 join([Input], Separator) when is_list(Input) ->
 join([Input], Separator) when is_list(Input) ->
-    string:join(Input, Separator).
+    join_io(Input, Separator).
 
 
 last([Input]) when is_list(Input) or is_binary(Input) ->
 last([Input]) when is_list(Input) or is_binary(Input) ->
     last(Input);
     last(Input);
@@ -261,6 +261,10 @@ fix_ampersands("&" ++ Rest, Acc) ->
 fix_ampersands([C | Rest], Acc) ->
 fix_ampersands([C | Rest], Acc) ->
     fix_ampersands(Rest, [C | Acc]).
     fix_ampersands(Rest, [C | Acc]).
 
 
+join_io([], _Sep) -> [];
+join_io([_] = X, _Sep) -> X;
+join_io([X|T], Sep) -> [X,Sep] ++ join_io(T, Sep).
+
 linebreaksbr(Input, Index) when is_binary(Input) ->
 linebreaksbr(Input, Index) when is_binary(Input) ->
     Break = <<"<br />">>,
     Break = <<"<br />">>,
     case Input of
     case Input of

+ 4 - 0
src/erlydtl/erlydtl_runtime.erl

@@ -52,6 +52,10 @@ are_equal([Arg1], Arg2) when is_list(Arg1) ->
     are_equal(Arg1, Arg2);
     are_equal(Arg1, Arg2);
 are_equal(Arg1, [Arg2]) when is_list(Arg1) ->
 are_equal(Arg1, [Arg2]) when is_list(Arg1) ->
     are_equal(Arg1, Arg2);
     are_equal(Arg1, Arg2);
+are_equal(Arg1, Arg2) when is_atom(Arg1), is_list(Arg2) ->
+	 are_equal(atom_to_list(Arg1), Arg2);
+are_equal(Arg1, Arg2) when is_list(Arg1), is_atom(Arg2) ->
+	 are_equal(Arg1, atom_to_list(Arg2));
 are_equal(_, _) ->
 are_equal(_, _) ->
     false.
     false.
 
 

+ 11 - 3
src/tests/erlydtl_unittests.erl

@@ -161,7 +161,13 @@ tests() ->
                     [{var1, 2}], <<"yay">>},
                     [{var1, 2}], <<"yay">>},
                 {"Compare variable to unequal literal (int)",
                 {"Compare variable to unequal literal (int)",
                     <<"{% ifequal var1 2 %}boo{% else %}yay{% endifequal %}">>,
                     <<"{% ifequal var1 2 %}boo{% else %}yay{% endifequal %}">>,
-                    [{var1, 3}], <<"yay">>}
+                    [{var1, 3}], <<"yay">>},
+                {"Compare variable to equal literal (atom)",
+                    <<"{% ifequal var1 \"foo\"%}yay{% endifequal %}">>,
+                    [{var1, foo}], <<"yay">>},
+                {"Compare variable to unequal literal (atom)",
+                    <<"{% ifequal var1 \"foo\"%}yay{% else %}boo{% endifequal %}">>,
+                    [{var1, bar}], <<"boo">>}
             ]},
             ]},
         {"ifequal/else", [
         {"ifequal/else", [
                 {"Compare variable to literal",
                 {"Compare variable to literal",
@@ -261,10 +267,12 @@ tests() ->
                     <<"{{ var1|format_number }}">>, [{var1, fun() -> 29 end}], <<"29">>},
                     <<"{{ var1|format_number }}">>, [{var1, fun() -> 29 end}], <<"29">>},
                 {"|format_number 6",
                 {"|format_number 6",
                     <<"{{ var1|format_number }}">>, [{var1, fun() -> fun() -> 31 end end}], <<"31">>},
                     <<"{{ var1|format_number }}">>, [{var1, fun() -> fun() -> 31 end end}], <<"31">>},
- 
-                {"|join:\", \"",
+                {"|join:\", \" (list)",
                     <<"{{ var1|join:\", \" }}">>, [{var1, ["Liberte", "Egalite", "Fraternite"]}],
                     <<"{{ var1|join:\", \" }}">>, [{var1, ["Liberte", "Egalite", "Fraternite"]}],
                     <<"Liberte, Egalite, Fraternite">>},
                     <<"Liberte, Egalite, Fraternite">>},
+                {"|join:\", \" (binary)",
+                    <<"{{ var1|join:\", \" }}">>, [{var1, [<<"Liberte">>, "Egalite", <<"Fraternite">>]}],
+                    <<"Liberte, Egalite, Fraternite">>},
                 {"|last",
                 {"|last",
                     <<"{{ var1|last }}">>, [{var1, "XYZ"}],
                     <<"{{ var1|last }}">>, [{var1, "XYZ"}],
                     <<"Z">>},
                     <<"Z">>},