mirror of
https://github.com/processone/ejabberd.git
synced 2024-10-29 15:12:12 +01:00
31 lines
964 B
Elixir
31 lines
964 B
Elixir
|
defmodule Ejabberd.Config.Validator.Dependencies do
|
||
|
@moduledoc """
|
||
|
Validator module used to validate dependencies specified
|
||
|
with the @dependency annotation.
|
||
|
"""
|
||
|
|
||
|
# TODO: Duplicated from validator.ex !!!
|
||
|
@type mod_validation :: {[EjabberdModule.t], EjabberdModule.t, map}
|
||
|
import Ejabberd.Config.ValidatorUtility
|
||
|
|
||
|
@doc """
|
||
|
Given a module (with the form used for validation)
|
||
|
it checks if the @dependency annotation is respected and
|
||
|
returns the validation tuple with the errors updated, if found.
|
||
|
"""
|
||
|
@spec validate(mod_validation) :: mod_validation
|
||
|
def validate({modules, mod, errors}) do
|
||
|
module_names = extract_module_names(modules)
|
||
|
dependencies = mod.attrs[:dependency]
|
||
|
|
||
|
errors = Enum.reduce dependencies, errors, fn(req_module, err) ->
|
||
|
case req_module in module_names do
|
||
|
true -> err
|
||
|
false -> put_error(err, :dependency, {req_module, :not_found})
|
||
|
end
|
||
|
end
|
||
|
|
||
|
{modules, mod, errors}
|
||
|
end
|
||
|
end
|