active_model_validators_ex 0.0.3 → 0.3.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 854badf7303345d29a041e94264d9db10b3157c7
4
- data.tar.gz: 067a7ec5466cb199761cb861a4ef431e6a2dc53f
3
+ metadata.gz: fb623b9155719e88023b83b4833516fa09a614a0
4
+ data.tar.gz: d0a82d484adf8b88c4c2e0f07d2d3670fb963b33
5
5
  SHA512:
6
- metadata.gz: 9d9a52f18b2251efb6985fb8aa303f5ccb3b26c60893452029044513059cb8423707ea0f193edff321c693e51b6130943170109957027292165bdfdc552c2203
7
- data.tar.gz: 4e15babcff28e0ff909fc4fb6f5ff07cc3d102fab4836fce07cb3941a6c61f6c36d235e2b9fddee69a325fbb6f7a415d243821e8ba804f6e50b8200a98c54556
6
+ metadata.gz: 0673775f33792232fd1ffc390dad636a0879f0b86821728784728b0cca87d5d8c4073e4ee66d16356a81d4ee708b7a9bd64d1096690e14e632f162fcabf32361
7
+ data.tar.gz: d0742f05524b44c5dffec0c6a951a102705a1965fa024458ced3374b6dd08241d1329eaa5cc65ebabfc670311568840463063944d507720f31fee9bfefa79491
data/README.md CHANGED
@@ -29,8 +29,8 @@ validations:
29
29
 
30
30
  * ArrayInclusionValidator
31
31
 
32
- Allow you to validate if values in an array is included in a specified range
33
- (meaning the value itself has to be an Array). As an example:
32
+ Validates if attribute value is an Array, containing values defined under key
33
+ :in (this can be defined either with an Array or Range). As an example:
34
34
 
35
35
  class ExampleModel
36
36
  include Mongoid::Document
@@ -38,12 +38,16 @@ validations:
38
38
  field :array
39
39
 
40
40
  validates :array, array_inclusion: {
41
- # the collection of valid values for array elements
42
- in: [0, 1, 2], # it could also be written as a range: 0..2
41
+ # the collection of values to compare with each element in array
42
+ in: [0, 1, 2], # this could also be written as a range: 0..2
43
43
 
44
44
  # can be either true or false, indicates if nil is accepted
45
45
  # defaults to false
46
- allow_nil: true
46
+ allow_nil: true,
47
+
48
+ # can be either true or false, indicates if it accepts empty arrays
49
+ # defaults to false
50
+ allow_empty: true
47
51
  }
48
52
  end
49
53
 
@@ -53,9 +57,39 @@ validations:
53
57
  # returns false
54
58
  ExampleModel.new(array: [1, 2, 5]).valid?
55
59
 
60
+ # returns true
61
+ ExampleModel.new(array: []).valid?
62
+
63
+ * ArrayFormatValidator
64
+
65
+ class ExampleModel
66
+ include Mongoid::Document
67
+
68
+ field :array
69
+
70
+ validates :array, array_format: {
71
+ # the regexp to compare each element in array
72
+ with: /(some|match|string)/
73
+
74
+ # can be either true or false, indicates if nil is accepted
75
+ # defaults to false
76
+ allow_nil: true,
77
+
78
+ # can be either true or false, indicates if it accepts empty arrays
79
+ # defaults to false
80
+ allow_empty: true
81
+ }
82
+ end
83
+
84
+ # returns true
85
+ ExampleModel.new(array: ['some', 'match', 'string']).valid?
86
+
87
+ # return false
88
+ ExampleModel.new(array: ['not', 'matching']).valid?
89
+
56
90
  * TimeFormatValidator
57
91
 
58
- Allow you to check if given value is parsable to Time, example:
92
+ Validates if value is of type Time or a string parsable to Time, example:
59
93
 
60
94
  class ExampleModel < ActiveRecord::Base
61
95
  attr_accessible :time
@@ -8,9 +8,8 @@ Gem::Specification.new do |spec|
8
8
  spec.version = ActiveModelValidatorsEx::VERSION
9
9
  spec.authors = ["junhanamaki"]
