Merge pull request #59 from Vagabond/adt-read-lists-from-files

Support reading mustache 'lists' from files
This commit is contained in:
Dave Smith 2013-02-26 07:23:26 -08:00
commit e36b9c1bff

View file

@ -84,6 +84,9 @@ resolve_variables([], Dict) ->
resolve_variables([{Key, Value0} | Rest], Dict) when is_list(Value0) ->
Value = render(list_to_binary(Value0), Dict),
resolve_variables(Rest, dict:store(Key, Value, Dict));
resolve_variables([{Key, {list, Dicts}} | Rest], Dict) when is_list(Dicts) ->
%% just un-tag it so mustache can use it
resolve_variables(Rest, dict:store(Key, Dicts, Dict));
resolve_variables([_Pair | Rest], Dict) ->
resolve_variables(Rest, Dict).
@ -158,14 +161,14 @@ create1(Config, TemplateId) ->
undefined ->
Context0;
File ->
case file:consult(File) of
{ok, Terms} ->
%% TODO: Cleanup/merge with similar code in rebar_reltool
M = fun(_Key, _Base, Override) -> Override end,
dict:merge(M, Context0, dict:from_list(Terms));
case consult(load_file([], file, File)) of
{error, Reason} ->
?ABORT("Unable to load template_vars from ~s: ~p\n",
[File, Reason])
[File, Reason]);
Terms ->
%% TODO: Cleanup/merge with similar code in rebar_reltool
M = fun(_Key, _Base, Override) -> Override end,
dict:merge(M, Context0, dict:from_list(Terms))
end
end,
@ -299,7 +302,7 @@ consult(Cont, Str, Acc) ->
case Result of
{ok, Tokens, _} ->
{ok, Term} = erl_parse:parse_term(Tokens),
consult([], Remaining, [Term | Acc]);
consult([], Remaining, [maybe_dict(Term) | Acc]);
{eof, _Other} ->
lists:reverse(Acc);
{error, Info, _} ->
@ -310,6 +313,13 @@ consult(Cont, Str, Acc) ->
end.
maybe_dict({Key, {list, Dicts}}) ->
%% this is a 'list' element; a list of lists representing dicts
{Key, {list, [dict:from_list(D) || D <- Dicts]}};
maybe_dict(Term) ->
Term.
write_file(Output, Data, Force) ->
%% determine if the target file already exists
FileExists = filelib:is_regular(Output),