From 88d1f29257869b0de9369881236477163804125a Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Tue, 28 Apr 2015 22:36:44 -0500 Subject: use mustache instead of erlydtl for overlays --- src/rlx_util.erl | 62 +++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) (limited to 'src/rlx_util.erl') diff --git a/src/rlx_util.erl b/src/rlx_util.erl index 9c4dcc2..4639ffa 100644 --- a/src/rlx_util.erl +++ b/src/rlx_util.erl @@ -32,7 +32,12 @@ error_reason/1, indent/1, optional_to_string/1, - wildcard_paths/1]). + wildcard_paths/1, + render/1, + render/2, + load_file/3, + template_files/0, + escript_foldl/3]). -define(ONE_LEVEL_INDENT, " "). %%============================================================================ @@ -147,6 +152,61 @@ wildcard(Path) when is_list(Path) -> Paths -> Paths end. +render(Template) -> + render(Template, []). + +render(Template, Data) -> + {ok, mustache:render(ec_cnv:to_binary(Template), Data)}. + +load_file(Files, escript, Name) -> + {Name, Bin} = lists:keyfind(Name, 1, Files), + Bin; +load_file(_Files, file, Name) -> + {ok, Bin} = file:read_file(Name), + Bin. + +template_files() -> + find_priv_templates() ++ escript_files(). + +find_priv_templates() -> + Files = filelib:wildcard(filename:join([code:priv_dir(relx), "templates", "*"])), + lists:map(fun(File) -> + {ok, Bin} = file:read_file(File), + {filename:basename(File), Bin} + end, Files). + +%% Scan the current escript for available files +escript_files() -> + try + {ok, Files} = escript_foldl( + fun(Name, _, GetBin, Acc) -> + [{filename:basename(Name), GetBin()} | Acc] + end, [], filename:absname(escript:script_name())), + Files + catch + _:_ -> + [] + end. + +escript_foldl(Fun, Acc, File) -> + case escript:extract(File, [compile_source]) of + {ok, [_Shebang, _Comment, _EmuArgs, Body]} -> + case Body of + {source, BeamCode} -> + GetInfo = fun() -> file:read_file_info(File) end, + GetBin = fun() -> BeamCode end, + {ok, Fun(".", GetInfo, GetBin, Acc)}; + {beam, BeamCode} -> + GetInfo = fun() -> file:read_file_info(File) end, + GetBin = fun() -> BeamCode end, + {ok, Fun(".", GetInfo, GetBin, Acc)}; + {archive, ArchiveBin} -> + zip:foldl(Fun, Acc, {File, ArchiveBin}) + end; + {error, _} = Error -> + Error + end. + %%%=================================================================== %%% Test Functions %%%=================================================================== -- cgit v1.2.3 From 58fec57db3d99ffb5aefd0d5751d7bbda6762f66 Mon Sep 17 00:00:00 2001 From: Tristan Sloughter Date: Fri, 8 May 2015 11:45:22 -0500 Subject: use mustache v0.3.0 --- src/rlx_util.erl | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/rlx_util.erl') diff --git a/src/rlx_util.erl b/src/rlx_util.erl index 4639ffa..2251b4f 100644 --- a/src/rlx_util.erl +++ b/src/rlx_util.erl @@ -156,7 +156,7 @@ render(Template) -> render(Template, []). render(Template, Data) -> - {ok, mustache:render(ec_cnv:to_binary(Template), Data)}. + {ok, mustache:render(ec_cnv:to_binary(Template), Data, [{key_type, atom}])}. load_file(Files, escript, Name) -> {Name, Bin} = lists:keyfind(Name, 1, Files), -- cgit v1.2.3