16
Oct/090
Oct/090
Modification des violations de vérification des données utilisateur
La liste des violations de données utilisateurs est structurée comme suit :
[{"login", "required"}, {"login", "min"}, {"pwd", "required"}]
Le problème est que la syntaxe JSON n’est pas correcte, et une des erreurs sur le login ne sera pas visible au niveau du javascript (du fait qu’il y a plusieurs clés identiques).
On modifie donc les validateurs pour qu’ils ne renvoient plus que la règle et non le tuple, par exemple le code suivant :
validator(Field, Value, required) -> case string:len(Value)==0 of true -> {Field, <<"required">>}; false -> ok end.
devient :
validator(Value, required) -> case string:len(Value)==0 of true -> <<"required">>; false -> ok end.
Le paramètre Field
n’est plus nécessaire.
C’est la méthode validate/3
qui sera chargée de produire le tuple final. On commence d’abord par écrire un test unitaire permettant de vérifier le comportement attendu :
test() -> ... [] = validate("login", [{"login", "a"}], [required]), [{"login", [<<"required">>,<<"min">>]}] = validate("login", [{"login", ""}], [required, {min_length, 6}]), ok.
On modifie alors la fonction pour satisfaire les tests :
validate(Field, Data, Constraints) -> Value = proplists:get_value(Field, Data), Errors = lists:map(fun(Constraint) -> validator(Value, Constraint) end, Constraints), Final = lists:filter(fun(Error) -> case Error of ok -> false; _ -> true end end, Errors), case Final == [] of true -> []; false -> [{Field, Final}] end.
Le reste du code est inchangé.