detox 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +7 -0
  2. data/.coveralls.yml +1 -0
  3. data/.gitignore +19 -0
  4. data/.travis.yml +7 -0
  5. data/Gemfile +4 -0
  6. data/LICENSE +20 -0
  7. data/README.md +40 -0
  8. data/Rakefile +11 -0
  9. data/detox.gemspec +27 -0
  10. data/gemfiles/activemodel_3_2_x.gemfile +5 -0
  11. data/gemfiles/activemodel_4_0_x.gemfile +5 -0
  12. data/lib/active_model/validations/absence.rb +19 -0
  13. data/lib/detox.rb +11 -0
  14. data/lib/detox/array_validity.rb +23 -0
  15. data/lib/detox/locales/en.yml +21 -0
  16. data/lib/detox/locales/ja.yml +21 -0
  17. data/lib/detox/validations/all.rb +41 -0
  18. data/lib/detox/validations/any.rb +57 -0
  19. data/lib/detox/validations/ordering.rb +34 -0
  20. data/lib/detox/validations/possession.rb +30 -0
  21. data/lib/detox/validity_broker.rb +55 -0
  22. data/lib/detox/version.rb +4 -0
  23. data/spec/detox/array_validity_spec.rb +214 -0
  24. data/spec/detox/validations/all_absence_spec.rb +147 -0
  25. data/spec/detox/validations/all_acceptance_spec.rb +352 -0
  26. data/spec/detox/validations/all_exclusion_spec.rb +137 -0
  27. data/spec/detox/validations/all_format_spec.rb +351 -0
  28. data/spec/detox/validations/all_inclusion_spec.rb +352 -0
  29. data/spec/detox/validations/all_length_spec.rb +388 -0
  30. data/spec/detox/validations/all_numericality_spec.rb +369 -0
  31. data/spec/detox/validations/all_presence_spec.rb +159 -0
  32. data/spec/detox/validations/any_absence_spec.rb +597 -0
  33. data/spec/detox/validations/any_acceptance_spec.rb +597 -0
  34. data/spec/detox/validations/any_exclusion_spec.rb +597 -0
  35. data/spec/detox/validations/any_format_spec.rb +597 -0
  36. data/spec/detox/validations/any_inclusion_spec.rb +597 -0
  37. data/spec/detox/validations/any_length_spec.rb +597 -0
  38. data/spec/detox/validations/any_numericality_spec.rb +609 -0
  39. data/spec/detox/validations/any_presence_spec.rb +596 -0
  40. data/spec/detox/validations/any_validator_check_validity_spec.rb +126 -0
  41. data/spec/detox/validations/ordering_spec.rb +452 -0
  42. data/spec/detox/validations/possession_spec.rb +263 -0
  43. data/spec/detox/validity_broker_spec.rb +126 -0
  44. data/spec/spec_helper.rb +24 -0
  45. data/spec/test_class/all_absence_test.rb +14 -0
  46. data/spec/test_class/all_acceptance_test.rb +27 -0
  47. data/spec/test_class/all_exclusion_test.rb +15 -0
  48. data/spec/test_class/all_format_test.rb +26 -0
  49. data/spec/test_class/all_inclusion_test.rb +27 -0
  50. data/spec/test_class/all_length_test.rb +28 -0
  51. data/spec/test_class/all_numericality_test.rb +33 -0
  52. data/spec/test_class/all_presence_test.rb +14 -0
  53. data/spec/test_class/any_absence_test.rb +33 -0
  54. data/spec/test_class/any_acceptance_test.rb +34 -0
  55. data/spec/test_class/any_exclusion_test.rb +34 -0
  56. data/spec/test_class/any_format_test.rb +34 -0
  57. data/spec/test_class/any_inclusion_test.rb +33 -0
  58. data/spec/test_class/any_length_test.rb +33 -0
  59. data/spec/test_class/any_numericality_test.rb +35 -0
  60. data/spec/test_class/any_presence_test.rb +33 -0
  61. data/spec/test_class/array_validity_test.rb +6 -0
  62. data/spec/test_class/model_base.rb +11 -0
  63. data/spec/test_class/ordering_test.rb +33 -0
  64. data/spec/test_class/possession_test.rb +22 -0
  65. metadata +219 -0
