Deputy - библиотека для декларативной конвертации и валидации данных
20/04/2012 19:14
Deputy - это библиотека для декларативной конвертации и валидации данных. Ее можно использовать для проверки данных, вводимых пользователем, то есть, для данных, над которыми у нас нет власти, так как для остальных данных и их типов у нас есть Sheriff.
Пример использования:
Rules = [{{convert, float}, <<"Must be a floating point number">>},
{{'>}],
{ok, 5.5} = deputy:check(<<"5.5">>, Rules),
{error, [<<"Must be less than 10.0">>]} =
deputy:check(<<"40.0">>, Rules),
{error, [<<"Must be a floating point number">>]} =
deputy:check(<<"abcd">>, Rules),Использование с proplists
Rules = [{<<"name">> , [{{regexp, <<"[a-zA-Z0-9]+">>}, <<"Must contain only alphanumerical characters">>}]}],
Attributes = [{<<"name">>, <<"##BatMan##">>}],
{error, [{<<"name">>, [<<"Must...">>]}]} = deputy:check_proplist(Attributes, Rules, []),Расширение функциональности
DateConvert = fun(Date) ->
DateStr = binary_to_list(Date),
case io_lib:fread("~4d-~2d-~2d", Date) of
{ok, [Year, Month, Day]} ->
{ok, {Year, Month, Day}};
_ ->
stop
end.
CurrentDate =
MinAge = 18,
%% bad age checker
CheckAge = fun(Date) ->
Days = calendar:date_to_gregorian(Date),
{Today, _} = calendar:local_time(),
TodayDays = calendar:date_to_gregorian(Today),
Age = (TodayDays - Days)/365.0,
case Age > MinAge ->
true -> ok
false -> error
end,
Rules = [{<<"birthday">>,
[{{func, DateConvert}, <<"Must be a valid datetime string.">>},
{{func, CheckAge}, <<"Must be at least 18 years old.">>}]}].Скачать библиотеку можно на GitHub'е: https://github.com/treetopllc/deputy
