MAD

ВСТУП

Модуль MAD надає інтерфейс користувача для команд консолі.

  • main/1 — IO параметри.
  • help/0 — Показати довідку help.
  • profile/0 — Поточний профіль MAD.
  • atomize/1 — Команди mappings.

Профіль

Кожен профіль MAD повинен забезпечувати відкритий API:

-define(MAD,[compile/1,app/1,get/1,release/1,resolve/1,clean/1, start/1,attach/1,stop/1,sh/1,deps/1,up/1,fetch/1, static/1,eunit/1,strip/1]).
-type return() :: [] | {ok,any()} | {error,any()}.

Кожна функція з відкритого API має одинаковий підпис від списку строк до суми nil та error протоколів.

compile(list(string())) -> return().

app(list(string())) -> return().

get(list(string())) -> return().

release(list(string())) -> return().

clean(list(string())) -> return().

start(list(string())) -> return().

stop(list(string())) -> return().

sh(list(string())) -> return().

deps(list(string())) -> return().

up(list(string())) -> return().

sh(list(string())) -> return().

fetch(list(string())) -> return().

static(list(string())) -> return().

eunit(list(string())) -> return().

strip(list(string())) -> return().

LOOP

main(list(string())) -> integer().

Простий та зрозумілий цикл обробки команд та помилок. Функція atomize/1 допомагає зберігати відомі аргументи як атоми. Функція profile/0 отримує модуль з реалізацією MAD API. Функція main/1 повертає статус помилки в операційну систему, з завершенням роботи.

main(Params) -> { _Invalid, Valid } = lists:foldr( fun (X,{C,R}) when is_atom(X) -> {[],[{X,C}|R]}; (X,{C,R}) -> {[X|C],R} end, {[],[]}, lists:map(fun atomize/1, Params)), halt(return( lists:any(fun({error,X}) -> mad:info("~s~n",[X]), true; (_) -> false end, lists:flatten([ lists:foldl( fun ({Fun,Arg},ErrAcc) -> mad_hooks:run_hooks(pre, Fun), Errors = errors((profile()):Fun(Arg)), mad_hooks:run_hooks(post, Fun), Errors ++ ErrAcc end, [], Valid)])))).

Цей модуль може бути пов'язаним з: mad_local.