@@ -7,11 +7,13 @@ defmodule Request.Validator.Rulex do
7
7
8
8
require Decimal
9
9
10
- @ type rule :: % {
11
- required ( :name ) => atom ( ) ,
12
- required ( :validator ) => ( ... -> :ok | { :error , String . t ( ) } ) ,
13
- optional ( :implicit? ) => boolean ( )
14
- }
10
+ @ type validator :: ( ... -> :ok | { :error , String . t ( ) } )
11
+ @ type rule ::
12
+ validator ( )
13
+ | % {
14
+ required ( :validator ) => validator ( ) ,
15
+ optional ( :implicit? ) => boolean ( )
16
+ }
15
17
16
18
@ backend Application . compile_env (
17
19
:request_validator ,
@@ -59,11 +61,7 @@ defmodule Request.Validator.Rulex do
59
61
end
60
62
end
61
63
62
- % {
63
- name: :required ,
64
- implicit?: true ,
65
- validator: validator_fn
66
- }
64
+ % { implicit?: true , validator: validator_fn }
67
65
end
68
66
69
67
@ doc """
@@ -96,7 +94,6 @@ defmodule Request.Validator.Rulex do
96
94
end
97
95
98
96
% {
99
- name: :required_if ,
100
97
implicit?: true ,
101
98
validator: & validator_fn . ( condition , & 1 , & 2 , validator_fn )
102
99
}
@@ -134,7 +131,6 @@ defmodule Request.Validator.Rulex do
134
131
end
135
132
136
133
% {
137
- name: :required_if ,
138
134
implicit?: true ,
139
135
validator: & ( check_fn . ( other , value , op , & 3 ) |> validator_fn . ( & 1 , & 2 , other , value ) )
140
136
}
@@ -144,7 +140,7 @@ defmodule Request.Validator.Rulex do
144
140
## Examples
145
141
146
142
iex> import Request.Validator.Rulex
147
- iex> %{validator: fun} = string()
143
+ iex> fun = string()
148
144
iex> fun.("content", "")
149
145
:ok
150
146
iex> fun.("content", 1)
@@ -164,14 +160,14 @@ defmodule Request.Validator.Rulex do
164
160
check ( is_binary ( value ) , message )
165
161
end
166
162
167
- % { name: :string , validator: & validator_fn . ( & 1 , & 2 ) }
163
+ & validator_fn . ( & 1 , & 2 )
168
164
end
169
165
170
166
@ doc """
171
167
## Examples
172
168
173
169
iex> import Request.Validator.Rulex
174
- iex> %{validator: fun} = alpha()
170
+ iex> fun = alpha()
175
171
iex> fun.("uid", "abcde")
176
172
:ok
177
173
iex> fun.("uid", 1)
@@ -194,14 +190,14 @@ defmodule Request.Validator.Rulex do
194
190
|> check ( message )
195
191
end
196
192
197
- % { name: :alpha , validator: & validator_fn . ( & 1 , & 2 ) }
193
+ & validator_fn . ( & 1 , & 2 )
198
194
end
199
195
200
196
@ doc """
201
197
## Examples
202
198
203
199
iex> import Request.Validator.Rulex
204
- iex> %{validator: fun} = alpha_num()
200
+ iex> fun = alpha_num()
205
201
iex> fun.("ref", "1ab2de3")
206
202
:ok
207
203
iex> fun.("ref", 1)
@@ -229,14 +225,14 @@ defmodule Request.Validator.Rulex do
229
225
|> check ( message )
230
226
end
231
227
232
- % { name: :alpha_num , validator: & validator_fn . ( & 1 , & 2 ) }
228
+ & validator_fn . ( & 1 , & 2 )
233
229
end
234
230
235
231
@ doc """
236
232
## Examples
237
233
238
234
iex> import Request.Validator.Rulex
239
- iex> %{validator: fun} = alpha_dash()
235
+ iex> fun = alpha_dash()
240
236
iex> fun.("username", "abcde2")
241
237
:ok
242
238
iex> fun.("username", "ab_d-2")
@@ -265,14 +261,14 @@ defmodule Request.Validator.Rulex do
265
261
|> check ( message )
266
262
end
267
263
268
- % { name: :alpha_dash , validator: & validator_fn . ( & 1 , & 2 ) }
264
+ & validator_fn . ( & 1 , & 2 )
269
265
end
270
266
271
267
@ doc """
272
268
## Examples
273
269
274
270
iex> import Request.Validator.Rulex
275
- iex> %{validator: fun} = integer()
271
+ iex> fun = integer()
276
272
iex> fun.("age", 1)
277
273
:ok
278
274
iex> fun.("age", 2.0)
@@ -294,14 +290,14 @@ defmodule Request.Validator.Rulex do
294
290
check ( is_integer ( value ) , message )
295
291
end
296
292
297
- % { name: :integer , validator: & validator_fn . ( & 1 , & 2 ) }
293
+ & validator_fn . ( & 1 , & 2 )
298
294
end
299
295
300
296
@ doc """
301
297
## Examples
302
298
303
299
iex> import Request.Validator.Rulex
304
- iex> %{validator: fun} = decimal()
300
+ iex> fun = decimal()
305
301
iex> fun.("amount", 2.0)
306
302
:ok
307
303
iex> fun.("amount", Decimal.new("9.999"))
@@ -319,20 +315,21 @@ defmodule Request.Validator.Rulex do
319
315
"""
320
316
@ spec decimal ( ) :: rule ( )
321
317
def decimal do
318
+ # TODO: support decimal places validation.
322
319
validator_fn = fn attr , value ->
323
320
message = gettext ( "The %{attribute} field must be a decimal." , attribute: attr )
324
321
325
322
check ( is_float ( value ) or Decimal . is_decimal ( value ) , message )
326
323
end
327
324
328
- % { name: :decimal , validator: & validator_fn . ( & 1 , & 2 ) }
325
+ & validator_fn . ( & 1 , & 2 )
329
326
end
330
327
331
328
@ doc """
332
329
## Examples
333
330
334
331
iex> import Request.Validator.Rulex
335
- iex> %{validator: fun} = numeric()
332
+ iex> fun = numeric()
336
333
iex> fun.("width", 2.0)
337
334
:ok
338
335
iex> fun.("width", 1)
@@ -354,20 +351,20 @@ defmodule Request.Validator.Rulex do
354
351
check ( is_number ( value ) , message )
355
352
end
356
353
357
- % { name: :numeric , validator: & validator_fn . ( & 1 , & 2 ) }
354
+ & validator_fn . ( & 1 , & 2 )
358
355
end
359
356
360
357
@ doc """
361
358
## Examples
362
359
363
360
iex> import Request.Validator.Rulex
364
- iex> %{validator: fun} = email()
361
+ iex> fun = email()
365
362
iex> fun.("email", "test@gmail.com")
366
363
:ok
367
- iex> %{validator: fun} = email([:format])
364
+ iex> fun = email([:format])
368
365
iex> fun.("email", "a@b.com")
369
366
:ok
370
- iex> %{validator: fun} = email(["mx"])
367
+ iex> fun = email(["mx"])
371
368
iex> fun.("email", "a@b.com")
372
369
{:error, "The email field must be a valid email address."}
373
370
iex> fun.("email", 2.0)
@@ -394,7 +391,7 @@ defmodule Request.Validator.Rulex do
394
391
check ( is_binary ( value ) and EmailChecker . valid? ( value , validations ) , message )
395
392
end
396
393
397
- % { name: :email , validator: & validator_fn . ( validations , & 1 , & 2 ) }
394
+ & validator_fn . ( validations , & 1 , & 2 )
398
395
end
399
396
400
397
@ doc """
@@ -406,7 +403,7 @@ defmodule Request.Validator.Rulex do
406
403
...> "password_confirmation" => 12345678,
407
404
...> "list" => [%{"a" => 1, "a_confirmation" => 1}]
408
405
...> }
409
- iex> %{validator: fun} = confirmed()
406
+ iex> fun = confirmed()
410
407
iex> fun.("password", 12345678, data)
411
408
:ok
412
409
iex> fun.("list.0.a", 1, data)
@@ -436,14 +433,14 @@ defmodule Request.Validator.Rulex do
436
433
|> check ( message )
437
434
end
438
435
439
- % { name: :confirmed , validator: & validator_fn . ( confirmation , & 1 , & 2 , & 3 ) }
436
+ & validator_fn . ( confirmation , & 1 , & 2 , & 3 )
440
437
end
441
438
442
439
@ doc """
443
440
## Examples
444
441
445
442
iex> import Request.Validator.Rulex
446
- iex> %{validator: fun} = allowed(["male", "female"])
443
+ iex> fun = allowed(["male", "female"])
447
444
iex> fun.("gender", "male")
448
445
:ok
449
446
iex> fun.("gender", "female")
@@ -463,7 +460,7 @@ defmodule Request.Validator.Rulex do
463
460
|> check ( message )
464
461
end
465
462
466
- % { name: :allowed , validator: & validator_fn . ( options , & 1 , & 2 ) }
463
+ & validator_fn . ( options , & 1 , & 2 )
467
464
end
468
465
469
466
defp check ( cond , message ) do
0 commit comments