diff options
author | Badlop <badlop@process-one.net> | 2015-01-28 17:16:10 +0100 |
---|---|---|
committer | Badlop <badlop@process-one.net> | 2015-01-28 17:16:10 +0100 |
commit | 87d2eb5f9a6a3524da391442138316af358d9822 (patch) | |
tree | ea618bf8d5f2361c779d3f819f0cb2eb948e01ef | |
parent | Merge pull request #414 from weiss/fix-function-specs (diff) |
Support for "> ." in YAML configuration files
-rw-r--r-- | doc/guide.tex | 23 | ||||
-rw-r--r-- | src/ejabberd_config.erl | 15 |
2 files changed, 37 insertions, 1 deletions
diff --git a/doc/guide.tex b/doc/guide.tex index b21e3a03d..62e7fc8e2 100644 --- a/doc/guide.tex +++ b/doc/guide.tex @@ -693,6 +693,29 @@ in Erlang terms. The format is still supported, but it is highly recommended to convert it to the new YAML format using \term{convert\_to\_yaml} command from \term{ejabberdctl} (see~\ref{ejabberdctl} and \ref{list-eja-commands} for details). +If you want to specify some options using the old Erlang format, +you can set them in an additional cfg file, and include it using +the \option{include\_config\_file} option, see \ref{includeconfigfile} +for the option description and a related example in \ref{accesscommands}. + +If you just want to provide an erlang term inside an option, +you can use the \term{"> erlangterm."} syntax for embedding erlang terms in a YAML file, for example: +\begin{verbatim} +modules: + mod_cron: + tasks: + - time: 10 + units: seconds + module: mnesia + function: info + arguments: "> []." + - time: 3 + units: seconds + module: ejabberd_auth + function: try_register + arguments: "> [\"user1\", \"localhost\", \"pass\"]." +\end{verbatim} + \makesubsection{hostnames}{Host Names} \ind{options!hosts}\ind{host names} diff --git a/src/ejabberd_config.erl b/src/ejabberd_config.erl index 0d25224b9..53936744e 100644 --- a/src/ejabberd_config.erl +++ b/src/ejabberd_config.erl @@ -190,7 +190,7 @@ consult(File) -> {ok, []} -> {ok, []}; {ok, [Document|_]} -> - {ok, Document}; + {ok, parserl(Document)}; {error, Err} -> Msg1 = "Cannot load " ++ File ++ ": ", Msg2 = p1_yaml:format_error(Err), @@ -207,6 +207,19 @@ consult(File) -> end end. +parserl([$>, $\s | String]) -> + {ok, A2, _} = erl_scan:string(String), + {ok, A3} = erl_parse:parse_term(A2), + A3; +parserl(B) when is_binary(B) -> + parserl(binary_to_list(B)); +parserl({A, B}) -> + {parserl(A), parserl(B)}; +parserl([El|Tail]) -> + [parserl(El) | parserl(Tail)]; +parserl(Other) -> + Other. + %% @doc Convert configuration filename to absolute path. %% Input is an absolute or relative path to an ejabberd configuration file. %% And returns an absolute path to the configuration file. |