diff --git a/mad b/mad index ee16d3f..fce6875 100755 Binary files a/mad and b/mad differ diff --git a/src/mad.erl b/src/mad.erl index 3431739..69a1b79 100644 --- a/src/mad.erl +++ b/src/mad.erl @@ -85,6 +85,10 @@ release(_Cwd,_ConfigFileName,_Config,Params) -> io:format("Release Params: ~p~n",[Params]), mad_release:main(Params). +static(_Cwd,_ConfigFileName,Config,Params) -> + io:format("Compile Static Params: ~p~n",[Params]), + mad_static:main(Config, Params). + help(Reason, Data) -> help(io_lib:format("~s ~p", [Reason, Data])). help(Msg) -> io:format("Error: ~s~n~n", [Msg]), help(). help() -> diff --git a/src/mad_static.erl b/src/mad_static.erl new file mode 100644 index 0000000..bbefb34 --- /dev/null +++ b/src/mad_static.erl @@ -0,0 +1,41 @@ +-module(mad_static). +-copyright('Yuri Artemev'). +-compile(export_all). +-define(NODE(Bin), "node_modules/.bin/"++Bin). + +main(Config, ["watch"]) -> + case mad_utils:get_value(static, Config, []) of + [] -> skip; + SC -> + Port = mad_utils:get_value(assets_port, SC, 3000), + install_deps(), serve_static(Port) + end; +main(Config, _Params) -> + case mad_utils:get_value(static, Config, []) of + [] -> skip; + SC -> + Files = mad_utils:get_value(files, SC, []), + install_deps(), compile_static(Files) + end. + +install_deps() -> + case filelib:is_dir("node_modules/mincer-erl") of + true -> ok; + _ -> + case sh:oneliner("npm install mincer-erl") of + {_,0,_} -> ok; + {_,_,_} -> exit("error while installing mincer-erl") + end + end. + +% FIXME exit +serve_static(Port) -> + PortStr = integer_to_list(Port), + sh:oneliner([?NODE("mincer-erl-serve"), "-p " ++ PortStr]). + +compile_static(Files) -> + Res = sh:oneliner([?NODE("mincer-erl-compile")] ++ Files), + case Res of + {_,0,_} -> ok; + {_,_,_} -> exit("error while compiling assets") + end. diff --git a/src/mad_utils.erl b/src/mad_utils.erl index 2cfa8f1..164f5b3 100644 --- a/src/mad_utils.erl +++ b/src/mad_utils.erl @@ -64,6 +64,7 @@ to_atom(X) when is_list(X) -> list_to_atom(X); to_atom(X) when is_binary(X) -> to_atom(binary_to_list(X)); to_atom(X) -> X. +atomize("static") -> static; atomize("com"++_) -> compile; atomize("rep"++_) -> repl; atomize("bun"++_) -> bundle;