16
Oct/09
0

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é.

Filed under: Erlang
Comments (0) Trackbacks (0)

No comments yet.

Leave a comment

No trackbacks yet.