10
10
  spec.email = ["jun.hanamaki@gmail.com"]
11
- spec.summary = %q{Some custom validators for ActiveModel}
12
- spec.description = %q{Extend ActiveModel with more validators for your
13
- models.}
11
+ spec.summary = %q{Custom validators for ActiveModel}
12
+ spec.description = %q{Add more validators for your ActiveModel models.}
14
13
  spec.homepage = "https://github.com/junhanamaki/active_model_validators_ex"
15
14
  spec.license = "MIT"
16
15
 
@@ -19,6 +18,8 @@ Gem::Specification.new do |spec|
19
18
  spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
20
19
  spec.require_paths = ["lib"]
21
20
 
21
+ spec.required_ruby_version = '>= 1.9.3'
22
+
22
23
  spec.add_development_dependency 'bundler', '~> 1.6'
23
24
  spec.add_development_dependency 'rspec', '~> 3.0'
24
25
  spec.add_development_dependency 'simplecov', '~> 0.9'
@@ -1,4 +1,6 @@
1
1
  require 'active_model_validators_ex/version'
2
+ require 'active_model_validators_ex/array_validator_base'
3
+ require 'active_model_validators_ex/array_format_validator'
2
4
  require 'active_model_validators_ex/array_inclusion_validator'
3
5
  require 'active_model_validators_ex/time_format_validator'
4
6
 
@@ -0,0 +1,19 @@
1
+ require 'active_model_validators_ex/array_validator_base'
2
+
3
+ class ArrayFormatValidator < ArrayValidatorBase
4
+ def initialize(options)
5
+ unless options.key?(:with) && options[:with].is_a?(Regexp)
6
+ raise 'key with must be present, and value must be a Regexp'
7
+ end
8
+
9
+ super(options)
10
+ end
11
+
12
+ def custom_validations(record, attribute, value)
13
+ unless value.all? { |val| !val.match(options[:with]).nil? }
14
+ record.errors[attribute] <<
15
+ "attribute #{attribute} must be an Array with values that matches " \
16
+ "#{options[:with]}"
17
+ end
18
+ end
19
+ end
@@ -1,28 +1,21 @@
1
- class ArrayInclusionValidator < ActiveModel::EachValidator
1
+ require 'active_model_validators_ex/array_validator_base'
2
+
3
+ class ArrayInclusionValidator < ArrayValidatorBase
2
4
  def initialize(options)
3
5
  unless options.key?(:in) &&
4
6
  (options[:in].is_a?(Array) ||
5
7
  options[:in].is_a?(Range))
6
- raise 'key :in can not be nil, and value must be either an Array or Range'
8
+ raise 'key in must be present, and value must be either a Range or Array'
7
9
  end
8
10
 
9
11
  super(options)
10
12
  end
11
13
 
12
- def validate_each(record, attribute, value)
13
- return if value.nil? and options[:allow_nil]
14
-
15
- unless value.is_a? Array
16
- record.errors[attribute] <<
17
- "expecting either Array or nil for attribute #{attribute}"
18
- return
19
- end
20
-
14
+ def custom_validations(record, attribute, value)
21
15
  unless value.all? { |val| options[:in].include?(val) }
22
16
  record.errors[attribute] <<
23
17
  "attribute #{attribute} has be an array composed of values " \
24
- " #{options[:in]}"
25
- return
18
+ "#{options[:in]}"
26
19
  end
27
20
  end
28
21
  end
@@ -0,0 +1,28 @@
1
+ class ArrayValidatorBase < ActiveModel::EachValidator
2
+ def initialize(options)
3
+ options[:allow_nil] ||= false
4
+ options[:allow_empty] ||= false
5
+
6
+ super(options)
7
+ end
8
+
9
+ def validate_each(record, attribute, value)
10
+ return if options[:allow_nil] && value.nil?
11
+
12
+ unless value.is_a? Array
13
+ record.errors[attribute] << "attribute #{attribute} must be an Array"
14
+ return
15
+ end
16
+
17
+ if !options[:allow_empty] and value.empty?
18
+ record.errors[attribute] << "attribute #{attribute} can't be empty"
19
+ return
20
+ end
21
+
22
+ custom_validations(record, attribute, value)
23
+ end
24
+
25
+ def custom_validations(record, attribute, value)
26
+ raise 'override this method to perform custom validations'
27
+ end
28
+ end
@@ -1,3 +1,3 @@
1
1
  module ActiveModelValidatorsEx
