detox 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 (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