detox 1.0.0 → 1.0.1

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4178ff8b870484f57cd8c4677afac7b1968526da
4
- data.tar.gz: 682e7b0e9665a4b1bed0571aa24153260ca0ac76
3
+ metadata.gz: e3539084844db07a30aed07576d36bc3856a3676
4
+ data.tar.gz: 2718b759268e66ca0937e2af388a5c6f3e99a7d4
5
5
  SHA512:
6
- metadata.gz: 6eed3e98b13ec01e85532664dd2b5319ecb112b54939d859b4da47ec26282cc01127d38a52cdfaaaf536eb18001bf70d7c2080a110c5813d8476a6e733237768
7
- data.tar.gz: 8c449e6d0aa73fa2022aca80648fe43f5da3c05b3ac56fda822c1f21caa3d3b75a7150c5f616ce81b57ab998f186882f1618c22e9b7b1b1eee3902c2a842a6af
6
+ metadata.gz: 77da47126cd49d77e0a9abe5feefe4b1c47276ef4630f120ec3819be8360579b5c86b237d19374636aa6af10368693fd9b2aacc6f7a5f4f725e4ff93851b0523
7
+ data.tar.gz: 1db5eab41c1c3934dce9832d9a7d22588622099b6122f28966c35ba4fb864d432970e00b6d7dc1a26189be2639314077c693dcfc6d2ef4538ac0d63b64472e2f
data/README.md CHANGED
@@ -27,6 +27,7 @@ Look [spec/test_class](https://github.com/pinzolo/detox/tree/master/spec/test_cl
27
27
  - Validators for attribute that has Array or Hash value
28
28
  - **ordering**: validates continuous numbers
29
29
  - **possession**: validates subset values
30
+ - **values_uniqueness**: validates unique values
30
31
  - **all_xxx**: validates that all value are valid, by basic validators (xxx is presence, format etc.)
31
32
  - **any_xxx**: validates that has valid value, by basic validators (xxx is presence, format etc.)
32
33
 
@@ -38,3 +39,9 @@ Look [spec/test_class](https://github.com/pinzolo/detox/tree/master/spec/test_cl
38
39
  3. Commit your changes (`git commit -am 'Add some feature'`)
39
40
  4. Push to the branch (`git push origin my-new-feature`)
40
41
  5. Create new Pull Request
42
+
43
+
44
+ ## Changelog
45
+ - v1.0.0 (2013-11-07 JST): First release
46
+ - v1.0.1 (2013-11-13 JST): Add ValuesUniquenessValidator
47
+
data/lib/detox.rb CHANGED
@@ -3,6 +3,7 @@ require "active_model"
3
3
  require "active_support/i18n"
4
4
  require "detox/validations/ordering"
5
5
  require "detox/validations/possession"
6
+ require "detox/validations/values_uniqueness"
6
7
  require "detox/validations/all"
7
8
  require "detox/validations/any"
8
9
 
@@ -3,6 +3,7 @@ en:
3
3
  messages:
4
4
  invalid_as_order: "is not satisfied as order"
5
5
  possession: "must possess target (target: %{target})"
6
+ values_not_unique: "contains duplicate value"
6
7
  all_presence: "can't contain blank value"
7
8
  all_absence: "can't contain not blank value"
8
9
  all_format: "contains invalid format value"
@@ -3,6 +3,7 @@ ja:
3
3
  messages:
4
4
  invalid_as_order: "は順序として成立していません"
5
5
  possession: "には対象(%{target})が含まれている必要があります"
6
+ values_not_unique: "は重複する値を含んでいます"
6
7
  all_presence: "には空の値を含められません"
7
8
  all_absence: "には空ではない値を含められません"
8
9
  all_format: "には不正な形式の値が含まれています"
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ require "active_support/core_ext"
3
+ require "detox/array_validity"
4
+
5
+ module Detox::Validations
6
+ class ValuesUniquenessValidator < ActiveModel::EachValidator
7
+ include Detox::ArrayValidity
8
+
9
+ def validate_each(record, attribute, value)
10
+ values = convert_to_validatee(value, options.slice(*Detox::ArrayValidity::RESERVED_OPTIONS))
11
+ return if values.blank?
12
+
13
+ unless values_valid?(values)
14
+ message = options[:message] || :values_not_unique
15
+ record.errors.add(attribute, message)
16
+ end
17
+ end
18
+
19
+ private
20
+ def values_valid?(values)
21
+ values.uniq.length == values.length
22
+ end
23
+ end
24
+ end
25
+
data/lib/detox/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # coding: utf-8
2
2
  module Detox
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
@@ -0,0 +1,460 @@
1
+ # coding: utf-8
2
+ require "spec_helper"
3
+ require "active_support/i18n"
4
+ require "test_class/values_uniqueness_test"
5
+
6
+ describe Detox::Validations::ValuesUniquenessValidator do
7
+ describe "validation result" do
8
+ context "when given no option" do# {{{
9
+ let(:test) { ValuesUniquenessTestWithoutOption.new }
10
+
11
+ context "when apply to nil" do
12
+ it "is valid" do
13
+ test.seq = 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.seq = []
22
+ expect(test.valid?).to eq true
23
+ end
24
+ end
25
+ context "when apply to ['1', '2', '3'] (no duplicate value, nil, empty and blank)" do
26
+ it "is valid" do
27
+ test.seq = ["1", "2", "3"]
28
+ expect(test.valid?).to eq true
29
+ end
30
+ end
31
+ context "when apply to ['1', '3', '1'] (contains duplicate value)" do
32
+ it "is invalid" do
33
+ test.seq = ["1", "3", "1"]
34
+ expect(test.valid?).to eq false
35
+ end
36
+ end
37
+ context "when apply to ['1', '2', nil, '3'] (no duplicate value but contains nil)" do
38
+ it "is valid" do
39
+ test.seq = ['1', '2', nil, '3']
40
+ expect(test.valid?).to eq true
41
+ end
42
+ end
43
+ context "when apply to ['1', '2', nil, '3', nil] (contains 2 nil)" do
44
+ it "is invalid" do
45
+ test.seq = ['1', '2', nil, '3', nil]
46
+ expect(test.valid?).to eq false
47
+ end
48
+ end
49
+ context "when apply to ['1', '2', '', '3'] (no duplicate value but contains empty)" do
50
+ it "is valid" do
51
+ test.seq = ['1', '2', "", '3']
52
+ expect(test.valid?).to eq true
53
+ end
54
+ end
55
+ context "when apply to ['1', '2', '', '3', ''] (contains 2 empty)" do
56
+ it "is invalid" do
57
+ test.seq = ['1', '2', "", '3', ""]
58
+ expect(test.valid?).to eq false
59
+ end
60
+ end
61
+ context "when apply to ['1', '2', ' ', '3'] (no duplicate value but contains blank)" do
62
+ it "is valid" do
63
+ test.seq = ['1', '2', " ", '3']
64
+ expect(test.valid?).to eq true
65
+ end
66
+ end
67
+ context "when apply to ['1', '2', ' ', '3', ' '] (contains 2 blank)" do
68
+ it "is invalid" do
69
+ test.seq = ['1', '2', " ", '3', " "]
70
+ expect(test.valid?).to eq false
71
+ end
72
+ end
73
+ end# }}}
74
+
75
+ context "when apply to Hash" do# {{{
76
+ context "when apply to {} (empty)" do
77
+ it "is valid" do
78
+ test.seq = []
79
+ expect(test.valid?).to eq true
80
+ end
81
+ end
82
+ context "when apply to { :a => '2', :b => '3', :c => '1' } (no duplicate value, nil, empty and blank)" do
83
+ it "is valid" do
84
+ test.seq = { :a => '2', :b => '3', :c => '1' }
85
+ expect(test.valid?).to eq true
86
+ end
87
+ end
88
+ context "when apply to { :a => '1', :b => '2', :c => '1' } (contains duplicate value)" do
89
+ it "is invalid" do
90
+ test.seq = { :a => '1', :b => '2', :c => '1' }
91
+ expect(test.valid?).to eq false
92
+ end
93
+ end
94
+ context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3' } (no duplicate value but contains nil)" do
95
+ it "is valid" do
96
+ test.seq = { :a => '1', :b => '2', :c => nil, :d => '3' }
97
+ expect(test.valid?).to eq true
98
+ end
99
+ end
100
+ context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3', :e => nil } (contains 2 nil)" do
101
+ it "is invalid" do
102
+ test.seq = { :a => '1', :b => '2', :c => nil, :d => '3', :e => nil }
103
+ expect(test.valid?).to eq false
104
+ end
105
+ end
106
+ context "when apply to { :a => '1', :b => '2', :c => '', :d => '3' } (no duplicate value but contains empty)" do
107
+ it "is valid" do
108
+ test.seq = { :a => '1', :b => '2', :c => '', :d => '3' }
109
+ expect(test.valid?).to eq true
110
+ end
111
+ end
112
+ context "when apply to { :a => '1', :b => '2', :c => '', :d => '3', :e => '' } (contains 2 empty)" do
113
+ it "is invalid" do
114
+ test.seq = { :a => '1', :b => '2', :c => '', :d => '3', :e => '' }
115
+ expect(test.valid?).to eq false
116
+ end
117
+ end
118
+ context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3' } (no duplicate value but contains blank)" do
119
+ it "is valid" do
120
+ test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3' }
121
+ expect(test.valid?).to eq true
122
+ end
123
+ end
124
+ context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3', :e => ' ' } (contains 2 blank)" do
125
+ it "is invalid" do
126
+ test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3', :e => ' ' }
127
+ expect(test.valid?).to eq false
128
+ end
129
+ end
130
+ end# }}}
131
+ end# }}}
132
+
133
+ context "when given ignore_nil_value option" do# {{{
134
+ let(:test) { ValuesUniquenessTestWithIgnoreNilValueOption.new }
135
+
136
+ context "when apply to nil" do
137
+ it "is valid" do
138
+ test.seq = nil
139
+ expect(test.valid?).to eq true
140
+ end
141
+ end
142
+
143
+ context "when apply to Array" do# {{{
144
+ context "when apply to [] (empty)" do
145
+ it "is valid" do
146
+ test.seq = []
147
+ expect(test.valid?).to eq true
148
+ end
149
+ end
150
+ context "when apply to ['1', '2', '3'] (no duplicate value, nil, empty and blank)" do
151
+ it "is valid" do
152
+ test.seq = ["1", "2", "3"]
153
+ expect(test.valid?).to eq true
154
+ end
155
+ end
156
+ context "when apply to ['1', '3', '1'] (contains duplicate value)" do
157
+ it "is invalid" do
158
+ test.seq = ["1", "3", "1"]
159
+ expect(test.valid?).to eq false
160
+ end
161
+ end
162
+ context "when apply to ['1', '2', nil, '3'] (no duplicate value but contains nil)" do
163
+ it "is valid" do
164
+ test.seq = ['1', '2', nil, '3']
165
+ expect(test.valid?).to eq true
166
+ end
167
+ end
168
+ context "when apply to ['1', '2', nil, '3', nil] (contains 2 nil)" do
169
+ it "is valid" do
170
+ test.seq = ['1', '2', nil, '3', nil]
171
+ expect(test.valid?).to eq true
172
+ end
173
+ end
174
+ context "when apply to ['1', '2', '', '3'] (no duplicate value but contains empty)" do
175
+ it "is valid" do
176
+ test.seq = ['1', '2', "", '3']
177
+ expect(test.valid?).to eq true
178
+ end
179
+ end
180
+ context "when apply to ['1', '2', '', '3', ''] (contains 2 empty)" do
181
+ it "is invalid" do
182
+ test.seq = ['1', '2', "", '3', ""]
183
+ expect(test.valid?).to eq false
184
+ end
185
+ end
186
+ context "when apply to ['1', '2', ' ', '3'] (no duplicate value but contains blank)" do
187
+ it "is valid" do
188
+ test.seq = ['1', '2', " ", '3']
189
+ expect(test.valid?).to eq true
190
+ end
191
+ end
192
+ context "when apply to ['1', '2', ' ', '3', ' '] (contains 2 blank)" do
193
+ it "is invalid" do
194
+ test.seq = ['1', '2', " ", '3', " "]
195
+ expect(test.valid?).to eq false
196
+ end
197
+ end
198
+ end# }}}
199
+
200
+ context "when apply to Hash" do# {{{
201
+ context "when apply to {} (empty)" do
202
+ it "is valid" do
203
+ test.seq = []
204
+ expect(test.valid?).to eq true
205
+ end
206
+ end
207
+ context "when apply to { :a => '2', :b => '3', :c => '1' } (no duplicate value, nil, empty and blank)" do
208
+ it "is valid" do
209
+ test.seq = { :a => '2', :b => '3', :c => '1' }
210
+ expect(test.valid?).to eq true
211
+ end
212
+ end
213
+ context "when apply to { :a => '1', :b => '2', :c => '1' } (contains duplicate value)" do
214
+ it "is invalid" do
215
+ test.seq = { :a => '1', :b => '2', :c => '1' }
216
+ expect(test.valid?).to eq false
217
+ end
218
+ end
219
+ context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3' } (no duplicate value but contains nil)" do
220
+ it "is valid" do
221
+ test.seq = { :a => '1', :b => '2', :c => nil, :d => '3' }
222
+ expect(test.valid?).to eq true
223
+ end
224
+ end
225
+ context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3', :e => nil } (contains 2 nil)" do
226
+ it "is valid" do
227
+ test.seq = { :a => '1', :b => '2', :c => nil, :d => '3', :e => nil }
228
+ expect(test.valid?).to eq true
229
+ end
230
+ end
231
+ context "when apply to { :a => '1', :b => '2', :c => '', :d => '3' } (no duplicate value but contains empty)" do
232
+ it "is valid" do
233
+ test.seq = { :a => '1', :b => '2', :c => '', :d => '3' }
234
+ expect(test.valid?).to eq true
235
+ end
236
+ end
237
+ context "when apply to { :a => '1', :b => '2', :c => '', :d => '3', :e => '' } (contains 2 empty)" do
238
+ it "is invalid" do
239
+ test.seq = { :a => '1', :b => '2', :c => '', :d => '3', :e => '' }
240
+ expect(test.valid?).to eq false
241
+ end
242
+ end
243
+ context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3' } (no duplicate value but contains blank)" do
244
+ it "is valid" do
245
+ test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3' }
246
+ expect(test.valid?).to eq true
247
+ end
248
+ end
249
+ context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3', :e => ' ' } (contains 2 blank)" do
250
+ it "is invalid" do
251
+ test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3', :e => ' ' }
252
+ expect(test.valid?).to eq false
253
+ end
254
+ end
255
+ end# }}}
256
+ end# }}}
257
+
258
+ context "when given ignore_blank_value option" do# {{{
259
+ let(:test) { ValuesUniquenessTestWithIgnoreBlankValueOption.new }
260
+
261
+ context "when apply to nil" do
262
+ it "is valid" do
263
+ test.seq = nil
264
+ expect(test.valid?).to eq true
265
+ end
266
+ end
267
+
268
+ context "when apply to Array" do# {{{
269
+ context "when apply to [] (empty)" do
270
+ it "is valid" do
271
+ test.seq = []
272
+ expect(test.valid?).to eq true
273
+ end
274
+ end
275
+ context "when apply to ['1', '2', '3'] (no duplicate value, nil, empty and blank)" do
276
+ it "is valid" do
277
+ test.seq = ["1", "2", "3"]
278
+ expect(test.valid?).to eq true
279
+ end
280
+ end
281
+ context "when apply to ['1', '3', '1'] (contains duplicate value)" do
282
+ it "is invalid" do
283
+ test.seq = ["1", "3", "1"]
284
+ expect(test.valid?).to eq false
285
+ end
286
+ end
287
+ context "when apply to ['1', '2', nil, '3'] (no duplicate value but contains nil)" do
288
+ it "is valid" do
289
+ test.seq = ['1', '2', nil, '3']
290
+ expect(test.valid?).to eq true
291
+ end
292
+ end
293
+ context "when apply to ['1', '2', nil, '3', nil] (contains 2 nil)" do
294
+ it "is valid" do
295
+ test.seq = ['1', '2', nil, '3', nil]
296
+ expect(test.valid?).to eq true
297
+ end
298
+ end
299
+ context "when apply to ['1', '2', '', '3'] (no duplicate value but contains empty)" do
300
+ it "is valid" do
301
+ test.seq = ['1', '2', "", '3']
302
+ expect(test.valid?).to eq true
303
+ end
304
+ end
305
+ context "when apply to ['1', '2', '', '3', ''] (contains 2 empty)" do
306
+ it "is valid" do
307
+ test.seq = ['1', '2', "", '3', ""]
308
+ expect(test.valid?).to eq true
309
+ end
310
+ end
311
+ context "when apply to ['1', '2', ' ', '3'] (no duplicate value but contains blank)" do
312
+ it "is valid" do
313
+ test.seq = ['1', '2', " ", '3']
314
+ expect(test.valid?).to eq true
315
+ end
316
+ end
317
+ context "when apply to ['1', '2', ' ', '3', ' '] (contains 2 blank)" do
318
+ it "is valid" do
319
+ test.seq = ['1', '2', " ", '3', " "]
320
+ expect(test.valid?).to eq true
321
+ end
322
+ end
323
+ end# }}}
324
+
325
+ context "when apply to Hash" do# {{{
326
+ context "when apply to {} (empty)" do
327
+ it "is valid" do
328
+ test.seq = []
329
+ expect(test.valid?).to eq true
330
+ end
331
+ end
332
+ context "when apply to { :a => '2', :b => '3', :c => '1' } (no duplicate value, nil, empty and blank)" do
333
+ it "is valid" do
334
+ test.seq = { :a => '2', :b => '3', :c => '1' }
335
+ expect(test.valid?).to eq true
336
+ end
337
+ end
338
+ context "when apply to { :a => '1', :b => '2', :c => '1' } (contains duplicate value)" do
339
+ it "is invalid" do
340
+ test.seq = { :a => '1', :b => '2', :c => '1' }
341
+ expect(test.valid?).to eq false
342
+ end
343
+ end
344
+ context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3' } (no duplicate value but contains nil)" do
345
+ it "is valid" do
346
+ test.seq = { :a => '1', :b => '2', :c => nil, :d => '3' }
347
+ expect(test.valid?).to eq true
348
+ end
349
+ end
350
+ context "when apply to { :a => '1', :b => '2', :c => nil, :d => '3', :e => nil } (contains 2 nil)" do
351
+ it "is valid" do
352
+ test.seq = { :a => '1', :b => '2', :c => nil, :d => '3', :e => nil }
353
+ expect(test.valid?).to eq true
354
+ end
355
+ end
356
+ context "when apply to { :a => '1', :b => '2', :c => '', :d => '3' } (no duplicate value but contains empty)" do
357
+ it "is valid" do
358
+ test.seq = { :a => '1', :b => '2', :c => '', :d => '3' }
359
+ expect(test.valid?).to eq true
360
+ end
361
+ end
362
+ context "when apply to { :a => '1', :b => '2', :c => '', :d => '3', :e => '' } (contains 2 empty)" do
363
+ it "is valid" do
364
+ test.seq = { :a => '1', :b => '2', :c => '', :d => '3', :e => '' }
365
+ expect(test.valid?).to eq true
366
+ end
367
+ end
368
+ context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3' } (no duplicate value but contains blank)" do
369
+ it "is valid" do
370
+ test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3' }
371
+ expect(test.valid?).to eq true
372
+ end
373
+ end
374
+ context "when apply to { :a => '1', :b => '2', :c => ' ', :d => '3', :e => ' ' } (contains 2 blank)" do
375
+ it "is valid" do
376
+ test.seq = { :a => '1', :b => '2', :c => ' ', :d => '3', :e => ' ' }
377
+ expect(test.valid?).to eq true
378
+ end
379
+ end
380
+ end# }}}
381
+ end# }}}
382
+ end
383
+
384
+ describe "error message" do
385
+ context "when given no option" do# {{{
386
+ let(:test) { ValuesUniquenessTestWithoutOption.new }
387
+
388
+ context "when valid" do
389
+ before do
390
+ test.seq = ['1', '2', '3']
391
+ test.valid?
392
+ end
393
+
394
+ it "has no message" do
395
+ expect(test.errors.present?).to eq false
396
+ end
397
+ end
398
+ context "when invalid" do
399
+ before do
400
+ test.seq = ['1', '2', '1']
401
+ test.valid?
402
+ end
403
+
404
+ it "has 1 error message" do
405
+ expect(test.errors.empty?).to eq false
406
+ expect(test.errors.size).to eq 1
407
+ end
408
+ it "error message is associated with seq attribute" do
409
+ expect(test.errors.include?(:seq)).to eq true
410
+ end
411
+ it "error messsage is 'Seq contains duplicate value'" do
412
+ expect(test.errors.full_messages.first).to eq 'Seq contains duplicate value'
413
+ end
414
+ end
415
+ context "when using i18n" do
416
+ before do
417
+ @base_locale = I18n.locale
418
+ I18n.locale = :ja
419
+ test.seq = ['1', '2', '1']
420
+ test.valid?
421
+ end
422
+ after do
423
+ I18n.locale = @base_locale
424
+ end
425
+ it "error messsage is translated" do
426
+ expect(test.errors.full_messages.first).to eq 'Seq は重複する値を含んでいます'
427
+ end
428
+ end
429
+ end# }}}
430
+
431
+ context "when given message option" do# {{{
432
+ let(:test) { ValuesUniquenessTestWithMessageOption.new }
433
+
434
+ context "when invalid" do
435
+ before do
436
+ test.seq = ['1', '2', '1']
437
+ test.valid?
438
+ end
439
+ it "error messsage uses given message" do
440
+ expect(test.errors.full_messages.first).to eq 'Seq is invalid'
441
+ end
442
+ end
443
+ context "when using i18n" do
444
+ before do
445
+ @base_locale = I18n.locale
446
+ I18n.locale = :ja
447
+ test.seq = ['1', '2', '1']
448
+ test.valid?
449
+ end
450
+ after do
451
+ I18n.locale = @base_locale
452
+ end
453
+ it "error messsage is not translated" do
454
+ expect(test.errors.full_messages.first).to eq 'Seq is invalid'
455
+ end
456
+ end
457
+ end# }}}
458
+ end
459
+ end
460
+
@@ -0,0 +1,27 @@
1
+ # coding: utf-8
2
+ require "test_class/model_base"
3
+
4
+ class ValuesUniquenessTestWithoutOption < ModelBase
5
+ attr_accessor :seq
6
+
7
+ validates :seq, :values_uniqueness => true
8
+ end
9
+
10
+ class ValuesUniquenessTestWithIgnoreNilValueOption < ModelBase
11
+ attr_accessor :seq
12
+
13
+ validates :seq, :values_uniqueness => { :ignore_nil_value => true }
14
+ end
15
+
16
+ class ValuesUniquenessTestWithIgnoreBlankValueOption < ModelBase
17
+ attr_accessor :seq
18
+
19
+ validates :seq, :values_uniqueness => { :ignore_blank_value => true }
20
+ end
21
+
22
+ class ValuesUniquenessTestWithMessageOption < ModelBase
23
+ attr_accessor :seq
24
+
25
+ validates :seq, :values_uniqueness => { :message => "is invalid" }
26
+ end
27
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: detox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - pinzolo
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-07 00:00:00.000000000 Z
11
+ date: 2013-11-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activemodel
@@ -106,6 +106,7 @@ files:
106
106
  - lib/detox/validations/any.rb
107
107
  - lib/detox/validations/ordering.rb
108
108
  - lib/detox/validations/possession.rb
109
+ - lib/detox/validations/values_uniqueness.rb
109
110
  - lib/detox/validity_broker.rb
110
111
  - lib/detox/version.rb
111
112
  - spec/detox/array_validity_spec.rb
@@ -128,6 +129,7 @@ files:
128
129
  - spec/detox/validations/any_validator_check_validity_spec.rb
129
130
  - spec/detox/validations/ordering_spec.rb
130
131
  - spec/detox/validations/possession_spec.rb
132
+ - spec/detox/validations/values_uniqueness_spec.rb
131
133
  - spec/detox/validity_broker_spec.rb
132
134
  - spec/spec_helper.rb
133
135
  - spec/test_class/all_absence_test.rb
@@ -150,6 +152,7 @@ files:
150
152
  - spec/test_class/model_base.rb
151
153
  - spec/test_class/ordering_test.rb
152
154
  - spec/test_class/possession_test.rb
155
+ - spec/test_class/values_uniqueness_test.rb
153
156
  homepage: https://github.com/pinzolo/detox
154
157
  licenses:
155
158
  - MIT
@@ -195,6 +198,7 @@ test_files:
195
198
  - spec/detox/validations/any_validator_check_validity_spec.rb
196
199
  - spec/detox/validations/ordering_spec.rb
197
200
  - spec/detox/validations/possession_spec.rb
201
+ - spec/detox/validations/values_uniqueness_spec.rb
198
202
  - spec/detox/validity_broker_spec.rb
199
203
  - spec/spec_helper.rb
200
204
  - spec/test_class/all_absence_test.rb
@@ -217,3 +221,4 @@ test_files:
217
221
  - spec/test_class/model_base.rb
218
222
  - spec/test_class/ordering_test.rb
219
223
  - spec/test_class/possession_test.rb
224
+ - spec/test_class/values_uniqueness_test.rb