2
- VERSION = "0.0.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -0,0 +1,55 @@
1
+ require 'spec_helper'
2
+
3
+ describe ArrayFormatValidator do
4
+ describe '.new' do
5
+ context 'when key with is not present in argument hash' do
6
+ let(:options) { { attributes: :something } }
7
+
8
+ it 'raises error' do
9
+ expect do
10
+ ArrayFormatValidator.new(options)
11
+ end.to raise_error
12
+ end
13
+ end
14
+
15
+ context 'when key with is a non Regexp value' do
16
+ let(:options) { { attributes: :something, with: 'not an regexp' } }
17
+
18
+ it 'raises error' do
19
+ expect do
20
+ ArrayFormatValidator.new(options)
21
+ end.to raise_error
22
+ end
23
+ end
24
+ end
25
+
26
+ describe '#validate_each' do
27
+ let(:record) { MockRecord.new(attribute) }
28
+ let(:attribute) { :array }
29
+ let(:validator) { ArrayFormatValidator.new(options) }
30
+ before { validator.validate_each(record, attribute, value) }
31
+
32
+ context 'for instance initialized with regexp value in key :with' do
33
+ let(:regexp) { /(testing|one|two)/ }
34
+ let(:options) do
35
+ { attributes: attribute, with: regexp }
36
+ end
37
+
38
+ context 'when value is an Array with values that match regexp' do
39
+ let(:value) { ['testing', 'one', 'two'] }
40
+
41
+ it 'does not set error messages in record' do
42
+ expect(record.errors[attribute].count).to eq(0)
43
+ end
44
+ end
45
+
46
+ context 'when value is an array with values that do not match regexp' do
47
+ let(:value) { ['i do not match'] }
48
+
49
+ it 'sets error message in record' do
50
+ expect(record.errors[attribute].count).to eq(1)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
@@ -19,147 +19,10 @@ describe ArrayInclusionValidator do
19
19
  let(:validator) { ArrayInclusionValidator.new(options) }
20
20
  before { validator.validate_each(record, attribute, value) }
21
21
 
