veto 0.1.3 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -94
  3. data/lib/veto/blocks/block.rb +25 -0
  4. data/lib/veto/blocks/checker.rb +28 -0
  5. data/lib/veto/blocks/conditional_block.rb +26 -0
  6. data/lib/veto/blocks/validate_block.rb +18 -0
  7. data/lib/veto/blocks/validates_block.rb +51 -0
  8. data/lib/veto/blocks/with_options_block.rb +7 -0
  9. data/lib/veto/check_context_object.rb +10 -0
  10. data/lib/veto/checks/attribute_check.rb +19 -0
  11. data/lib/veto/checks/check.rb +7 -0
  12. data/lib/veto/checks/check_factory.rb +18 -0
  13. data/lib/veto/{validators/exact_length_validator.rb → checks/exact_length_check.rb} +5 -4
  14. data/lib/veto/{validators/format_validator.rb → checks/format_check.rb} +5 -4
  15. data/lib/veto/{validators/greater_than_validator.rb → checks/greater_than_check.rb} +2 -4
  16. data/lib/veto/{validators/greater_than_or_equal_to_validator.rb → checks/greater_than_or_equal_to_check.rb} +2 -4
  17. data/lib/veto/{validators/inclusion_validator.rb → checks/inclusion_check.rb} +2 -4
  18. data/lib/veto/{validators/integer_validator.rb → checks/integer_check.rb} +2 -4
  19. data/lib/veto/{validators/length_range_validator.rb → checks/length_range_check.rb} +2 -4
  20. data/lib/veto/{validators/less_than_validator.rb → checks/less_than_check.rb} +2 -4
  21. data/lib/veto/{validators/less_than_or_equal_to_validator.rb → checks/less_than_or_equal_to_check.rb} +2 -4
  22. data/lib/veto/{validators/max_length_validator.rb → checks/max_length_check.rb} +2 -4
  23. data/lib/veto/checks/method_check.rb +17 -0
  24. data/lib/veto/{validators/min_length_validator.rb → checks/min_length_check.rb} +2 -4
  25. data/lib/veto/{validators/not_null_validator.rb → checks/not_null_check.rb} +2 -4
  26. data/lib/veto/{validators/numeric_validator.rb → checks/numeric_check.rb} +2 -4
  27. data/lib/veto/{validators/presence_validator.rb → checks/presence_check.rb} +2 -4
  28. data/lib/veto/conditions/condition.rb +7 -0
  29. data/lib/veto/conditions/condition_factory.rb +18 -0
  30. data/lib/veto/conditions/conditions.rb +21 -0
  31. data/lib/veto/conditions/context_method_condition.rb +11 -0
  32. data/lib/veto/conditions/entity_eval_condition.rb +11 -0
  33. data/lib/veto/conditions/if_conditions.rb +8 -0
  34. data/lib/veto/conditions/if_unless_conditions.rb +21 -0
  35. data/lib/veto/conditions/passing_condition.rb +7 -0
  36. data/lib/veto/conditions/primative_condition.rb +11 -0
  37. data/lib/veto/conditions/proc_condition.rb +11 -0
  38. data/lib/veto/conditions/unless_conditions.rb +8 -0
  39. data/lib/veto/configuration.rb +38 -37
  40. data/lib/veto/errors.rb +27 -27
  41. data/lib/veto/exceptions.rb +13 -3
  42. data/lib/veto/model.rb +33 -35
  43. data/lib/veto/validator.rb +68 -169
  44. data/lib/veto/version.rb +1 -1
  45. data/lib/veto.rb +90 -49
  46. data/spec/blocks/block_spec.rb +31 -0
  47. data/spec/blocks/check_block_spec.rb +46 -0
  48. data/spec/blocks/conditional_block_spec.rb +36 -0
  49. data/spec/blocks/validate_block_spec.rb +18 -0
  50. data/spec/blocks/validates_block_spec.rb +22 -0
  51. data/spec/checks/exact_length_check_spec.rb +37 -0
  52. data/spec/checks/format_validator_spec.rb +37 -0
  53. data/spec/checks/greater_than_check_spec.rb +48 -0
  54. data/spec/checks/greater_than_or_equal_to_check_spec.rb +48 -0
  55. data/spec/checks/inclusion_check_spec.rb +37 -0
  56. data/spec/checks/integer_check_spec.rb +37 -0
  57. data/spec/checks/length_range_check_spec.rb +37 -0
  58. data/spec/checks/less_than_check_spec.rb +48 -0
  59. data/spec/checks/less_than_or_equal_to_check_spec.rb +48 -0
  60. data/spec/checks/max_length_check_spec.rb +48 -0
  61. data/spec/checks/method_check_spec.rb +13 -0
  62. data/spec/checks/min_length_check_spec.rb +48 -0
  63. data/spec/checks/not_null_check_spec.rb +37 -0
  64. data/spec/checks/numeric_check_spec.rb +37 -0
  65. data/spec/checks/presence_check_spec.rb +48 -0
  66. data/spec/conditions/condition_factory_spec.rb +31 -0
  67. data/spec/conditions/conditions_spec.rb +25 -0
  68. data/spec/conditions/context_method_condition_spec.rb +25 -0
  69. data/spec/conditions/entity_eval_condition_spec.rb +21 -0
  70. data/spec/conditions/if_conditions_spec.rb +65 -0
  71. data/spec/conditions/if_unless_conditions_spec.rb +33 -0
  72. data/spec/conditions/primative_condition_spec.rb +22 -0
  73. data/spec/conditions/proc_condition_spec.rb +25 -0
  74. data/spec/conditions/unless_conditions_spec.rb +65 -0
  75. data/spec/configuration/message_spec.rb +18 -23
  76. data/spec/spec_helper.rb +2 -1
  77. data/spec/validator_spec.rb +224 -115
  78. metadata +96 -61
  79. data/lib/veto/attribute_validator_factory.rb +0 -36
  80. data/lib/veto/builder.rb +0 -65
  81. data/lib/veto/conditions.rb +0 -23
  82. data/lib/veto/conditions_evaluator.rb +0 -30
  83. data/lib/veto/validators/abstract_validator.rb +0 -15
  84. data/lib/veto/validators/attribute_validator.rb +0 -22
  85. data/lib/veto/validators/custom_method_validator.rb +0 -19
  86. data/spec/attribute_validator_factory_spec.rb +0 -72
  87. data/spec/builder_spec.rb +0 -38
  88. data/spec/conditions_evaluator_spec.rb +0 -90
  89. data/spec/conditions_spec.rb +0 -16
  90. data/spec/configuration_spec.rb +0 -6
  91. data/spec/errors_spec.rb +0 -22
  92. data/spec/model_spec.rb +0 -67
  93. data/spec/system/validator_spec.rb +0 -530
  94. data/spec/validators/exact_length_validator_spec.rb +0 -37
  95. data/spec/validators/format_validator_spec.rb +0 -32
  96. data/spec/validators/inclusion_validator_spec.rb +0 -45
  97. data/spec/validators/integer_validator_spec.rb +0 -42
  98. data/spec/validators/length_range_validator_spec.rb +0 -55
  99. data/spec/validators/max_length_validator_spec.rb +0 -32
  100. data/spec/validators/min_length_validator_spec.rb +0 -32
  101. data/spec/validators/not_null_validator_spec.rb +0 -27
  102. data/spec/validators/numeric_validator_spec.rb +0 -42
  103. data/spec/validators/presence_validator_spec.rb +0 -47
  104. data/spec/veto_spec.rb +0 -24
