mirror of
https://github.com/correl/rebar.git
synced 2025-04-12 17:00:10 -09:00
Merge pull request #59 from Vagabond/adt-read-lists-from-files
Support reading mustache 'lists' from files
This commit is contained in:
commit
e36b9c1bff
1 changed files with 17 additions and 7 deletions
|
@ -84,6 +84,9 @@ resolve_variables([], Dict) ->
|
||||||
resolve_variables([{Key, Value0} | Rest], Dict) when is_list(Value0) ->
|
resolve_variables([{Key, Value0} | Rest], Dict) when is_list(Value0) ->
|
||||||
Value = render(list_to_binary(Value0), Dict),
|
Value = render(list_to_binary(Value0), Dict),
|
||||||
resolve_variables(Rest, dict:store(Key, Value, 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([_Pair | Rest], Dict) ->
|
||||||
resolve_variables(Rest, Dict).
|
resolve_variables(Rest, Dict).
|
||||||
|
|
||||||
|
@ -158,14 +161,14 @@ create1(Config, TemplateId) ->
|
||||||
undefined ->
|
undefined ->
|
||||||
Context0;
|
Context0;
|
||||||
File ->
|
File ->
|
||||||
case file:consult(File) of
|
case consult(load_file([], file, 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));
|
|
||||||
{error, Reason} ->
|
{error, Reason} ->
|
||||||
?ABORT("Unable to load template_vars from ~s: ~p\n",
|
?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
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
@ -299,7 +302,7 @@ consult(Cont, Str, Acc) ->
|
||||||
case Result of
|
case Result of
|
||||||
{ok, Tokens, _} ->
|
{ok, Tokens, _} ->
|
||||||
{ok, Term} = erl_parse:parse_term(Tokens),
|
{ok, Term} = erl_parse:parse_term(Tokens),
|
||||||
consult([], Remaining, [Term | Acc]);
|
consult([], Remaining, [maybe_dict(Term) | Acc]);
|
||||||
{eof, _Other} ->
|
{eof, _Other} ->
|
||||||
lists:reverse(Acc);
|
lists:reverse(Acc);
|
||||||
{error, Info, _} ->
|
{error, Info, _} ->
|
||||||
|
@ -310,6 +313,13 @@ consult(Cont, Str, Acc) ->
|
||||||
end.
|
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) ->
|
write_file(Output, Data, Force) ->
|
||||||
%% determine if the target file already exists
|
%% determine if the target file already exists
|
||||||
FileExists = filelib:is_regular(Output),
|
FileExists = filelib:is_regular(Output),
|
||||||
|
|
Loading…
Add table
Reference in a new issue