回答編集履歴

2

Constraints\.nonEmpty\(\) を最初に評価するように

2017/02/10 07:51

投稿

tkawachi
tkawachi

スコア117

test CHANGED
@@ -1,26 +1,38 @@
1
- `Constraint` を記述して `def verifying(constraints: Constraint[T]*): Mapping[T]` の方を使うと良いのではないでしょうか。次のようになると思います。
1
+ `Constraint` を記述して `def verifying(constraints: Constraint[T]*): Mapping[T]` の方を使うと良いのではないでしょうか。
2
+
3
+ verifying で指定した Constraint は途中でエラーが見つかっても全て評価されるため、最初のエラーで中断したい場合には1つの Constraint にチェックを詰める必要があります。
4
+
5
+ nonEmptyText の実装は `text verifying Constraints.nonEmpty` となっているので、`Constraints.nonEmpty` を利用すると次のようになると思います。
2
6
 
3
7
 
4
8
 
5
9
  ```scala
6
10
 
7
- import play.api.data.validation.{Constraint, Invalid, Valid}
11
+ import play.api.data.validation.{Constraint, Constraints, Invalid, Valid}
8
12
 
9
13
 
10
14
 
11
15
  val constraint = Constraint[String] { string =>
12
16
 
13
- if (/* チェック1 */) {
17
+ Constraints.nonEmpty(string) match {
14
18
 
15
- Invalid("check1 error")
19
+ case invalid: Invalid => invalid
16
20
 
17
- } else if (/* チェック2 */) {
21
+ case Valid =>
18
22
 
19
- Invalid("check2 error")
23
+ if (/* チェック1 */) {
20
24
 
21
- } else {
25
+ Invalid("check1 error")
22
26
 
27
+ } else if (/* チェック2 */) {
28
+
29
+ Invalid("check2 error")
30
+
31
+ } else {
32
+
23
- Valid
33
+ Valid
34
+
35
+ }
24
36
 
25
37
  }
26
38
 
@@ -28,6 +40,10 @@
28
40
 
29
41
 
30
42
 
31
- nonEmptyText.verifying(constraint)
43
+ text.verifying(constraint)
32
44
 
33
45
  ```
46
+
47
+
48
+
49
+

1

コードを変更

2017/02/10 07:51

投稿

tkawachi
tkawachi

スコア117

test CHANGED
@@ -12,11 +12,11 @@
12
12
 
13
13
  if (/* チェック1 */) {
14
14
 
15
- Invalid("")
15
+ Invalid("check1 error")
16
16
 
17
17
  } else if (/* チェック2 */) {
18
18
 
19
- Invalid("")
19
+ Invalid("check2 error")
20
20
 
21
21
  } else {
22
22