diff options
author | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-07-29 17:39:13 +0300 |
---|---|---|
committer | Evgeniy Khramtsov <ekhramtsov@process-one.net> | 2016-07-29 17:39:13 +0300 |
commit | 9bf1bac7df54f5be9cdca9a5d7a36160c40e25dd (patch) | |
tree | c40f739fa35b9a5c3d38aa74b798d97b14d190b4 /src/gen_mod.erl | |
parent | Rewrite several modules to use XML generator (diff) |
Rewrite mod_vcard_ldap to use XML generator
Diffstat (limited to 'src/gen_mod.erl')
-rw-r--r-- | src/gen_mod.erl | 24 |
1 files changed, 20 insertions, 4 deletions
diff --git a/src/gen_mod.erl b/src/gen_mod.erl index c4306577c..e5b504897 100644 --- a/src/gen_mod.erl +++ b/src/gen_mod.erl @@ -48,7 +48,7 @@ opts = [] :: opts() | '_' | '$2'}). -type opts() :: [{atom(), any()}]. --type db_type() :: sql | mnesia | riak. +-type db_type() :: sql | mnesia | riak | ldap. -callback start(binary(), opts()) -> any(). -callback stop(binary()) -> any(). @@ -147,7 +147,7 @@ start_module(Host, Module) -> -spec start_module(binary(), atom(), opts()) -> any(). start_module(Host, Module, Opts0) -> - Opts = validate_opts(Module, Opts0), + Opts = validate_opts(Host, Module, Opts0), ets:insert(ejabberd_modules, #ejabberd_module{module_host = {Module, Host}, opts = Opts}), @@ -308,10 +308,10 @@ get_opt_host(Host, Opts, Default) -> Val = get_opt(host, Opts, fun iolist_to_binary/1, Default), ejabberd_regexp:greplace(Val, <<"@HOST@">>, Host). -validate_opts(Module, Opts) -> +validate_opts(Host, Module, Opts) -> lists:filtermap( fun({Opt, Val}) -> - case catch Module:mod_opt_type(Opt) of + case catch validate_opt(Host, Module, Opt, Opts) of VFun when is_function(VFun) -> try VFun(Val) of _ -> @@ -346,6 +346,22 @@ validate_opts(Module, Opts) -> false end, Opts). +validate_opt(Host, Module, Opt, Opts) -> + case Module:mod_opt_type(Opt) of + VFun1 when is_function(VFun1) -> + VFun1; + L1 when is_list(L1) -> + DBModule = db_mod(Host, Opts, Module), + try DBModule:mod_opt_type(Opt) of + VFun2 when is_function(VFun2) -> + VFun2; + L2 when is_list(L2) -> + lists:usort(L1 ++ L2) + catch _:undef -> + L1 + end + end. + -spec db_type(binary() | global, module()) -> db_type(); (opts(), module()) -> db_type(). |