22
- context 'for instance initialized with options hash ' \
23
- 'key :in with empty array as value' do
24
- let(:options) { { attributes: attribute, in: [] } }
25
-
26
- context 'when passed value is nil' do
27
- let(:value) { nil }
28
-
29
- it 'sets error message in record, under passed attribute key' do
30
- expect(record.errors[attribute].count).to eq(1)
31
- end
32
- end
33
-
34
- context 'when passed value is a non nil, non array value' do
35
- let(:value) { :symbol }
36
-
37
- it 'sets error message in record' do
38
- expect(record.errors[attribute].count).to eq(1)
39
- end
40
- end
41
-
42
- context 'when passed value is an empty array' do
43
- let(:value) { [] }
44
-
45
- it 'does not set error messages in record' do
46
- expect(record.errors[attribute].count).to eq(0)
47
- end
48
- end
49
-
50
- context 'when passed value is an array with values' do
51
- let(:value) { [1, 2, 3] }
52
-
53
- it 'sets error message in record, under passed attribute key' do
54
- expect(record.errors[attribute].count).to eq(1)
55
- end
56
- end
57
- end
58
-
59
- context 'for instance initialized with options hash ' \
60
- 'key :in with empty array as value, ' \
61
- 'allow_nil as false' do
62
- let(:options) { { attributes: attribute, in: [], allow_nil: false } }
63
-
64
- context 'when passed value is nil' do
65
- let(:value) { nil }
66
-
67
- it 'sets error message in record, under passed attribute key' do
68
- expect(record.errors[attribute].count).to eq(1)
69
- end
70
- end
71
-
72
- context 'when passed value is a non nil, non array value' do
73
- let(:value) { :symbol }
74
-
75
- it 'sets error message in record' do
76
- expect(record.errors[attribute].count).to eq(1)
77
- end
78
- end
79
-
80
- context 'when passed value is an empty array' do
81
- let(:value) { [] }
82
-
83
- it 'does not set error messages in record' do
84
- expect(record.errors[attribute].count).to eq(0)
85
- end
86
- end
87
-
88
- context 'when passed value is an array with values' do
89
- let(:value) { [1, 2, 3] }
90
-
91
- it 'sets error message in record, under passed attribute key' do
92
- expect(record.errors[attribute].count).to eq(1)
93
- end
94
- end
95
- end
96
-
97
- context 'for instance initialized with options hash ' \
98
- 'key :in with empty array as value, ' \
99
- 'allow_nil as true' do
100
- let(:options) { { attributes: attribute, in: [], allow_nil: true } }
101
-
102
- context 'when passed value is nil' do
103
- let(:value) { nil }
104
-
105
- it 'does not set error messages in record' do
106
- expect(record.errors[attribute].count).to eq(0)
107
- end
108
- end
109
-
110
- context 'when passed value is a non nil, non array value' do
111
- let(:value) { :symbol }
112
-
113
- it 'sets error message in record' do
114
- expect(record.errors[attribute].count).to eq(1)
115
- end
116
- end
117
-
118
- context 'when passed value is an empty array' do
119
- let(:value) { [] }
120
-
121
- it 'does not set error messages in record' do
122
- expect(record.errors[attribute].count).to eq(0)
123
- end
124
- end
125
-
126
- context 'when passed value is an array with values' do
127
- let(:value) { [1, 2, 3] }
128
-
129
- it 'sets error message in record, under passed attribute key' do
130
- expect(record.errors[attribute].count).to eq(1)
131
- end
132
- end
133
- end
134
-
135
- context 'for instance initialized with options hash ' \
136
- 'key :in with array with values as value, ' \
137
- 'allow_nil as true' do
22
+ context 'for instance initialized with key in with an Array of values' do
138
23
  let(:in_array) { [1, 2, 3] }
139
- let(:options) { { attributes: attribute, in: in_array, allow_nil: true } }
140
-
141
- context 'when passed value is nil' do
142
- let(:value) { nil }
143
-
144
- it 'does not set error messages in record' do
145
- expect(record.errors[attribute].count).to eq(0)
146
- end
147
- end
148
-
149
- context 'when passed value is a non nil, non array value' do
150
- let(:value) { :symbol }
151
-
152
- it 'sets error message in record' do
153
- expect(record.errors[attribute].count).to eq(1)
154
- end
155
- end
156
-
157
- context 'when passed value is an empty array' do
158
- let(:value) { [] }
159
-
160
- it 'does not set error messages in record' do
161
- expect(record.errors[attribute].count).to eq(0)
162
- end
24
+ let(:options) do
25
+ { attributes: attribute, in: in_array }
163
26
  end
164
27
 
165
28
  context 'when passed value is an array with values that are in options array' do
@@ -179,37 +42,13 @@ describe ArrayInclusionValidator do
179
42
  end
180
43
  end
181
44
 
182
- context 'for instance initialized with options hash ' \
183
- 'key :in with range with values as value, ' \
184
- 'allow_nil as false' do
45
+ context 'for instance initialized with key in with a Range of values' do
185
46
  let(:in_range) { 1..3 }
186
- let(:options) { { attributes: attribute, in: in_range, allow_nil: false } }
187
-
188
- context 'when passed value is nil' do
189
- let(:value) { nil }
190
-
191
- it 'sets error message in record' do
192
- expect(record.errors[attribute].count).to eq(1)
193
- end
47
+ let(:options) do
48
+ { attributes: attribute, in: in_range }
194
49
  end
195
50
 
196
- context 'when passed value is a non nil, non array value' do
197
- let(:value) { :symbol }
198
-
199
- it 'sets error message in record' do
200
- expect(record.errors[attribute].count).to eq(1)
201
- end
202
- end
203
-
204
- context 'when passed value is an empty array' do
205
- let(:value) { [] }
206
-
207
- it 'does not set error messages in record' do
208
- expect(record.errors[attribute].count).to eq(0)
209
- end
210
- end
211
-
212
- context 'when passed value is an array with values that are in options range' do
51
+ context 'when passed value is an array with values that are in options array' do
213
52
  let(:value) { [1, 2, 3] }
