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,352 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/all_inclusion_test"
5
+
6
+ describe Detox::Validations::AllInclusionValidator do
7
+ describe "validation result" do
8
+ context "when given no additional option" do# {{{
9
+ let(:test) { AllInclusionTest.new }
10
+
11
+ context "when apply to nil" do
12
+ it "is valid" do
13
+ test.values = 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.values = []
22
+ expect(test.valid?).to eq true
23
+ end
24
+ end
25
+ context "when apply to ['1', '2', '3'] (valid values)" do
26
+ it "is valid" do
27
+ test.values = ["1", "2", "3"]
28
+ expect(test.valid?).to eq true
29
+ end
30
+ end
31
+ context "when apply to ['1', '2', '4'] (contains invalid values)" do
32
+ it "is invalid" do
33
+ test.values = ["1", "2", "4"]
34
+ expect(test.valid?).to eq false
35
+ end
36
+ end
37
+ context "when apply to ['1', '2', nil] (contains nil)" do
38
+ it "is invalid" do
39
+ test.values = ['1', '2', nil]
40
+ expect(test.valid?).to eq false
41
+ end
42
+ end
43
+ context "when apply to ['1', '2', ''] (contains empty)" do
44
+ it "is invalid" do
45
+ test.values = ['1', '2', '']
46
+ expect(test.valid?).to eq false
47
+ end
48
+ end
49
+ context "when apply to ['1', '2', ' '] (contains blank)" do
50
+ it "is invalid" do
51
+ test.values = ['1', '2', ' ']
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.values = {}
61
+ expect(test.valid?).to eq true
62
+ end
63
+ end
64
+ context "when apply to { :a => '1', :b => '2', :c => '3' } (valid values)" do
65
+ it "is valid" do
66
+ test.values = { :a => '1', :b => '2', :c => '3' }
67
+ expect(test.valid?).to eq true
68
+ end
69
+ end
70
+ context "when apply to { :a => '1', :b => '2', :c => '4' } (contains invalid values)" do
71
+ it "is invalid" do
72
+ test.values = { :a => '1', :b => '2', :c => '4' }
73
+ expect(test.valid?).to eq false
74
+ end
75
+ end
76
+ context "when apply to { :a => '1', :b => '2', :c => nil } (contains nil)" do
77
+ it "is invalid" do
78
+ test.values = { :a => '1', :b => '2', :c => nil }
79
+ expect(test.valid?).to eq false
80
+ end
81
+ end
82
+ context "when apply to { :a => '1', :b => '2', :c => '' } (contains empty)" do
83
+ it "is invalid" do
84
+ test.values = { :a => '1', :b => '2', :c => '' }
85
+ expect(test.valid?).to eq false
86
+ end
87
+ end
88
+ context "when apply to { :a => '1', :b => '2', :c => ' ' } (contains blank)" do
89
+ it "is invalid" do
90
+ test.values = { :a => '1', :b => '2', :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) { AllInclusionTestWithIgnoreNilValueOption.new }
99
+
100
+ context "when apply to nil" do
101
+ it "is valid" do
102
+ test.values = 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.values = []
111
+ expect(test.valid?).to eq true
112
+ end
113
+ end
114
+ context "when apply to ['1', '2', '3'] (valid values)" do
115
+ it "is valid" do
116
+ test.values = ["1", "2", "3"]
117
+ expect(test.valid?).to eq true
118
+ end
119
+ end
120
+ context "when apply to ['1', '2', '4'] (contains invalid values)" do
121
+ it "is invalid" do
122
+ test.values = ["1", "2", "4"]
123
+ expect(test.valid?).to eq false
124
+ end
125
+ end
126
+ context "when apply to ['1', '2', nil] (contains nil)" do
127
+ it "is valid" do
128
+ test.values = ['1', '2', nil]
129
+ expect(test.valid?).to eq true
130
+ end
131
+ end
132
+ context "when apply to ['1', '2', ''] (contains empty)" do
133
+ it "is invalid" do
134
+ test.values = ['1', '2', '']
135
+ expect(test.valid?).to eq false
136
+ end
137
+ end
138
+ context "when apply to ['1', '2', ' '] (contains blank)" do
139
+ it "is invalid" do
140
+ test.values = ['1', '2', ' ']
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.values = {}
150
+ expect(test.valid?).to eq true
151
+ end
152
+ end
153
+ context "when apply to { :a => '1', :b => '2', :c => '3' } (valid values)" do
154
+ it "is valid" do
155
+ test.values = { :a => '1', :b => '2', :c => '3' }
156
+ expect(test.valid?).to eq true
157
+ end
158
+ end
159
+ context "when apply to { :a => '1', :b => '2', :c => '4' } (contains invalid values)" do
160
+ it "is invalid" do
161
+ test.values = { :a => '1', :b => '2', :c => '4' }
162
+ expect(test.valid?).to eq false
163
+ end
164
+ end
165
+ context "when apply to { :a => '1', :b => '2', :c => nil } (contains nil)" do
166
+ it "is valid" do
167
+ test.values = { :a => '1', :b => '2', :c => nil }
168
+ expect(test.valid?).to eq true
169
+ end
170
+ end
171
+ context "when apply to { :a => '1', :b => '2', :c => '' } (contains empty)" do
172
+ it "is invalid" do
173
+ test.values = { :a => '1', :b => '2', :c => '' }
174
+ expect(test.valid?).to eq false
175
+ end
176
+ end
177
+ context "when apply to { :a => '1', :b => '2', :c => ' ' } (contains blank)" do
178
+ it "is invalid" do
179
+ test.values = { :a => '1', :b => '2', :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) { AllInclusionTestWithIgnoreBlankValueOption.new }
188
+
189
+ context "when apply to nil" do
190
+ it "is valid" do
191
+ test.values = 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.values = []
200
+ expect(test.valid?).to eq true
201
+ end
202
+ end
203
+ context "when apply to ['1', '2', '3'] (valid values)" do
204
+ it "is valid" do
205
+ test.values = ["1", "2", "3"]
206
+ expect(test.valid?).to eq true
207
+ end
208
+ end
209
+ context "when apply to ['1', '2', '4'] (contains invalid values)" do
210
+ it "is invalid" do
211
+ test.values = ["1", "2", "4"]
212
+ expect(test.valid?).to eq false
213
+ end
214
+ end
215
+ context "when apply to ['1', '2', nil] (contains nil)" do
216
+ it "is valid" do
217
+ test.values = ['1', '2', nil]
218
+ expect(test.valid?).to eq true
219
+ end
220
+ end
221
+ context "when apply to ['1', '2', ''] (contains empty)" do
222
+ it "is valid" do
223
+ test.values = ['1', '2', '']
224
+ expect(test.valid?).to eq true
225
+ end
226
+ end
227
+ context "when apply to ['1', '2', ' '] (contains blank)" do
228
+ it "is valid" do
229
+ test.values = ['1', '2', ' ']
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.values = {}
239
+ expect(test.valid?).to eq true
240
+ end
241
+ end
242
+ context "when apply to { :a => '1', :b => '2', :c => '3' } (valid values)" do
243
+ it "is valid" do
244
+ test.values = { :a => '1', :b => '2', :c => '3' }
245
+ expect(test.valid?).to eq true
246
+ end
247
+ end
248
+ context "when apply to { :a => '1', :b => '2', :c => '4' } (contains invalid values)" do
249
+ it "is invalid" do
250
+ test.values = { :a => '1', :b => '2', :c => '4' }
251
+ expect(test.valid?).to eq false
252
+ end
253
+ end
254
+ context "when apply to { :a => '1', :b => '2', :c => nil } (contains nil)" do
255
+ it "is valid" do
256
+ test.values = { :a => '1', :b => '2', :c => nil }
257
+ expect(test.valid?).to eq true
258
+ end
259
+ end
260
+ context "when apply to { :a => '1', :b => '2', :c => '' } (contains empty)" do
261
+ it "is valid" do
262
+ test.values = { :a => '1', :b => '2', :c => '' }
263
+ expect(test.valid?).to eq true
264
+ end
265
+ end
266
+ context "when apply to { :a => '1', :b => '2', :c => ' ' } (contains blank)" do
267
+ it "is valid" do
268
+ test.values = { :a => '1', :b => '2', :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 without message option" do# {{{
278
+ let(:test) { AllInclusionTest.new }
279
+
280
+ context "when valid" do
281
+ before do
282
+ test.values = ['1', '2', '3']
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.values = ['1', '2', '4']
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 values attribute" do
301
+ expect(test.errors.include?(:values)).to eq true
302
+ end
303
+ it %q{error messsage is "Values contains value that is not included in the list"} do
304
+ expect(test.errors.full_messages.first).to eq "Values contains value that is not included in the list"
305
+ end
306
+ end
307
+ context "when using i18n" do
308
+ before do
309
+ @base_locale = I18n.locale
310
+ I18n.locale = :ja
311
+ test.values = ['1', '2', '4']
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 "Values にはリストに含まれていない値が含まれています"
319
+ end
320
+ end
321
+ end# }}}
322
+
323
+ context "when given message option" do# {{{
324
+ let(:test) { AllInclusionTestWithMessageOption.new }
325
+
326
+ context "when invalid" do
327
+ before do
328
+ test.values = ['1', '2', '4']
329
+ test.valid?
330
+ end
331
+ it "error messsage uses given message" do
332
+ expect(test.errors.full_messages.first).to eq 'Values 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.values = ['1', '2', '4']
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 'Values is invalid'
347
+ end
348
+ end
349
+ end# }}}
350
+ end
351
+ end
352
+
@@ -0,0 +1,388 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/all_length_test"
5
+
6
+ describe Detox::Validations::AllLengthValidator do
7
+ describe "validation result (3 <= length <= 6)" do
8
+ context "when given no additional option" do# {{{
9
+ let(:test) { AllLengthTest.new }
10
+
11
+ context "when apply to nil" do
12
+ it "is valid" do
13
+ test.values = 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.values = []
22
+ expect(test.valid?).to eq true
23
+ end
24
+ end
25
+ context "when apply to ['12345', '123', '123456'] (valid values)" do
26
+ it "is valid" do
27
+ test.values = ["12345", "123", "123456"]
28
+ expect(test.valid?).to eq true
29
+ end
30
+ end
31
+ context "when apply to ['12345', '123', '1234567'] (contains longer value)" do
32
+ it "is invalid" do
33
+ test.values = ["12345", "123", "1234567"]
34
+ expect(test.valid?).to eq false
35
+ end
36
+ end
37
+ context "when apply to ['12345', '123', '123'] (contains shorter value)" do
38
+ it "is invalid" do
39
+ test.values = ["12345", "123", "12"]
40
+ expect(test.valid?).to eq false
41
+ end
42
+ end
43
+ context "when apply to ['12345', '123', nil] (contains nil)" do
44
+ it "is invalid" do
45
+ test.values = ["12345", "123", nil]
46
+ expect(test.valid?).to eq false
47
+ end
48
+ end
49
+ context "when apply to ['12345', '123', ''] (contains empty)" do
50
+ it "is invalid" do
51
+ test.values = ["12345", "123", ""]
52
+ expect(test.valid?).to eq false
53
+ end
54
+ end
55
+ context "when apply to ['12345', '123', ' '] (contains invalid length blank)" do
56
+ it "is invalid" do
57
+ test.values = ["12345", "123", " "]
58
+ expect(test.valid?).to eq false
59
+ end
60
+ end
61
+ end# }}}
62
+
63
+ context "when apply to Hash" do# {{{
64
+ context "when apply to {} (empty)" do
65
+ it "is valid" do
66
+ test.values = {}
67
+ expect(test.valid?).to eq true
68
+ end
69
+ end
70
+ context "when apply to { :a => '12345', :b => '123', :c => '123456' } (valid values)" do
71
+ it "is valid" do
72
+ test.values = { :a => '12345', :b => '123', :c => '123456' }
73
+ expect(test.valid?).to eq true
74
+ end
75
+ end
76
+ context "when apply to { :a => '12345', :b => '123', :c => '1234567' } (contains longer value)" do
77
+ it "is invalid" do
78
+ test.values = { :a => '12345', :b => '123', :c => '1234567' }
79
+ expect(test.valid?).to eq false
80
+ end
81
+ end
82
+ context "when apply to { :a => '12345', :b => '123', :c => '12' } (contains shorter value)" do
83
+ it "is invalid" do
84
+ test.values = { :a => '12345', :b => '123', :c => '12' }
85
+ expect(test.valid?).to eq false
86
+ end
87
+ end
88
+ context "when apply to { :a => '12345', :b => '123', :c => nil } (contains nil)" do
89
+ it "is invalid" do
90
+ test.values = { :a => '12345', :b => '123', :c => nil }
91
+ expect(test.valid?).to eq false
92
+ end
93
+ end
94
+ context "when apply to { :a => '12345', :b => '123', :c => '' } (contains empty)" do
95
+ it "is invalid" do
96
+ test.values = { :a => '12345', :b => '123', :c => '' }
97
+ expect(test.valid?).to eq false
98
+ end
99
+ end
100
+ context "when apply to { :a => '12345', :b => '123', :c => ' ' } (contains invalid length blank)" do
101
+ it "is invalid" do
102
+ test.values = { :a => '12345', :b => '123', :c => ' ' }
103
+ expect(test.valid?).to eq false
104
+ end
105
+ end
106
+ end# }}}
107
+ end# }}}
108
+
109
+ context "when given ignore_nil_value option" do# {{{
110
+ let(:test) { AllLengthTestWithIgnoreNilValueOption.new }
111
+
112
+ context "when apply to nil" do
113
+ it "is valid" do
114
+ test.values = nil
115
+ expect(test.valid?).to eq true
116
+ end
117
+ end
118
+
119
+ context "when apply to Array" do# {{{
120
+ context "when apply to [] (empty)" do
121
+ it "is valid" do
122
+ test.values = []
123
+ expect(test.valid?).to eq true
124
+ end
125
+ end
126
+ context "when apply to ['12345', '123', '123456'] (valid values)" do
127
+ it "is valid" do
128
+ test.values = ["12345", "123", "123456"]
129
+ expect(test.valid?).to eq true
130
+ end
131
+ end
132
+ context "when apply to ['12345', '123', '1234567'] (contains longer value)" do
133
+ it "is invalid" do
134
+ test.values = ["12345", "123", "1234567"]
135
+ expect(test.valid?).to eq false
136
+ end
137
+ end
138
+ context "when apply to ['12345', '123', '12'] (contains shorter value)" do
139
+ it "is invalid" do
140
+ test.values = ["12345", "123", "12"]
141
+ expect(test.valid?).to eq false
142
+ end
143
+ end
144
+ context "when apply to ['12345', '123', nil] (contains nil)" do
145
+ it "is valid" do
146
+ test.values = ["12345", "123", nil]
147
+ expect(test.valid?).to eq true
148
+ end
149
+ end
150
+ context "when apply to ['12345', '123', ''] (contains empty)" do
151
+ it "is invalid" do
152
+ test.values = ["12345", "123", ""]
153
+ expect(test.valid?).to eq false
154
+ end
155
+ end
156
+ context "when apply to ['12345', '123', ' '] (contains invalid length blank)" do
157
+ it "is invalid" do
158
+ test.values = ["12345", "123", " "]
159
+ expect(test.valid?).to eq false
160
+ end
161
+ end
162
+ end# }}}
163
+
164
+ context "when apply to Hash" do# {{{
165
+ context "when apply to {} (empty)" do
166
+ it "is valid" do
167
+ test.values = {}
168
+ expect(test.valid?).to eq true
169
+ end
170
+ end
171
+ context "when apply to { :a => '12345', :b => '123', :c => '123456' } (valid values)" do
172
+ it "is valid" do
173
+ test.values = { :a => '12345', :b => '123', :c => '123456' }
174
+ expect(test.valid?).to eq true
175
+ end
176
+ end
177
+ context "when apply to { :a => '12345', :b => '123', :c => '1234567' } (contains longer value)" do
178
+ it "is invalid" do
179
+ test.values = { :a => '12345', :b => '123', :c => '1234567' }
180
+ expect(test.valid?).to eq false
181
+ end
182
+ end
183
+ context "when apply to { :a => '12345', :b => '123', :c => '12' } (contains shorter value)" do
184
+ it "is invalid" do
185
+ test.values = { :a => '12345', :b => '123', :c => '12' }
186
+ expect(test.valid?).to eq false
187
+ end
188
+ end
189
+ context "when apply to { :a => '12345', :b => '123', :c => nil } (contains nil)" do
190
+ it "is valid" do
191
+ test.values = { :a => '12345', :b => '123', :c => nil }
192
+ expect(test.valid?).to eq true
193
+ end
194
+ end
195
+ context "when apply to { :a => '12345', :b => '123', :c => '' } (contains empty)" do
196
+ it "is invalid" do
197
+ test.values = { :a => '12345', :b => '123', :c => '' }
198
+ expect(test.valid?).to eq false
199
+ end
200
+ end
201
+ context "when apply to { :a => '12345', :b => '123', :c => ' ' } (contains invalid length blank)" do
202
+ it "is invalid" do
203
+ test.values = { :a => '12345', :b => '123', :c => ' ' }
204
+ expect(test.valid?).to eq false
205
+ end
206
+ end
207
+ end# }}}
208
+ end# }}}
209
+
210
+ context "when given ignore_blank_value option" do# {{{
211
+ let(:test) { AllLengthTestWithIgnoreBlankValueOption.new }
212
+
213
+ context "when apply to nil" do
214
+ it "is valid" do
215
+ test.values = nil
216
+ expect(test.valid?).to eq true
217
+ end
218
+ end
219
+
220
+ context "when apply to Array" do# {{{
221
+ context "when apply to [] (empty)" do
222
+ it "is valid" do
223
+ test.values = []
224
+ expect(test.valid?).to eq true
225
+ end
226
+ end
227
+ context "when apply to ['12345', '123', '123456'] (valid values)" do
228
+ it "is valid" do
229
+ test.values = ["12345", "123", "123456"]
230
+ expect(test.valid?).to eq true
231
+ end
232
+ end
233
+ context "when apply to ['12345', '123', '1234567'] (contains longer length)" do
234
+ it "is invalid" do
235
+ test.values = ["12345", "123", "1234567"]
236
+ expect(test.valid?).to eq false
237
+ end
238
+ end
239
+ context "when apply to ['12345', '123', '12'] (contains shorter length)" do
240
+ it "is invalid" do
241
+ test.values = ["12345", "123", "12"]
242
+ expect(test.valid?).to eq false
243
+ end
244
+ end
245
+ context "when apply to ['12345', '123', nil] (contains nil)" do
246
+ it "is valid" do
247
+ test.values = ["12345", "123", nil]
248
+ expect(test.valid?).to eq true
249
+ end
250
+ end
251
+ context "when apply to ['12345', '123', ''] (contains empty)" do
252
+ it "is valid" do
253
+ test.values = ["12345", "123", ""]
254
+ expect(test.valid?).to eq true
255
+ end
256
+ end
257
+ context "when apply to ['12345', '123', ' '] (contains invalid length blank)" do
258
+ it "is valid" do
259
+ test.values = ["12345", "123", " "]
260
+ expect(test.valid?).to eq true
261
+ end
262
+ end
263
+ end# }}}
264
+
265
+ context "when apply to Hash" do# {{{
266
+ context "when apply to {} (empty)" do
267
+ it "is valid" do
268
+ test.values = {}
269
+ expect(test.valid?).to eq true
270
+ end
271
+ end
272
+ context "when apply to { :a => '12345', :b => '123', :c => '123456' } (valid values)" do
273
+ it "is valid" do
274
+ test.values = { :a => '12345', :b => '123', :c => '123456' }
275
+ expect(test.valid?).to eq true
276
+ end
277
+ end
278
+ context "when apply to { :a => '12345', :b => '123', :c => '1234567' } (contains longer value)" do
279
+ it "is invalid" do
280
+ test.values = { :a => '12345', :b => '123', :c => '1234567' }
281
+ expect(test.valid?).to eq false
282
+ end
283
+ end
284
+ context "when apply to { :a => '12345', :b => '123', :c => '12' } (contains shorter value)" do
285
+ it "is invalid" do
286
+ test.values = { :a => '12345', :b => '123', :c => '12' }
287
+ expect(test.valid?).to eq false
288
+ end
289
+ end
290
+ context "when apply to { :a => '12345', :b => '123', :c => nil } (contains nil)" do
291
+ it "is valid" do
292
+ test.values = { :a => '12345', :b => '123', :c => nil }
293
+ expect(test.valid?).to eq true
294
+ end
295
+ end
296
+ context "when apply to { :a => '12345', :b => '123', :c => '' } (contains empty)" do
297
+ it "is valid" do
298
+ test.values = { :a => '12345', :b => '123', :c => '' }
299
+ expect(test.valid?).to eq true
300
+ end
301
+ end
302
+ context "when apply to { :a => '12345', :b => '123', :c => ' ' } (contains invalid length blank)" do
303
+ it "is valid" do
304
+ test.values = { :a => '12345', :b => '123', :c => ' ' }
305
+ expect(test.valid?).to eq true
306
+ end
307
+ end
308
+ end# }}}
309
+ end# }}}
310
+ end
311
+
312
+ describe "error message" do
313
+ context "when witout message option" do# {{{
314
+ let(:test) { AllLengthTest.new }
315
+
316
+ context "when valid" do
317
+ before do
318
+ test.values = ['12345', '123', '123456']
319
+ test.valid?
320
+ end
321
+
322
+ it "has no message" do
323
+ expect(test.errors.present?).to eq false
324
+ end
325
+ end
326
+ context "when invalid" do
327
+ before do
328
+ test.values = ['12345', '123', '1234567']
329
+ test.valid?
330
+ end
331
+
332
+ it "has 1 error message" do
333
+ expect(test.errors.empty?).to eq false
334
+ expect(test.errors.size).to eq 1
335
+ end
336
+ it "error message is associated with values attribute" do
337
+ expect(test.errors.include?(:values)).to eq true
338
+ end
339
+ it "error messsage is 'Values contains invalid length value'" do
340
+ expect(test.errors.full_messages.first).to eq "Values contains invalid length value"
341
+ end
342
+ end
343
+ context "when using i18n" do
344
+ before do
345
+ @base_locale = I18n.locale
346
+ I18n.locale = :ja
347
+ test.values = ['12345', '123', '1234567']
348
+ test.valid?
349
+ end
350
+ after do
351
+ I18n.locale = @base_locale
352
+ end
353
+ it "error messsage is translated" do
354
+ expect(test.errors.full_messages.first).to eq "Values には長さが不正な値が含まれています"
355
+ end
356
+ end
357
+ end# }}}
358
+
359
+ context "when given message option" do# {{{
360
+ let(:test) { AllLengthTestWithMessageOption.new }
361
+
362
+ context "when invalid" do
363
+ before do
364
+ test.values = ['12345', '123', '1234567']
365
+ test.valid?
366
+ end
367
+ it "error messsage uses given message" do
368
+ expect(test.errors.full_messages.first).to eq 'Values is invalid'
369
+ end
370
+ end
371
+ context "when using i18n" do
372
+ before do
373
+ @base_locale = I18n.locale
374
+ I18n.locale = :ja
375
+ test.values = ['12345', '123', '1234567']
376
+ test.valid?
377
+ end
378
+ after do
379
+ I18n.locale = @base_locale
380
+ end
381
+ it "error messsage is not translated" do
382
+ expect(test.errors.full_messages.first).to eq 'Values is invalid'
383
+ end
384
+ end
385
+ end# }}}
386
+ end
387
+ end
388
+