@@ -1,530 +0,0 @@
1
- require 'spec_helper'
2
- require 'veto'
3
-
4
- describe Veto do
5
- let(:entity){ stub }
6
- let(:validator_class) { Class.new{ include Veto.validator }}
7
- let(:validator) { validator_class.new(entity) }
8
-
9
- describe 'built-in validations' do
10
- let(:value) { 'abc123' }
11
- let(:entity) {stub(:name => value)}
12
- let(:errors) { validator.valid?; validator.errors.on(:name) }
13
- let(:validator_type){ :presence }
14
- let(:options) { true }
15
- let(:validator_class) do
16
- klass = Class.new{ include Veto.validator }
17
- klass.validates :name, options
18
- klass
19
- end
20
-
21
- describe 'exact_length' do
22
- let(:options) {{:exact_length => 10}}
23
-
24
- context 'when value exact length' do
25
- let(:value) { 'abcdefghij' }
26
- it { errors.must_be_nil }
27
- end
28
-
29
- context 'when value is too short' do
30
- let(:value) { 'short' }
31
- it { errors.must_equal ["is not 10 characters"] }
32
- end
33
-
34
- context 'when value is too long' do
35
- let(:value) { 'this title is wayyyy to long' }
36
- it { errors.must_equal ["is not 10 characters"] }
37
- end
38
-
39
- context 'when value is nil' do
40
- let(:value) { nil }
41
- it { errors.must_equal ["is not 10 characters"] }
42
- end
43
- end
44
-
45
- describe 'format' do
46
- let(:options) {{:format => /^\d+$/}}
47
-
48
- context 'when value matches pattern' do
49
- let(:value) { 123 }
50
- it { errors.must_be_nil }
51
- end
52
-
53
- context 'when value does not match' do
54
- let(:value) { 'abc' }
55
- it { errors.must_equal ["is not valid"] }
56
- end
57
-
58
- context 'when value is nil' do
59
- let(:value) { nil }
60
- it { errors.must_equal ["is not valid"] }
61
- end
62
- end
63
-
64
- describe 'greater_than' do
65
- let(:options) {{:greater_than => 10}}
66
-
67
- context 'when value is greater than option' do
68
- let(:value) { 11 }
69
- it { errors.must_be_nil }
70
- end
71
-
72
- context 'when float is greater than option' do
73
- let(:value) { 11.123 }
74
- it { errors.must_be_nil }
75
- end
76
-
77
- context 'when value is equal to option' do
78
- let(:value) { 10 }
79
- it { errors.must_equal ["must be greater than 10"] }
80
- end
81
-
82
- context 'when value is less than option' do
83
- let(:value) { 9 }
84
- it { errors.must_equal ["must be greater than 10"] }
85
- end
86
-
87
- context 'when value is string' do
88
- let(:value) { 'abc' }
89
- it { errors.must_equal ["must be greater than 10"] }
90
- end
91
- end
92
-
93
- describe 'greater_than_or_equal_to' do
94
- let(:options) {{:greater_than_or_equal_to => 10}}
95
-
96
- context 'when value is greater than option' do
97
- let(:value) { 11 }
98
- it { errors.must_be_nil }
99
- end
100
-
101
- context 'when float value is greater than option' do
102
- let(:value) { 11.123 }
103
- it { errors.must_be_nil }
104
- end
105
-
106
- context 'when value is equal to option' do
107
- let(:value) { 10 }
108
- it { errors.must_be_nil }
109
- end
110
-
111
- context 'when value is less than option' do
112
- let(:value) { 9 }
113
- it { errors.must_equal ["must be greater than or equal to 10"] }
114
- end
115
-
116
- context 'when value is a string' do
117
- let(:value) { 'abc' }
118
- it { errors.must_equal ["must be greater than or equal to 10"] }
119
- end
120
- end
121
-
122
- describe 'less_than' do
123
- let(:options) {{:less_than => 10}}
124
-
125
- context 'when value is less than option' do
126
- let(:value) { 9 }
127
- it { errors.must_be_nil }
128
- end
129
-
130
- context 'when float value is less than option' do
131
- let(:value) { 8.123 }
132
- it { errors.must_be_nil }
133
- end
134
-
135
- context 'when value is equal to option' do
136
- let(:value) { 10 }
137
- it { errors.must_equal ["must be less than 10"] }
138
- end
139
-
140
- context 'when value is greater than option' do
141
- let(:value) { 11 }
142
- it { errors.must_equal ["must be less than 10"] }
143
- end
144
-
145
- context 'when value is a string' do
146
- let(:value) { 'abc' }
147
- it { errors.must_equal ["must be less than 10"] }
148
- end
149
- end
150
-
151
- describe 'less_than_or_equal_to' do
152
- let(:options) {{:less_than_or_equal_to => 10}}
153
-
154
- context 'when value is less than option' do
155
- let(:value) { 9 }
156
- it { errors.must_be_nil }
157
- end
158
-
159
- context 'when float value is less than option' do
160
- let(:value) { 8.123 }
161
- it { errors.must_be_nil }
162
- end
163
-
164
- context 'when value is equal to option' do
165
- let(:value) { 10 }
166
- it { errors.must_be_nil }
167
- end
168
-
169
- context 'when value is greater than option' do
170
- let(:value) { 11 }
171
- it { errors.must_equal ["must be less than or equal to 10"] }
172
- end
173
-
174
- context 'when value is a string' do
175
- let(:value) { 'abc' }
176
- it { errors.must_equal ["must be less than or equal to 10"] }
177
- end
178
- end
179
-
180
- describe 'inclusion' do
181
- context 'when set is array' do
182
- let(:options) {{:inclusion => %w(cat dog bird rabbit)}}
183
-
184
- context 'when value is in set' do
185
- let(:value) { 'cat' }
186
- it { errors.must_be_nil }
187
- end
188
-
189
- context 'when value is not in set' do
190
- let(:value) { 'goat' }
191
- it { errors.must_equal ["is not in set: [\"cat\", \"dog\", \"bird\", \"rabbit\"]"]}
192
- end
193
- end
194
-
195
- context 'when set is range' do
196
- let(:options) {{:inclusion => 10..20}}
197
-
198
- context 'when value is in set' do
199
- let(:value) { 11 }
200
- it { errors.must_be_nil }
201
- end
202
-
203
- context 'when value is not in set' do
204
- let(:value) { 5 }
205
- it { errors.must_equal ["is not in set: 10..20"] }
206
- end
207
- end
208
- end
209
-
210
- describe 'integer' do
211
- let(:options) {{:integer => true}}
212
-
213
- context 'when value is integer' do
214
- let(:value) { 123 }
215
- it { errors.must_be_nil }
216
- end
217
-
218
- context 'when value is float' do
219
- let(:value) { 123.4 }
220
- it { errors.must_equal ["is not a number"]}
221
- end
222
-
223
- context 'when value is string' do
224
- let(:value) { 'abc' }
225
- it { errors.must_equal ["is not a number"]}
226
- end
227
-
228
- context 'when value is nil' do
229
- let(:value) { nil }
230
- it { errors.must_equal ["is not a number"]}
231
- end
232
-
233
- context 'when value is everything else' do
234
- let(:value) { ['array'] }
235
- it { errors.must_equal ["is not a number"]}
236
- end
237
- end
238
-
239
- describe 'length_range' do
240
- context 'when range is array' do
241
- let(:options) {{:length_range => [5, 8, 15]}}
242
-
243
- context 'when value length is in array' do
244
- let(:value) { 'abcde' }
245
- it { errors.must_be_nil }
246
- end
247
-
248
- context 'when value length is not in array' do
249
- let(:value) { 'abc' }
250
- it { errors.must_equal ["is too short or too long"] }
251
- end
252
-
253
- context 'when value length is nil' do
254
- let(:value) { nil }
255
- it { errors.must_equal ["is too short or too long"] }
256
- end
257
- end
258
-
259
- context 'when range is range' do
260
- let(:options) {{:length_range => 5..10}}
261
-
262
- context 'when value length is in range' do
263
- let(:value) { 'abcdef' }
264
- it { errors.must_be_nil }
265
- end
266
-
267
- context 'when value length is not in range' do
268
- let(:value) { 'abc' }
269
- it { errors.must_equal ["is too short or too long"] }
270
- end
271
-
272
- context 'when value length is nil' do
273
- let(:value) { nil }
274
- it { errors.must_equal ["is too short or too long"] }
275
- end
276
- end
277
- end
278
-
279
- describe 'max_length' do
280
- let(:options) {{:max_length => 10}}
281
-
282
- context 'when value length is less than max' do
283
- let(:value) { 'abc' }
284
- it { errors.must_be_nil }
285
- end
286
-
287
- context 'when value is too long' do
288
- let(:value) { 'abcdefghijklmnop' }
289
- it { errors.must_equal ["is longer than 10 characters"] }
290
- end
291
-
292
- context 'when value is nil' do
293
- let(:value) { nil }
294
- it { errors.must_equal ["is longer than 10 characters"] }
295
- end
296
- end
297
-
298
- describe 'min_length' do
299
- let(:options) {{:min_length => 5}}
300
-
301
- context 'when value length is greater than min' do
302
- let(:value) { 'abcdefg' }
303
- it { errors.must_be_nil }
304
- end
305
-
306
- context 'when value is too short' do
307
- let(:value) { 'abcd' }
308
- it { errors.must_equal ["is shorter than 5 characters"] }
309
- end
310
-
311
- context 'when value is nil' do
312
- let(:value) { nil }
313
- it { errors.must_equal ["is shorter than 5 characters"] }
314
- end
315
- end
316
-
317
- describe 'not_null' do
318
- let(:options) {{:not_null => 5}}
319
-
320
- context 'when value is not null' do
321
- let(:value) { 123 }
322
- it { errors.must_be_nil }
323
- end
324
-
325
- context 'when value is nil' do
326
- let(:value) { nil }
327
- it { errors.must_equal ["is not present"]}
328
- end
329
- end
330
-
331
- describe 'numeric' do
332
- let(:options) {{:numeric => true}}
333
-
334
- context 'when value is integer' do
335
- let(:value) { 123 }
336
- it { errors.must_be_nil }
337
- end
338
-
339
- context 'when value is float' do
340
- let(:value) { 123.4 }
341
- it { errors.must_be_nil }
342
- end
343
-
344
- context 'when value is string' do
345
- let(:value) { 'abc' }
346
- it { errors.must_equal ["is not a number"]}
347
- end
348
-
349
- context 'when value is nil' do
350
- let(:value) { nil }
351
- it { errors.must_equal ["is not a number"]}
352
- end
353
-
354
- context 'when value is everything else' do
355
- let(:value) { ['array'] }
356
- it { errors.must_equal ["is not a number"]}
357
- end
358
- end
359
-
360
- describe 'presence' do
361
- let(:options) {{:presence => true}}
362
-
363
- context 'when value is not null' do
364
- let(:value) { 123 }
365
- it { errors.must_be_nil }
366
- end
367
-
368
- context 'when value is nil' do
369
- let(:value) { nil }
370
- it { errors.must_equal ["is not present"]}
371
- end
372
-
373
- context 'when value is empty string' do
374
- let(:value) { '' }
375
- it { errors.must_equal ["is not present"]}
376
- end
377
-
378
- context 'when value is string of whitespace' do
379
- let(:value) { ' ' }
380
- it { errors.must_equal ["is not present"]}
381
- end
382
-
383
- context 'when value is empty array' do
384
- let(:value) { [] }
385
- it { errors.must_equal ["is not present"]}
386
- end
387
-
388
- context 'when value is empty hash' do
389
- let(:value) {{}}
390
- it { errors.must_equal ["is not present"]}
391
- end
392
- end
393
- end
394
-
395
- describe 'conditions' do
396
- describe 'with_options' do
397
- let(:conditions) {{:if => true}}
398
- let(:validator_class) do
399
- klass = Class.new{
400
- include Veto.validator
401
-
402
- def create_errors
403
- errors.add(:base, "error")
404
- end
405
- }
406
- klass.with_options conditions do
407
- validate :create_errors
408
- end
409
- klass
410
- end
411
-
412
- context 'when conditions pass' do
413
- let(:conditions) {{:if => true}}
414
-
415
- it 'performs validations within block' do
416
- validator.valid?.must_equal false
417
- validator.errors.full_messages.must_equal ['base error']
418
- end
419
- end
420
-
421
- context 'when conditions fail' do
422
- let(:conditions) {{:if => false}}
423
-
424
- it 'does not perform validations within block' do
425
- validator.valid?
426
- validator.errors.must_be_empty
427
- end
428
- end
429
- end
430
-
431
- describe 'validates' do
432
- let(:entity){ stub(:title => nil, :name => 'John') }
433
- let(:options) {{}}
434
- let(:validator_class) do
435
- klass = Class.new{
436
- include Veto.validator
437
- }
438
-
439
- klass.validates :title, options
440
- klass
441
- end
442
-
443
- context 'when outer conditions pass' do
444
- context 'when inner conditions pass' do
445
- let(:options) {{:not_null => {:with => true, :if => true}, :exact_length => {:with => 4, :if => true}, :if => true}}
446
-
447
- it 'performs validation' do
448
- validator.valid?.must_equal false
449
- validator.errors.full_messages.must_equal ["title is not present", "title is not 4 characters"]
450
- end
451
- end
452
-
453
- context 'when inner conditions fail' do
454
- let(:options) {{:not_null => {:with => true, :if => false}, :exact_length => {:with => 4, :if => true}, :if => true}}
455
-
456
- it 'skips individual validator' do
457
- validator.valid?.must_equal false
458
- validator.errors.full_messages.must_equal ["title is not 4 characters"]
459
- end
460
- end
461
- end
462
-
463
- context 'when outer conditions fail' do
464
- let(:options) {{:not_null => {:with => true, :if => true}, :exact_length => {:with => 4, :if => true}, :if => false}}
465
-
466
- it 'skips validates block' do
467
- validator.valid?.must_equal true
468
- end
469
- end
470
- end
471
- end
472
-
473
- describe 'custom attribute validator class' do
474
- let(:entity){ stub(:email_address => 'blah') }
475
- let(:validator_class) do
476
- klass = Class.new{
477
- include Veto.validator
478
-
479
- class EmailValidator < ::Veto::AttributeValidator
480
- def validate entity, attribute, value, errors, options={}
481
- unless value.to_s =~ /^([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})$/i
482
- errors.add(attribute, "is not a valid email address")
483
- end
484
- end
485
- end
486
-
487
- validates :email_address, :email => true
488
- }
489
- end
490
-
491
- it 'uses custom validator' do
492
- validator.valid?.must_equal false
493
- validator.errors.full_messages.must_equal ["email_address is not a valid email address"]
494
- end
495
- end
496
-
497
- describe 'validator descendents/inheritence' do
498
- let(:validator_class) do
499
- Class.new{
500
- include Veto.validator
501
-
502
- validate :create_superclass_error
503
-
504
- def create_superclass_error
505
- errors.add(:base, "superclass error")
506
- end
507
- }
508
- end
509
-
510
- context 'when validator is subclassed' do
511
- let(:validator_subclass) do
512
- Class.new(validator_class){
513
-
514
- validate :create_subclass_error
515
-
516
- def create_subclass_error
517
- errors.add(:base, "subclass error")
518
- end
519
- }
520
- end
521
-
522
- it 'inherits superclass validation rules' do
523
- validator = validator_subclass.new(entity)
524
-
525
- validator.valid?
526
- validator.errors.must_equal({:base=>["superclass error", "subclass error"]})
527
- end
528
- end
529
- end
530
- end
@@ -1,37 +0,0 @@
1
- require 'spec_helper'
2
- require 'veto/validators/exact_length_validator'
3
- require 'veto/errors'
4
-
5
- describe Veto::ExactLengthValidator do
6
- let(:errors){ Veto::Errors.new }
7
- let(:entity) { Object.new }
8
- let(:attribute) { :title }
9
- let(:value) { 'blahblah' }
10
- let(:options) {{:with => 10}}
11
- let(:validator){ Veto::ExactLengthValidator.new(stub, stub) }
12
- let(:result){ validator.validate(entity, attribute, value, errors, options) }
13
-
14
- describe '#validate' do
15
- before { result }
16
-
17
- context 'when value exact length' do
18
- let(:value) { 'abcdefghij' }
19
- it { errors[:title].must_be_nil }
20
- end
21
-
22
- context 'when value is too short' do
23
- let(:value) { 'short' }
24
- it { errors[:title].must_equal ["is not 10 characters"] }
25
- end
26
-
27
- context 'when value is too long' do
28
- let(:value) { 'this title is wayyyy to long' }
29
- it { errors[:title].must_equal ["is not 10 characters"] }
30
- end
31
-
32
- context 'when value is nil' do
33
- let(:value) { nil }
34
- it { errors[:title].must_equal ["is not 10 characters"] }
35
- end
36
- end
37
- end
@@ -1,32 +0,0 @@
1
- require 'spec_helper'
2
- require 'veto/validators/format_validator'
3
- require 'veto/errors'
4
-
5
- describe Veto::FormatValidator do
6
- let(:errors){ Veto::Errors.new }
7
- let(:entity) { Object.new }
8
- let(:attribute) { :title }
9
- let(:value) { 'blahblah' }
10
- let(:options) {{:with => /^\d+$/}}
11
- let(:validator){ Veto::FormatValidator.new(stub, stub) }
12
- let(:result){ validator.validate(entity, attribute, value, errors, options) }
13
-
14
- describe '#validate' do
15
- before { result }
16
-
17
- context 'when value matches pattern' do
18
- let(:value) { 123 }
19
- it { errors[:title].must_be_nil }
20
- end
21
-
22
- context 'when value does not match' do
23
- let(:value) { 'abc' }
24
- it { errors[:title].must_equal ["is not valid"] }
25
- end
26
-
27
- context 'when value is nil' do
28
- let(:value) { nil }
29
- it { errors[:title].must_equal ["is not valid"] }
30
- end
31
- end
32
- end
@@ -1,45 +0,0 @@
1
- require 'spec_helper'
2
- require 'veto/validators/inclusion_validator'
3
- require 'veto/errors'
4
-
5
- describe Veto::InclusionValidator do
6
- let(:errors){ Veto::Errors.new }
7
- let(:entity) { Object.new }
8
- let(:attribute) { :title }
9
- let(:value) { 'blahblah' }
10
- let(:options) {{:in => %w(cat dog bird rabbit)}}
11
- let(:validator){ Veto::InclusionValidator.new(stub, stub) }
12
- let(:result){ validator.validate(entity, attribute, value, errors, options) }
13
-
14
- describe '#validate' do
15
- before { result }
16
-
17
- context 'when set is array' do
18
- let(:options) {{:in => %w(cat dog bird rabbit)}}
19
-
20
- context 'when value is in set' do
21
- let(:value) { 'cat' }
22
- it { errors[:title].must_be_nil }
23
- end
24
-
25
- context 'when value is not in set' do
26
- let(:value) { 'goat' }
27
- it { errors[:title].must_equal ["is not in set: [\"cat\", \"dog\", \"bird\", \"rabbit\"]"]}
28
- end
29
- end
30
-
31
- context 'when set is range' do
32
- let(:options) {{:in => (10..20)}}
33
-
34
- context 'when value is in set' do
35
- let(:value) { 11 }
36
- it { errors[:title].must_be_nil }
37
- end
38
-
39
- context 'when value is not in set' do
40
- let(:value) { 5 }
41
- it { errors[:title].must_equal ["is not in set: 10..20"] }
42
- end
43
- end
44
- end
45
- end
@@ -1,42 +0,0 @@
1
- require 'spec_helper'
2
- require 'veto/validators/integer_validator'
3
- require 'veto/errors'
4
-
5
- describe Veto::IntegerValidator do
6
- let(:errors){ Veto::Errors.new }
7
- let(:entity) { Object.new }
8
- let(:attribute) { :title }
9
- let(:value) { 'blahblah' }
10
- let(:options) {{:with => {}}}
11
- let(:validator){ Veto::IntegerValidator.new(stub, stub) }
12
- let(:result){ validator.validate(entity, attribute, value, errors, options) }
13
-
14
- describe '#validate' do
15
- before { result }
16
-
17
- context 'when value is integer' do
18
- let(:value) { 123 }
19
- it { errors[:title].must_be_nil }
20
- end
21
-
22
- context 'when value is float' do
23
- let(:value) { 123.4 }
24
- it { errors[:title].must_equal ["is not a number"]}
25
- end
26
-
27
- context 'when value is string' do
28
- let(:value) { 'abc' }
29
- it { errors[:title].must_equal ["is not a number"]}
30
- end
31
-
32
- context 'when value is nil' do
33
- let(:value) { nil }
34
- it { errors[:title].must_equal ["is not a number"]}
35
- end
36
-
37
- context 'when value is everything else' do
38
- let(:value) { ['array'] }
39
- it { errors[:title].must_equal ["is not a number"]}
40
- end
41
- end
42
- end