214
53
 
215
54
  it 'does not set error messages in record' do
@@ -217,7 +56,7 @@ describe ArrayInclusionValidator do
217
56
  end
218
57
  end
219
58
 
220
- context 'when passed value is an array with values not in options range' do
59
+ context 'when passed value is an array with values not in options array' do
221
60
  let(:value) { [4, 5, 6] }
222
61
 
223
62
  it 'sets error message in record' do
@@ -0,0 +1,152 @@
1
+ require 'spec_helper'
2
+
3
+ describe ArrayValidatorBase do
4
+ describe '.custom_validations' do
5
+ context 'if method is not overridden' do
6
+ it 'raises error' do
7
+ expect do
8
+ validator.custom_validations(nil, nil, nil)
9
+ end.to raise_error
10
+ end
11
+ end
12
+ end
13
+
14
+ describe '.validate_each' do
15
+ let(:record) { MockRecord.new(attribute) }
16
+ let(:attribute) { :a }
17
+ let(:validator) { ArrayValidatorBase.new(options) }
18
+ before do
19
+ validator.validate_each(record, attribute, value) rescue nil
20
+ end
21
+
22
+ shared_examples_for :common_behavior do
23
+ context 'and value is a non nil, non array value' do
24
+ let(:value) { :symbol }
25
+
26
+ it 'sets error message in record' do
27
+ expect(record.errors[attribute].count).to eq(1)
28
+ end
29
+ end
30
+ end
31
+
32
+ shared_examples_for :allow_nil_true do
33
+ context 'and value is nil' do
34
+ let(:value) { nil }
35
+
36
+ it 'does not set error messages in record' do
37
+ expect(record.errors[attribute].count).to eq(0)
38
+ end
39
+ end
40
+ end
41
+
42
+ shared_examples_for :allow_nil_false do
43
+ context 'and value is nil' do
44
+ let(:value) { nil }
45
+
46
+ it 'sets error message in record' do
47
+ expect(record.errors[attribute].count).to eq(1)
48
+ end
49
+ end
50
+ end
51
+
52
+ shared_examples_for :allow_empty_true do
53
+ context 'and value is an empty Array' do
54
+ let(:value) { [] }
55
+
56
+ it 'does not set error messages in record' do
57
+ expect(record.errors[attribute].count).to eq(0)
58
+ end
59
+ end
60
+ end
61
+
62
+ shared_examples_for :allow_empty_false do
63
+ context 'and value is an empty Array' do
64
+ let(:value) { [] }
65
+
66
+ it 'set error messager in record' do
67
+ expect(record.errors[attribute].count).to eq(1)
68
+ end
69
+ end
70
+ end
71
+
72
+ context 'for instance initialized with no options (defaults test)' do
73
+ let(:options) { { attributes: attribute } }
74
+
75
+ it_behaves_like :common_behavior
76
+ it_behaves_like :allow_nil_false
77
+ it_behaves_like :allow_empty_false
78
+ end
79
+
80
+ context 'for instance initialized with allow_empty true' do
81
+ let(:options) { { attributes: attribute, allow_empty: true } }
82
+
83
+ it_behaves_like :common_behavior
84
+ it_behaves_like :allow_nil_false
85
+ it_behaves_like :allow_empty_true
86
+ end
87
+
88
+ context 'for instance initialized with allow_empty false' do
89
+ let(:options) { { attributes: attribute, allow_empty: false } }
90
+
91
+ it_behaves_like :common_behavior
92
+ it_behaves_like :allow_nil_false
93
+ it_behaves_like :allow_empty_false
94
+ end
95
+
96
+ context 'for instance initialized with allow_nil true' do
97
+ let(:options) { { attributes: attribute, allow_nil: true } }
98
+
99
+ it_behaves_like :common_behavior
100
+ it_behaves_like :allow_nil_true
101
+ it_behaves_like :allow_empty_false
102
+
103
+ context 'and allow_empty true' do
104
+ let(:options) do
105
+ { attributes: attribute, allow_nil: true, allow_empty: true }
106
+ end
107
+
108
+ it_behaves_like :common_behavior
109
+ it_behaves_like :allow_nil_true
110
+ it_behaves_like :allow_empty_true
111
+ end
112
+
113
+ context 'and allow_empty false' do
114
+ let(:options) do
115
+ { attributes: attribute, allow_nil: true, allow_empty: false }
116
+ end
117
+
118
+ it_behaves_like :common_behavior
119
+ it_behaves_like :allow_nil_true
120
+ it_behaves_like :allow_empty_false
121
+ end
122
+ end
123
+
124
+ context 'for instance initialized with allow_nil false' do
125
+ let(:options) { { attributes: attribute, allow_nil: false } }
126
+
127
+ it_behaves_like :common_behavior
128
+ it_behaves_like :allow_nil_false
129
+ it_behaves_like :allow_empty_false
130
+
131
+ context 'and allow_empty true' do
132
+ let(:options) do
133
+ { attributes: attribute, allow_nil: false, allow_empty: true }
134
+ end
135
+
136
+ it_behaves_like :common_behavior
137
+ it_behaves_like :allow_nil_false
138
+ it_behaves_like :allow_empty_true
139
+ end
140
+
141
+ context 'and allow_empty false' do
142
+ let(:options) do
143
+ { attributes: attribute, allow_nil: false, allow_empty: false }
144
+ end
145
+
146
+ it_behaves_like :common_behavior
147
+ it_behaves_like :allow_nil_false
148
+ it_behaves_like :allow_empty_false
149
+ end
150
+ end
151
+ end
152
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_model_validators_ex
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - junhanamaki
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-06 00:00:00.000000000 Z
11
+ date: 2014-08-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,9 +94,7 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '4.1'
97
- description: |-
98
- Extend ActiveModel with more validators for your
99
- models.
97
+ description: Add more validators for your ActiveModel models.
100
98
  email:
