Просмотр исходного кода

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.

Evan Miller 16 лет назад
Родитель
Сommit
f430611e06
3 измененных файлов с 20 добавлено и 4 удалено
  1. 5 1
      src/erlydtl/erlydtl_filters.erl
  2. 4 0
      src/erlydtl/erlydtl_runtime.erl
  3. 11 3
      src/tests/erlydtl_unittests.erl

+ 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">>},