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

* More Erlang-y error messages
* Allow proplist variables to be keyed with strings (not just atoms)

Evan Miller 15 лет назад
Родитель
Сommit
98c0da3b9a

+ 2 - 0
src/erlydtl/erlydtl_compiler.erl

@@ -195,6 +195,8 @@ parse(File, Context) ->
             case parse(CheckSum, Data, Context) of
                 {error, Msg} when is_list(Msg) ->
                     {error, File ++ ": " ++ Msg};
+                {error, Msg} ->
+                    {error, {File, Msg}};
                 Result ->
                     Result
             end;

+ 1 - 1
src/erlydtl/erlydtl_runtime.erl

@@ -3,7 +3,7 @@
 -compile(export_all).
 
 find_value(Key, L) when is_list(L) ->
-    proplists:get_value(Key, L);
+    proplists:get_value(Key, L, proplists:get_value(atom_to_list(Key), L));
 find_value(Key, {GBSize, GBData}) when is_integer(GBSize) ->
     case gb_trees:lookup(Key, {GBSize, GBData}) of
         {value, Val} ->

+ 3 - 3
src/erlydtl/erlydtl_scanner.erl

@@ -194,7 +194,7 @@ scan([H | T], Scanned, {Row, Column}, {in_code, Closer}) ->
         digit ->
             scan(T, [{number_literal, {Row, Column}, [H]} | Scanned], {Row, Column + 1}, {in_number, Closer});
         _ ->
-            {error, io_lib:format("Illegal character line ~p column ~p", [Row, Column])}
+            {error, {illegal_character, {line, Row}, {column, Column}}}
     end;
 
 scan([H | T], Scanned, {Row, Column}, {in_number, Closer}) ->
@@ -202,7 +202,7 @@ scan([H | T], Scanned, {Row, Column}, {in_number, Closer}) ->
         digit ->
             scan(T, append_char(Scanned, H), {Row, Column + 1}, {in_number, Closer});
         _ ->
-            {error, io_lib:format("Illegal character line ~p column ~p", [Row, Column])}
+            {error, {illegal_character, {line, Row}, {column, Column}}}
     end;
 
 scan([H | T], Scanned, {Row, Column}, {in_identifier, Closer}) ->
@@ -212,7 +212,7 @@ scan([H | T], Scanned, {Row, Column}, {in_identifier, Closer}) ->
         digit ->
             scan(T, append_char(Scanned, H), {Row, Column + 1}, {in_identifier, Closer});
         _ ->
-            {error, io_lib:format("Illegal character line ~p column ~p", [Row, Column])}
+            {error, {illegal_character, {line, Row}, {column, Column}}}
     end.
 
 % internal functions

+ 0 - 5
src/tests/erlydtl_dateformat_tests.erl

@@ -2,8 +2,6 @@
 
 -export([run_tests/0]).
 
--define(DISPLAY_PASSES, false).
-
 run_tests() ->
    io:format("Running date format tests...~n"),
    Failures = test_group_runner([
@@ -181,9 +179,6 @@ test_runner(DateParam, [{Input, Expect} | Rest], TestNum, PassCount) ->
     IsPass = is(TestNum, Text, erlydtl_dateformat:format(DateParam, Input), Expect),
     test_runner(DateParam, Rest, TestNum + 1, PassCount + IsPass).
     
-is(TestNum, Text, Input1, Input2) when Input1 =:= Input2, ?DISPLAY_PASSES ->
-    io:format("~nok ~p - ~s", [TestNum, Text]),
-    1;
 is(_TestNum, _Text, Input1, Input2) when Input1 =:= Input2 ->
     1;
 is(TestNum, Text, Input1, Input2) -> 

+ 2 - 0
src/tests/erlydtl_unittests.erl

@@ -58,6 +58,8 @@ tests() ->
                     <<"{{ var1 }} is my game">>, [{var1, "bar"}], <<"bar is my game">>},
                 {"Render variable with attribute",
                     <<"I enjoy {{ var1.game }}">>, [{var1, [{game, "Othello"}]}], <<"I enjoy Othello">>},
+                {"Render variable with string-key attribute",
+                    <<"I also enjoy {{ var1.game }}">>, [{var1, [{"game", "Parcheesi"}]}], <<"I also enjoy Parcheesi">>},
                 {"Render variable in dict",
                     <<"{{ var1 }}">>, dict:store(var1, "bar", dict:new()), <<"bar">>},
                 {"Render variable in gb_tree",