@@ -0,0 +1,137 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/all_exclusion_test"
5
+
6
+ describe Detox::Validations::AllExclusionValidator do
7
+ describe "validation result" do
8
+ let(:test) { AllExclusionTest.new }
9
+
10
+ context "when apply to nil" do
11
+ it "is valid" do
12
+ test.values = nil
13
+ expect(test.valid?).to eq true
14
+ end
15
+ end
16
+
17
+ context "when apply to Array" do
18
+ context "when apply to [] (empty)" do
19
+ it "is valid" do
20
+ test.values = []
21
+ expect(test.valid?).to eq true
22
+ end
23
+ end
24
+ context "when apply to ['1', '2', '3'] (valid values)" do
25
+ it "is valid" do
26
+ test.values = ["1", "2", "3"]
27
+ expect(test.valid?).to eq true
28
+ end
29
+ end
30
+ context "when apply to ['1', '2', '4'] (contains invalid values)" do
31
+ it "is invalid" do
32
+ test.values = ["1", "2", "4"]
33
+ expect(test.valid?).to eq false
34
+ end
35
+ end
36
+ end
37
+
38
+ context "when apply to Hash" do
39
+ context "when apply to {} (empty)" do
40
+ it "is valid" do
41
+ test.values = {}
42
+ expect(test.valid?).to eq true
43
+ end
44
+ end
45
+ context "when apply to { :a => '1', :b => '2', :c => '3' } (valid values)" do
46
+ it "is valid" do
47
+ test.values = { :a => '1', :b => '2', :c => '3' }
48
+ expect(test.valid?).to eq true
49
+ end
50
+ end
51
+ context "when apply to { :a => '1', :b => '2', :c => '4' } (contains invalid values)" do
52
+ it "is invalid" do
53
+ test.values = { :a => '1', :b => '2', :c => '4' }
54
+ expect(test.valid?).to eq false
55
+ end
56
+ end
57
+ end
58
+ end
59
+
60
+ describe "error message" do
61
+ context "when without message option" do
62
+ let(:test) { AllExclusionTest.new }
63
+
64
+ context "when valid" do
65
+ before do
66
+ test.values = ['1', '2', '3']
67
+ test.valid?
68
+ end
69
+
70
+ it "has no message" do
71
+ expect(test.errors.present?).to eq false
72
+ end
73
+ end
74
+ context "when invalid" do
75
+ before do
76
+ test.values = ['1', '2', '4']
77
+ test.valid?
78
+ end
79
+
80
+ it "has 1 error message" do
81
+ expect(test.errors.empty?).to eq false
82
+ expect(test.errors.size).to eq 1
83
+ end
84
+ it "error message is associated with values attribute" do
85
+ expect(test.errors.include?(:values)).to eq true
86
+ end
87
+ it %q{error messsage is "Values contains value that is included in the list"} do
88
+ expect(test.errors.full_messages.first).to eq "Values contains value that is included in the list"
89
+ end
90
+ end
91
+ context "when using i18n" do
92
+ before do
93
+ @base_locale = I18n.locale
94
+ I18n.locale = :ja
95
+ test.values = ['1', '2', '4']
96
+ test.valid?
97
+ end
98
+ after do
99
+ I18n.locale = @base_locale
100
+ end
101
+ it "error messsage is translated" do
102
+ expect(test.errors.full_messages.first).to eq "Values にはリストに含まれている値が含まれています"
103
+ end
104
+ end
105
+ end
106
+
107
+ context "when given message option" do
108
+ let(:test) { AllExclusionTestWithMessageOption.new }
109
+
110
+ context "when invalid" do
111
+ before do
112
+ test.values = ['1', '2', '4']
113
+ test.valid?
114
+ end
115
+ it "error messsage uses given message" do
116
+ expect(test.errors.full_messages.first).to eq 'Values is invalid'
117
+ end
118
+ end
119
+ context "when using i18n" do
120
+ before do
121
+ @base_locale = I18n.locale
122
+ I18n.locale = :ja
123
+ test.values = ['1', '2', '4']
124
+ test.valid?
125
+ end
126
+ after do
127
+ I18n.locale = @base_locale
128
+ end
129
+ it "error messsage is not translated" do
130
+ expect(test.errors.full_messages.first).to eq 'Values is invalid'
131
+ end
132
+ end
133
+ end
134
+ end
135
+ end
136
+
137
+
@@ -0,0 +1,351 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/all_format_test"
5
+
6
+ describe Detox::Validations::AllFormatValidator do
7
+ describe "validation result (pattern is /\\A\\w+\\z/)" do
8
+ context "when given no additional option" do# {{{
9
+ let(:test) { AllFormatTest.new }
10
+
11
+ context "when apply to nil" do
12
+ it "is valid" do
13
+ test.words = nil
14
+ expect(test.valid?).to eq true
15
+ end
16
+ end
17
+
18
+ context "when apply to Array" do# {{{
19
+ context "when apply to [] (empty)" do
20
+ it "is valid" do
21
+ test.words = []
22
+ expect(test.valid?).to eq true
23
+ end
24
+ end
25
+ context "when apply to ['foo', 'bar', 'baz'] (valid values)" do
26
+ it "is valid" do
27
+ test.words = ["foo", "bar", "baz"]
28
+ expect(test.valid?).to eq true
29
+ end
30
+ end
31
+ context "when apply to ['foo', 'bar', 'b@z'] (contains invalid word)" do
32
+ it "is invalid" do
33
+ test.words = ["foo", "bar", "b@z"]
34
+ expect(test.valid?).to eq false
35
+ end
36
+ end
37
+ context "when apply to ['foo', 'bar', nil] (contains nil)" do
38
+ it "is invalid" do
39
+ test.words = ["foo", "bar", nil]
40
+ expect(test.valid?).to eq false
41
+ end
42
+ end
43
+ context "when apply to ['foo', 'bar', ''] (contains empty)" do
44
+ it "is invalid" do
45
+ test.words = ["foo", "bar", ""]
46
+ expect(test.valid?).to eq false
47
+ end
48
+ end
49
+ context "when apply to ['foo', 'bar', ' '] (contains blank)" do
50
+ it "is invalid" do
51
+ test.words = ["foo", "bar", " "]
52
+ expect(test.valid?).to eq false
53
+ end
54
+ end
55
+ end# }}}
56
+
57
+ context "when apply to Hash" do# {{{
58
+ context "when apply to {} (empty)" do
59
+ it "is valid" do
60
+ test.words = {}
61
+ expect(test.valid?).to eq true
62
+ end
63
+ end
64
+ context "when apply to { :a => 'foo', :b => 'bar', :c => 'baz' } (valid values)" do
65
+ it "is valid" do
66
+ test.words = { :a => 'foo', :b => 'bar', :c => 'baz' }
67
+ expect(test.valid?).to eq true
68
+ end
69
+ end
70
+ context "when apply to { :a => 'foo', :b => 'bar', :c => 'b@z' } (contains invalid word)" do
71
+ it "is invalid" do
72
+ test.words = { :a => 'foo', :b => 'bar', :c => 'b@z' }
73
+ expect(test.valid?).to eq false
74
+ end
75
+ end
76
+ context "when apply to { :a => 'foo', :b => 'bar', :c => nil } (contains nil)" do
77
+ it "is invalid" do
78
+ test.words = { :a => 'foo', :b => 'bar', :c => nil }
79
+ expect(test.valid?).to eq false
80
+ end
81
+ end
82
+ context "when apply to { :a => 'foo', :b => 'bar', :c => '' } (contains empty)" do
83
+ it "is invalid" do
84
+ test.words = { :a => 'foo', :b => 'bar', :c => '' }
85
+ expect(test.valid?).to eq false
86
+ end
87
+ end
88
+ context "when apply to { :a => 'foo', :b => 'bar', :c => ' ' } (contains blank)" do
89
+ it "is invalid" do
90
+ test.words = { :a => 'foo', :b => 'bar', :c => ' ' }
91
+ expect(test.valid?).to eq false
92
+ end
93
+ end
94
+ end# }}}
95
+ end# }}}
96
+
97
+ context "when given ignore_nil_value option" do# {{{
98
+ let(:test) { AllFormatTestWithIgnoreNilValueOption.new }
99
+
100
+ context "when apply to nil" do
101
+ it "is valid" do
102
+ test.words = nil
103
+ expect(test.valid?).to eq true
104
+ end
105
+ end
106
+
107
+ context "when apply to Array" do# {{{
108
+ context "when apply to [] (empty)" do
109
+ it "is valid" do
110
+ test.words = []
111
+ expect(test.valid?).to eq true
112
+ end
113
+ end
114
+ context "when apply to ['foo', 'bar', 'baz'] (valid values)" do
115
+ it "is valid" do
116
+ test.words = ["foo", "bar", "baz"]
117
+ expect(test.valid?).to eq true
118
+ end
119
+ end
120
+ context "when apply to ['foo', 'bar', 'b@z'] (contains invalid word)" do
121
+ it "is invalid" do
122
+ test.words = ["foo", "bar", "b@z"]
123
+ expect(test.valid?).to eq false
124
+ end
125
+ end
126
+ context "when apply to ['foo', 'bar', nil] (contains nil)" do
127
+ it "is valid" do
128
+ test.words = ["foo", "bar", nil]
129
+ expect(test.valid?).to eq true
130
+ end
131
+ end
132
+ context "when apply to ['foo', 'bar', ''] (contains empty)" do
133
+ it "is invalid" do
134
+ test.words = ["foo", "bar", ""]
135
+ expect(test.valid?).to eq false
136
+ end
137
+ end
138
+ context "when apply to ['foo', 'bar', ' '] (contains blank)" do
139
+ it "is invalid" do
140
+ test.words = ["foo", "bar", " "]
141
+ expect(test.valid?).to eq false
142
+ end
143
+ end
144
+ end# }}}
145
+
146
+ context "when apply to Hash" do# {{{
147
+ context "when apply to {} (empty)" do
148
+ it "is valid" do
149
+ test.words = {}
150
+ expect(test.valid?).to eq true
151
+ end
152
+ end
153
+ context "when apply to { :a => 'foo', :b => 'bar', :c => 'baz' } (valid values)" do
154
+ it "is valid" do
155
+ test.words = { :a => 'foo', :b => 'bar', :c => 'baz' }
156
+ expect(test.valid?).to eq true
157
+ end
158
+ end
159
+ context "when apply to { :a => 'foo', :b => 'bar', :c => 'b@z' } (contains invalid word)" do
160
+ it "is invalid" do
161
+ test.words = { :a => 'foo', :b => 'bar', :c => 'b@z' }
162
+ expect(test.valid?).to eq false
163
+ end
164
+ end
165
+ context "when apply to { :a => 'foo', :b => 'bar', :c => nil } (contains nil)" do
166
+ it "is valid" do
167
+ test.words = { :a => 'foo', :b => 'bar', :c => nil }
168
+ expect(test.valid?).to eq true
169
+ end
170
+ end
171
+ context "when apply to { :a => 'foo', :b => 'bar', :c => '' } (contains empty)" do
172
+ it "is invalid" do
173
+ test.words = { :a => 'foo', :b => 'bar', :c => '' }
174
+ expect(test.valid?).to eq false
175
+ end
176
+ end
177
+ context "when apply to { :a => 'foo', :b => 'bar', :c => ' ' } (contains blank)" do
178
+ it "is invalid" do
179
+ test.words = { :a => 'foo', :b => 'bar', :c => ' ' }
180
+ expect(test.valid?).to eq false
181
+ end
182
+ end
183
+ end# }}}
184
+ end# }}}
185
+
186
+ context "when given ignore_blank_value option" do# {{{
187
+ let(:test) { AllFormatTestWithIgnoreBlankValueOption.new }
188
+
189
+ context "when apply to nil" do
190
+ it "is valid" do
191
+ test.words = nil
192
+ expect(test.valid?).to eq true
193
+ end
194
+ end
195
+
196
+ context "when apply to Array" do# {{{
197
+ context "when apply to [] (empty)" do
198
+ it "is valid" do
199
+ test.words = []
200
+ expect(test.valid?).to eq true
201
+ end
202
+ end
203
+ context "when apply to ['foo', 'bar', 'baz'] (valid values)" do
204
+ it "is valid" do
205
+ test.words = ["foo", "bar", "baz"]
206
+ expect(test.valid?).to eq true
207
+ end
208
+ end
209
+ context "when apply to ['foo', 'bar', 'b@z'] (contains invalid word)" do
210
+ it "is invalid" do
211
+ test.words = ["foo", "bar", "b@z"]
212
+ expect(test.valid?).to eq false
213
+ end
214
+ end
215
+ context "when apply to ['foo', 'bar', nil] (contains nil)" do
216
+ it "is valid" do
217
+ test.words = ["foo", "bar", nil]
218
+ expect(test.valid?).to eq true
219
+ end
220
+ end
221
+ context "when apply to ['foo', 'bar', ''] (contains empty)" do
222
+ it "is valid" do
223
+ test.words = ["foo", "bar", ""]
224
+ expect(test.valid?).to eq true
225
+ end
226
+ end
227
+ context "when apply to ['foo', 'bar', ' '] (contains blank)" do
228
+ it "is valid" do
229
+ test.words = ["foo", "bar", " "]
230
+ expect(test.valid?).to eq true
231
+ end
232
+ end
233
+ end# }}}
234
+
235
+ context "when apply to Hash" do# {{{
236
+ context "when apply to {} (empty)" do
237
+ it "is valid" do
238
+ test.words = {}
239
+ expect(test.valid?).to eq true
240
+ end
241
+ end
242
+ context "when apply to { :a => 'foo', :b => 'bar', :c => 'baz' } (valid values)" do
243
+ it "is valid" do
244
+ test.words = { :a => 'foo', :b => 'bar', :c => 'baz' }
245
+ expect(test.valid?).to eq true
246
+ end
247
+ end
248
+ context "when apply to { :a => 'foo', :b => 'bar', :c => 'b@z' } (contains invalid word)" do
249
+ it "is invalid" do
250
+ test.words = { :a => 'foo', :b => 'bar', :c => 'b@z' }
251
+ expect(test.valid?).to eq false
252
+ end
253
+ end
254
+ context "when apply to { :a => 'foo', :b => 'bar', :c => nil } (contains nil)" do
255
+ it "is valid" do
256
+ test.words = { :a => 'foo', :b => 'bar', :c => nil }
257
+ expect(test.valid?).to eq true
258
+ end
259
+ end
260
+ context "when apply to { :a => 'foo', :b => 'bar', :c => '' } (contains empty)" do
261
+ it "is valid" do
262
+ test.words = { :a => 'foo', :b => 'bar', :c => '' }
263
+ expect(test.valid?).to eq true
264
+ end
265
+ end
266
+ context "when apply to { :a => 'foo', :b => 'bar', :c => ' ' } (contains blank)" do
267
+ it "is valid" do
268
+ test.words = { :a => 'foo', :b => 'bar', :c => ' ' }
269
+ expect(test.valid?).to eq true
270
+ end
271
+ end
272
+ end# }}}
273
+ end# }}}
274
+ end
275
+
276
+ describe "error message" do
277
+ context "when witout message option" do# {{{
278
+ let(:test) { AllFormatTest.new }
279
+
280
+ context "when valid" do
281
+ before do
282
+ test.words = ['foo', 'bar', 'baz']
283
+ test.valid?
284
+ end
285
+
286
+ it "has no message" do
287
+ expect(test.errors.present?).to eq false
288
+ end
289
+ end
290
+ context "when invalid" do
291
+ before do
292
+ test.words = ['foo', 'bar', 'b@z']
293
+ test.valid?
294
+ end
295
+
296
+ it "has 1 error message" do
297
+ expect(test.errors.empty?).to eq false
298
+ expect(test.errors.size).to eq 1
299
+ end
300
+ it "error message is associated with words attribute" do
301
+ expect(test.errors.include?(:words)).to eq true
302
+ end
303
+ it "error messsage is 'Words contains invalid format value'" do
304
+ expect(test.errors.full_messages.first).to eq "Words contains invalid format value"
305
+ end
306
+ end
307
+ context "when using i18n" do
308
+ before do
309
+ @base_locale = I18n.locale
310
+ I18n.locale = :ja
311
+ test.words = ['foo', 'bar', 'b@z']
312
+ test.valid?
313
+ end
314
+ after do
315
+ I18n.locale = @base_locale
316
+ end
317
+ it "error messsage is translated" do
318
+ expect(test.errors.full_messages.first).to eq "Words には不正な形式の値が含まれています"
319
+ end
320
+ end
321
+ end# }}}
322
+
323
+ context "when given message option" do# {{{
324
+ let(:test) { AllFormatTestWithMessageOption.new }
325
+
326
+ context "when invalid" do
327
+ before do
328
+ test.words = ['foo', 'bar', 'b@z']
329
+ test.valid?
330
+ end
331
+ it "error messsage uses given message" do
332
+ expect(test.errors.full_messages.first).to eq 'Words is invalid'
333
+ end
334
+ end
335
+ context "when using i18n" do
336
+ before do
337
+ @base_locale = I18n.locale
338
+ I18n.locale = :ja
339
+ test.words = ['foo', 'bar', 'b@z']
340
+ test.valid?
341
+ end
342
+ after do
343
+ I18n.locale = @base_locale
344
+ end
345
+ it "error messsage is not translated" do
346
+ expect(test.errors.full_messages.first).to eq 'Words is invalid'
347
+ end
348
+ end
349
+ end# }}}
350
+ end
351
+ end