101
99
  - jun.hanamaki@gmail.com
102
100
  executables: []
@@ -114,10 +112,14 @@ files:
114
112
  - Rakefile
115
113
  - active_model_validators_ex.gemspec
116
114
  - lib/active_model_validators_ex.rb
115
+ - lib/active_model_validators_ex/array_format_validator.rb
117
116
  - lib/active_model_validators_ex/array_inclusion_validator.rb
117
+ - lib/active_model_validators_ex/array_validator_base.rb
118
118
  - lib/active_model_validators_ex/time_format_validator.rb
119
119
  - lib/active_model_validators_ex/version.rb
120
+ - spec/active_model_validators_ex/array_format_validator_spec.rb
120
121
  - spec/active_model_validators_ex/array_inclusion_validator_spec.rb
122
+ - spec/active_model_validators_ex/array_validator_base_spec.rb
121
123
  - spec/active_model_validators_ex/time_format_validator_spec.rb
122
124
  - spec/mock_objects/mock_record.rb
123
125
  - spec/spec_helper.rb
@@ -133,7 +135,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
133
135
  requirements:
134
136
  - - ">="
135
137
  - !ruby/object:Gem::Version
136
- version: '0'
138
+ version: 1.9.3
137
139
  required_rubygems_version: !ruby/object:Gem::Requirement
138
140
  requirements:
139
141
  - - ">="
@@ -144,9 +146,11 @@ rubyforge_project:
144
146
  rubygems_version: 2.2.2
145
147
  signing_key:
146
148
  specification_version: 4
147
- summary: Some custom validators for ActiveModel
149
+ summary: Custom validators for ActiveModel
148
150
  test_files:
151
+ - spec/active_model_validators_ex/array_format_validator_spec.rb
149
152
  - spec/active_model_validators_ex/array_inclusion_validator_spec.rb
153
+ - spec/active_model_validators_ex/array_validator_base_spec.rb
150
154
  - spec/active_model_validators_ex/time_format_validator_spec.rb
151
155
  - spec/mock_objects/mock_record.rb
152
156
  - spec/spec_helper.rb