schema_validations 2.2.0 → 2.2.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 +4 -4
- data/README.md +5 -0
- data/gemfiles/activerecord-5.0/Gemfile.base +1 -1
- data/lib/schema_validations.rb +1 -0
- data/lib/schema_validations/active_record/validations.rb +6 -1
- data/lib/schema_validations/validators/not_nil_validator.rb +11 -0
- data/lib/schema_validations/version.rb +1 -1
- data/spec/validations_spec.rb +135 -72
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4d32813f578be832c807834e301af6646a5de2e8
|
4
|
+
data.tar.gz: 8f6d05bc4a8ee9230d2db146823ffa87ac2b16a1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e41b110b12a186b3cacce1280ae74279e83b8b8be5296cdcedd43fe27fa258609ce79226b6b8c9cf0b034ac78633c319d696a76c6cc67d119119defb396edabd
|
7
|
+
data.tar.gz: ae10f5ffc2434e9e0f4470225fed144f37bc217864f487c8b391df20836d43f42029136a75213b4117623199ec967a97f8f97f87bb804038885becdb2f090e22
|
data/README.md
CHANGED
@@ -187,6 +187,11 @@ Earlier versions of SchemaValidations supported:
|
|
187
187
|
|
188
188
|
## Release Notes
|
189
189
|
|
190
|
+
### 2.2.1
|
191
|
+
|
192
|
+
* Bug fix: don't create presence validation for `null: false` with a
|
193
|
+
default defined (#18, #49)
|
194
|
+
|
190
195
|
### 2.2.0
|
191
196
|
|
192
197
|
* Works with AR 5.0. Thanks to [@plicjo](https://github.coms/plicjo).
|
data/lib/schema_validations.rb
CHANGED
@@ -123,7 +123,12 @@ module SchemaValidations
|
|
123
123
|
if datatype == :boolean
|
124
124
|
validate_logged :validates_inclusion_of, name, :in => [true, false], :message => :blank
|
125
125
|
else
|
126
|
-
|
126
|
+
if !column.default.nil? && column.default.blank?
|
127
|
+
validate_logged :validates_with, SchemaValidations::Validators::NotNilValidator, attributes: [name]
|
128
|
+
else
|
129
|
+
# Validate presence
|
130
|
+
validate_logged :validates_presence_of, name
|
131
|
+
end
|
127
132
|
end
|
128
133
|
end
|
129
134
|
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module SchemaValidations
|
2
|
+
module Validators
|
3
|
+
# Validates that the field is not nil?
|
4
|
+
# (Unlike the standard PresenceValidator which uses #blank?)
|
5
|
+
class NotNilValidator < ActiveModel::EachValidator
|
6
|
+
def validate_each(record, attr_name, value)
|
7
|
+
record.errors.add(attr_name, :blank, options) if value.nil?
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
data/spec/validations_spec.rb
CHANGED
@@ -5,34 +5,34 @@ describe "Validations" do
|
|
5
5
|
before(:each) do
|
6
6
|
ActiveRecord::Schema.define do
|
7
7
|
|
8
|
-
create_table :articles, :
|
9
|
-
t.string :title, :
|
10
|
-
t.text :content, :
|
8
|
+
create_table :articles, force: true do |t|
|
9
|
+
t.string :title, limit: 50
|
10
|
+
t.text :content, null: false
|
11
11
|
t.integer :state
|
12
12
|
t.integer :votes
|
13
|
-
t.float :average_mark, :
|
14
|
-
t.boolean :active, :
|
15
|
-
t.decimal :max10, :
|
16
|
-
t.decimal :arbitrary, :
|
17
|
-
t.decimal :max100, :
|
13
|
+
t.float :average_mark, null: false
|
14
|
+
t.boolean :active, null: false
|
15
|
+
t.decimal :max10, precision: 2, scale: 1
|
16
|
+
t.decimal :arbitrary, precision: nil, scale: nil
|
17
|
+
t.decimal :max100, precision: 2, scale: nil
|
18
18
|
end
|
19
|
-
add_index :articles, :title, :
|
20
|
-
add_index :articles, [:state, :active], :
|
19
|
+
add_index :articles, :title, unique: true
|
20
|
+
add_index :articles, [:state, :active], unique: true
|
21
21
|
|
22
|
-
create_table :reviews, :
|
23
|
-
t.integer :article_id, :
|
24
|
-
t.string :author, :
|
25
|
-
t.string :content, :
|
22
|
+
create_table :reviews, force: true do |t|
|
23
|
+
t.integer :article_id, null: false
|
24
|
+
t.string :author, null: false
|
25
|
+
t.string :content, limit: 200
|
26
26
|
t.string :type
|
27
|
-
t.timestamps :
|
27
|
+
t.timestamps null: false
|
28
28
|
end
|
29
|
-
add_index :reviews, :article_id, :
|
29
|
+
add_index :reviews, :article_id, unique: true
|
30
30
|
|
31
|
-
create_table :article_reviews, :
|
31
|
+
create_table :article_reviews, force: true do |t|
|
32
32
|
t.integer :article_id
|
33
33
|
t.integer :review_id
|
34
34
|
end
|
35
|
-
add_index :article_reviews, [:article_id, :review_id], :
|
35
|
+
add_index :article_reviews, [:article_id, :review_id], unique: true
|
36
36
|
end
|
37
37
|
end
|
38
38
|
|
@@ -43,8 +43,8 @@ describe "Validations" do
|
|
43
43
|
|
44
44
|
class Review < ActiveRecord::Base
|
45
45
|
belongs_to :article
|
46
|
-
belongs_to :news_article, :
|
47
|
-
schema_validations :
|
46
|
+
belongs_to :news_article, class_name: 'Article', foreign_key: :article_id
|
47
|
+
schema_validations except: :content
|
48
48
|
end
|
49
49
|
|
50
50
|
class ArticleReview < ActiveRecord::Base
|
@@ -81,15 +81,15 @@ describe "Validations" do
|
|
81
81
|
end
|
82
82
|
|
83
83
|
it "should check title length" do
|
84
|
-
expect(Article.new(:
|
84
|
+
expect(Article.new(title: 'a' * 100).error_on(:title).size).to eq(1)
|
85
85
|
end
|
86
86
|
|
87
87
|
it "should validate state numericality" do
|
88
|
-
expect(Article.new(:
|
88
|
+
expect(Article.new(state: 'unknown').error_on(:state).size).to eq(1)
|
89
89
|
end
|
90
90
|
|
91
91
|
it "should validate if state is integer" do
|
92
|
-
expect(Article.new(:
|
92
|
+
expect(Article.new(state: 1.23).error_on(:state).size).to eq(1)
|
93
93
|
end
|
94
94
|
|
95
95
|
it "should validate the range of votes" do
|
@@ -115,28 +115,28 @@ describe "Validations" do
|
|
115
115
|
expect(Article.new(max100: -100).error_on(:max100).size).to eq(1)
|
116
116
|
end
|
117
117
|
|
118
|
-
it "should not validate the range of arbitrary decimal", :
|
118
|
+
it "should not validate the range of arbitrary decimal", mysql: :skip do # mysql provides a default precision
|
119
119
|
expect(Article.new(arbitrary: Float::MAX).error_on(:arbitrary).size).to eq(0)
|
120
120
|
end
|
121
121
|
|
122
122
|
it "should validate average_mark numericality" do
|
123
|
-
expect(Article.new(:
|
123
|
+
expect(Article.new(average_mark: "high").error_on(:average_mark).size).to eq(1)
|
124
124
|
end
|
125
125
|
|
126
126
|
it "should validate boolean fields" do
|
127
|
-
expect(Article.new(:
|
127
|
+
expect(Article.new(active: nil).error_on(:active).size).to eq(1)
|
128
128
|
end
|
129
129
|
|
130
130
|
it "should validate title uniqueness" do
|
131
131
|
article1 = Article.create(valid_article_attributes)
|
132
|
-
article2 = Article.new(:
|
132
|
+
article2 = Article.new(title: valid_article_attributes[:title])
|
133
133
|
expect(article2.error_on(:title).size).to eq(1)
|
134
134
|
article1.destroy
|
135
135
|
end
|
136
136
|
|
137
137
|
it "should validate state uniqueness in scope of 'active' value" do
|
138
138
|
article1 = Article.create(valid_article_attributes)
|
139
|
-
article2 = Article.new(valid_article_attributes.merge(:
|
139
|
+
article2 = Article.new(valid_article_attributes.merge(title: 'SchemaPlus 2.0 released'))
|
140
140
|
expect(article2).not_to be_valid
|
141
141
|
article2.toggle(:active)
|
142
142
|
expect(article2).to be_valid
|
@@ -151,9 +151,9 @@ describe "Validations" do
|
|
151
151
|
it "should validate uniqueness of belongs_to association" do
|
152
152
|
article = Article.create(valid_article_attributes)
|
153
153
|
expect(article).to be_valid
|
154
|
-
review1 = Review.create(:
|
154
|
+
review1 = Review.create(article: article, author: 'michal')
|
155
155
|
expect(review1).to be_valid
|
156
|
-
review2 = Review.new(:
|
156
|
+
review2 = Review.new(article: article, author: 'michal')
|
157
157
|
expect(review2.error_on(:article_id).size).to be >= 1
|
158
158
|
end
|
159
159
|
|
@@ -162,18 +162,81 @@ describe "Validations" do
|
|
162
162
|
end
|
163
163
|
|
164
164
|
it "should not validate uniqueness when scope is absent" do
|
165
|
-
article_review_1 = ArticleReview.create(:
|
165
|
+
article_review_1 = ArticleReview.create(article_id: 1, review_id: nil)
|
166
166
|
expect(article_review_1).to be_valid
|
167
167
|
|
168
|
-
article_review_2 = ArticleReview.create(:
|
168
|
+
article_review_2 = ArticleReview.create(article_id: 1, review_id: nil)
|
169
169
|
expect(article_review_2).to be_valid
|
170
170
|
|
171
|
-
article_review_3 = ArticleReview.create(:
|
171
|
+
article_review_3 = ArticleReview.create(article_id: nil, review_id: 1)
|
172
172
|
expect(article_review_3).to be_valid
|
173
173
|
|
174
|
-
article_review_4 = ArticleReview.create(:
|
174
|
+
article_review_4 = ArticleReview.create(article_id: nil, review_id: 1)
|
175
175
|
expect(article_review_4).to be_valid
|
176
176
|
end
|
177
|
+
|
178
|
+
context 'when NOT NULL validations' do
|
179
|
+
before(:each) do
|
180
|
+
ActiveRecord::Schema.define do
|
181
|
+
create_table :anti_nulls, force: true do |t|
|
182
|
+
t.string :no_default, null: false
|
183
|
+
t.string :blank_default, default: '', null: false
|
184
|
+
t.string :non_blank_default, default: 'not blank', null: false
|
185
|
+
end
|
186
|
+
end
|
187
|
+
with_auto_validations do
|
188
|
+
class AntiNull < ActiveRecord::Base
|
189
|
+
def self.all_blank
|
190
|
+
@all_blank ||= AntiNull.new(
|
191
|
+
no_default: '',
|
192
|
+
blank_default: '',
|
193
|
+
non_blank_default: ''
|
194
|
+
)
|
195
|
+
end
|
196
|
+
|
197
|
+
def self.all_non_blank
|
198
|
+
@all_non_blank ||= AntiNull.new(
|
199
|
+
no_default: 'foo',
|
200
|
+
blank_default: 'bar',
|
201
|
+
non_blank_default: 'baz'
|
202
|
+
)
|
203
|
+
end
|
204
|
+
|
205
|
+
def self.all_nil
|
206
|
+
@all_nil ||= AntiNull.new(
|
207
|
+
no_default: nil,
|
208
|
+
blank_default: nil,
|
209
|
+
non_blank_default: nil
|
210
|
+
)
|
211
|
+
end
|
212
|
+
|
213
|
+
def self.non_null_with(**fields)
|
214
|
+
opts = { no_default: 'foo' }.merge!(fields)
|
215
|
+
AntiNull.new **opts
|
216
|
+
end
|
217
|
+
end
|
218
|
+
end
|
219
|
+
|
220
|
+
|
221
|
+
end
|
222
|
+
|
223
|
+
it 'should fail validation on empty fields only if the default value is not blank' do
|
224
|
+
expect(AntiNull.all_nil.error_on(:no_default).size).to eq(1)
|
225
|
+
expect(AntiNull.all_nil.error_on(:blank_default).size).to eq(1)
|
226
|
+
expect(AntiNull.all_nil.error_on(:non_blank_default).size).to eq(1)
|
227
|
+
end
|
228
|
+
|
229
|
+
it 'should fail validation on empty fields only if the default value is not blank' do
|
230
|
+
expect(AntiNull.all_blank.error_on(:no_default).size).to eq(1)
|
231
|
+
expect(AntiNull.all_blank.error_on(:non_blank_default).size).to eq(1)
|
232
|
+
expect(AntiNull.all_blank.error_on(:blank_default)).to be_empty
|
233
|
+
end
|
234
|
+
|
235
|
+
it 'should not fail if fields are neither nil nor empty' do
|
236
|
+
expect(AntiNull.all_non_blank).to be_valid
|
237
|
+
end
|
238
|
+
|
239
|
+
end
|
177
240
|
end
|
178
241
|
|
179
242
|
context "auto-created but changed" do
|
@@ -182,62 +245,62 @@ describe "Validations" do
|
|
182
245
|
class Article < ActiveRecord::Base ; end
|
183
246
|
class Review < ActiveRecord::Base
|
184
247
|
belongs_to :article
|
185
|
-
belongs_to :news_article, :
|
248
|
+
belongs_to :news_article, class_name: 'Article', foreign_key: :article_id
|
186
249
|
end
|
187
250
|
end
|
188
251
|
@too_big_content = 'a' * 1000
|
189
252
|
end
|
190
253
|
|
191
254
|
it "would normally have an error" do
|
192
|
-
@review = Review.new(:
|
255
|
+
@review = Review.new(content: @too_big_content)
|
193
256
|
expect(@review.error_on(:content).size).to eq(1)
|
194
257
|
expect(@review.error_on(:author).size).to eq(1)
|
195
258
|
end
|
196
259
|
|
197
260
|
it "shouldn't validate fields passed to :except option" do
|
198
|
-
Review.schema_validations :
|
199
|
-
@review = Review.new(:
|
261
|
+
Review.schema_validations except: :content
|
262
|
+
@review = Review.new(content: @too_big_content)
|
200
263
|
expect(@review.errors_on(:content).size).to eq(0)
|
201
264
|
expect(@review.error_on(:author).size).to eq(1)
|
202
265
|
end
|
203
266
|
|
204
267
|
it "shouldn't validate the fields in default whitelist" do
|
205
|
-
Review.schema_validations :
|
268
|
+
Review.schema_validations except: :content
|
206
269
|
expect(Review.new.error_on(:updated_at).size).to eq(0)
|
207
270
|
expect(Review.new.error_on(:created_at).size).to eq(0)
|
208
271
|
end
|
209
272
|
|
210
273
|
it "shouldn't validate the fields in whitelist" do
|
211
|
-
Review.schema_validations :
|
274
|
+
Review.schema_validations except: :content, whitelist: [:updated_at]
|
212
275
|
expect(Review.new.error_on(:updated_at).size).to eq(0)
|
213
276
|
expect(Review.new.error_on(:created_at).size).to eq(1)
|
214
277
|
end
|
215
278
|
|
216
279
|
it "shouldn't validate types passed to :except_type option using full validation" do
|
217
|
-
Review.schema_validations :
|
218
|
-
@review = Review.new(:
|
280
|
+
Review.schema_validations except_type: :validates_length_of
|
281
|
+
@review = Review.new(content: @too_big_content)
|
219
282
|
expect(@review.errors_on(:content).size).to eq(0)
|
220
283
|
expect(@review.error_on(:author).size).to eq(1)
|
221
284
|
end
|
222
285
|
|
223
286
|
it "shouldn't validate types passed to :except_type option using shorthand" do
|
224
|
-
Review.schema_validations :
|
225
|
-
@review = Review.new(:
|
287
|
+
Review.schema_validations except_type: :length
|
288
|
+
@review = Review.new(content: @too_big_content)
|
226
289
|
expect(@review.errors_on(:content).size).to eq(0)
|
227
290
|
expect(@review.error_on(:author).size).to eq(1)
|
228
291
|
end
|
229
292
|
|
230
293
|
it "should only validate type passed to :only_type option" do
|
231
|
-
Review.schema_validations :
|
232
|
-
@review = Review.new(:
|
294
|
+
Review.schema_validations only_type: :length
|
295
|
+
@review = Review.new(content: @too_big_content)
|
233
296
|
expect(@review.error_on(:content).size).to eq(1)
|
234
297
|
expect(@review.errors_on(:author).size).to eq(0)
|
235
298
|
end
|
236
299
|
|
237
300
|
|
238
301
|
it "shouldn't create validations if locally disabled" do
|
239
|
-
Review.schema_validations :
|
240
|
-
@review = Review.new(:
|
302
|
+
Review.schema_validations auto_create: false
|
303
|
+
@review = Review.new(content: @too_big_content)
|
241
304
|
expect(@review.errors_on(:content).size).to eq(0)
|
242
305
|
expect(@review.error_on(:author).size).to eq(0)
|
243
306
|
end
|
@@ -251,23 +314,23 @@ describe "Validations" do
|
|
251
314
|
before(:each) do
|
252
315
|
class Review < ActiveRecord::Base
|
253
316
|
belongs_to :article
|
254
|
-
belongs_to :news_article, :
|
317
|
+
belongs_to :news_article, class_name: 'Article', foreign_key: :article_id
|
255
318
|
end
|
256
319
|
@too_big_content = 'a' * 1000
|
257
320
|
end
|
258
321
|
|
259
322
|
it "should not create validation" do
|
260
|
-
expect(Review.new(:
|
323
|
+
expect(Review.new(content: @too_big_title).errors_on(:content).size).to eq(0)
|
261
324
|
end
|
262
325
|
|
263
326
|
it "should create validation if locally enabled explicitly" do
|
264
|
-
Review.schema_validations :
|
265
|
-
expect(Review.new(:
|
327
|
+
Review.schema_validations auto_create: true
|
328
|
+
expect(Review.new(content: @too_big_content).error_on(:content).size).to eq(1)
|
266
329
|
end
|
267
330
|
|
268
331
|
it "should create validation if locally enabled implicitly" do
|
269
332
|
Review.schema_validations
|
270
|
-
expect(Review.new(:
|
333
|
+
expect(Review.new(content: @too_big_content).error_on(:content).size).to eq(1)
|
271
334
|
end
|
272
335
|
|
273
336
|
end
|
@@ -275,18 +338,18 @@ describe "Validations" do
|
|
275
338
|
context "manually invoked" do
|
276
339
|
before(:each) do
|
277
340
|
class Article < ActiveRecord::Base ; end
|
278
|
-
Article.schema_validations :
|
341
|
+
Article.schema_validations only: [:title, :state]
|
279
342
|
|
280
343
|
class Review < ActiveRecord::Base
|
281
344
|
belongs_to :dummy_association
|
282
|
-
schema_validations :
|
345
|
+
schema_validations except: :content
|
283
346
|
end
|
284
347
|
end
|
285
348
|
|
286
349
|
it "should validate fields passed to :only option" do
|
287
350
|
too_big_title = 'a' * 100
|
288
351
|
wrong_state = 'unknown'
|
289
|
-
article = Article.new(:
|
352
|
+
article = Article.new(title: too_big_title, state: wrong_state)
|
290
353
|
expect(article.error_on(:title).size).to eq(1)
|
291
354
|
expect(article.error_on(:state).size).to eq(1)
|
292
355
|
end
|
@@ -317,7 +380,7 @@ describe "Validations" do
|
|
317
380
|
belongs_to :article
|
318
381
|
end
|
319
382
|
@columns = Review.content_columns.dup
|
320
|
-
Review.schema_validations :
|
383
|
+
Review.schema_validations only: [:title]
|
321
384
|
end
|
322
385
|
|
323
386
|
it "shouldn't validate associations not included in :only option" do
|
@@ -352,9 +415,9 @@ describe "Validations" do
|
|
352
415
|
context "when used with enum" do
|
353
416
|
it "does not validate numericality" do
|
354
417
|
class Article < ActiveRecord::Base
|
355
|
-
enum :
|
418
|
+
enum state: [:happy, :sad]
|
356
419
|
end
|
357
|
-
expect(Article.new(valid_article_attributes.merge(:
|
420
|
+
expect(Article.new(valid_article_attributes.merge(state: :happy))).to be_valid
|
358
421
|
end
|
359
422
|
end if ActiveRecord::Base.respond_to? :enum
|
360
423
|
|
@@ -366,11 +429,11 @@ describe "Validations" do
|
|
366
429
|
context 'without scope' do
|
367
430
|
before do
|
368
431
|
ActiveRecord::Schema.define do
|
369
|
-
create_table :books, :
|
432
|
+
create_table :books, force: true do |t|
|
370
433
|
t.string :title
|
371
434
|
end
|
372
435
|
|
373
|
-
add_index :books, :title, :
|
436
|
+
add_index :books, :title, unique: true
|
374
437
|
end
|
375
438
|
|
376
439
|
with_auto_validations do
|
@@ -390,12 +453,12 @@ describe "Validations" do
|
|
390
453
|
context 'within a scope' do
|
391
454
|
before do
|
392
455
|
ActiveRecord::Schema.define do
|
393
|
-
create_table :folders, :
|
456
|
+
create_table :folders, force: true do |t|
|
394
457
|
t.integer :parent_id
|
395
458
|
t.string :name
|
396
459
|
end
|
397
460
|
|
398
|
-
add_index :folders, [:parent_id, :name], :
|
461
|
+
add_index :folders, [:parent_id, :name], unique: true
|
399
462
|
end
|
400
463
|
|
401
464
|
with_auto_validations do
|
@@ -408,10 +471,10 @@ describe "Validations" do
|
|
408
471
|
it "should validate the uniqueness in a case insensitive manner" do
|
409
472
|
mixed_case_name = 'Schema Validations'
|
410
473
|
parent_folder = Folder.create
|
411
|
-
Folder.create(:
|
474
|
+
Folder.create(parent: parent_folder, name: mixed_case_name)
|
412
475
|
|
413
|
-
expect(Folder.new(:
|
414
|
-
expect(Folder.new(:
|
476
|
+
expect(Folder.new(parent: parent_folder, name: mixed_case_name)).not_to be_valid
|
477
|
+
expect(Folder.new(parent: parent_folder, name: mixed_case_name.downcase)).not_to be_valid
|
415
478
|
end
|
416
479
|
end
|
417
480
|
end
|
@@ -419,7 +482,7 @@ describe "Validations" do
|
|
419
482
|
context 'with optimistic locking' do
|
420
483
|
before do
|
421
484
|
ActiveRecord::Schema.define do
|
422
|
-
create_table :optimistics, :
|
485
|
+
create_table :optimistics, force: true do |t|
|
423
486
|
t.integer :lock_version
|
424
487
|
end
|
425
488
|
end
|
@@ -448,11 +511,11 @@ describe "Validations" do
|
|
448
511
|
|
449
512
|
def valid_article_attributes
|
450
513
|
{
|
451
|
-
:
|
452
|
-
:
|
453
|
-
:
|
454
|
-
:
|
455
|
-
:
|
514
|
+
title: 'SchemaPlus released!',
|
515
|
+
content: "Database matters. Get full use of it but don't write unecessary code. Get SchemaPlus!",
|
516
|
+
state: 3,
|
517
|
+
average_mark: 9.78,
|
518
|
+
active: true
|
456
519
|
}
|
457
520
|
end
|
458
521
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_validations
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.2.
|
4
|
+
version: 2.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ronen Barzel
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2017-02-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: schema_plus_columns
|
@@ -188,6 +188,7 @@ files:
|
|
188
188
|
- lib/schema_validations/active_record/type.rb
|
189
189
|
- lib/schema_validations/active_record/validations.rb
|
190
190
|
- lib/schema_validations/railtie.rb
|
191
|
+
- lib/schema_validations/validators/not_nil_validator.rb
|
191
192
|
- lib/schema_validations/version.rb
|
192
193
|
- schema_dev.yml
|
193
194
|
- schema_validations.gemspec
|