enumerize 2.4.0 → 2.5.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 +4 -4
- data/.github/workflows/ruby.yml +73 -0
- data/CHANGELOG.md +7 -0
- data/Gemfile.global +1 -8
- data/Gemfile.rails70 +9 -0
- data/Gemfile.railsmaster +5 -0
- data/README.md +182 -101
- data/lib/enumerize/activerecord.rb +6 -2
- data/lib/enumerize/scope/activerecord.rb +4 -0
- data/lib/enumerize/scope/mongoid.rb +4 -0
- data/lib/enumerize/scope/sequel.rb +4 -0
- data/lib/enumerize/version.rb +1 -1
- data/test/activemodel_test.rb +22 -22
- data/test/activerecord_test.rb +129 -106
- data/test/attribute_map_test.rb +7 -7
- data/test/attribute_test.rb +31 -31
- data/test/base_test.rb +35 -35
- data/test/module_attributes_test.rb +8 -8
- data/test/mongo_mapper_test.rb +8 -8
- data/test/mongoid_test.rb +30 -27
- data/test/multiple_test.rb +8 -8
- data/test/predicates_test.rb +18 -18
- data/test/rails_admin_test.rb +2 -2
- data/test/sequel_test.rb +56 -53
- data/test/set_test.rb +23 -23
- data/test/value_test.rb +28 -35
- metadata +10 -30
- data/.travis.yml +0 -35
data/test/activerecord_test.rb
CHANGED
@@ -14,26 +14,46 @@ silence_warnings do
|
|
14
14
|
'adapter' => 'sqlite3',
|
15
15
|
'database' => ':memory:'
|
16
16
|
},
|
17
|
+
'mysql2' => {
|
18
|
+
'adapter' => 'mysql2',
|
19
|
+
'host' => '127.0.0.1',
|
20
|
+
'username' => 'root',
|
21
|
+
'password' => ENV['MYSQL_ROOT_PASSWORD'],
|
22
|
+
'database' => 'enumerize_test',
|
23
|
+
'encoding' => 'utf8mb4',
|
24
|
+
'charset' => 'utf8mb4'
|
25
|
+
},
|
17
26
|
'postgresql' => {
|
18
27
|
'adapter' => 'postgresql',
|
19
|
-
'
|
20
|
-
'
|
21
|
-
'
|
28
|
+
'host' => 'localhost',
|
29
|
+
'username' => ENV['POSTGRES_USER'],
|
30
|
+
'password' => ENV['POSTGRES_PASSWORD']
|
22
31
|
},
|
23
32
|
'postgresql_master' => {
|
24
33
|
'adapter' => 'postgresql',
|
25
|
-
'
|
26
|
-
'
|
34
|
+
'host' => 'localhost',
|
35
|
+
'username' => ENV['POSTGRES_USER'],
|
36
|
+
'password' => ENV['POSTGRES_PASSWORD'],
|
27
37
|
'database' => 'template1',
|
28
38
|
'schema_search_path' => 'public'
|
29
39
|
}
|
30
40
|
}
|
31
|
-
|
41
|
+
|
42
|
+
case db
|
43
|
+
when :postgresql
|
32
44
|
ActiveRecord::Base.establish_connection(:postgresql_master)
|
33
45
|
ActiveRecord::Base.connection.recreate_database('enumerize_test')
|
34
|
-
|
46
|
+
when :mysql2
|
47
|
+
if ActiveRecord::Base.configurations.respond_to?(:[])
|
48
|
+
ActiveRecord::Tasks::DatabaseTasks.create ActiveRecord::Base.configurations[db.to_s]
|
49
|
+
else
|
50
|
+
ActiveRecord::Tasks::DatabaseTasks.create ActiveRecord::Base.configurations.find_db_config(db.to_s)
|
51
|
+
end
|
35
52
|
|
36
|
-
|
53
|
+
ActiveRecord::Base.establish_connection(db)
|
54
|
+
else
|
55
|
+
ActiveRecord::Base.establish_connection(db)
|
56
|
+
end
|
37
57
|
end
|
38
58
|
|
39
59
|
ActiveRecord::Base.connection.instance_eval do
|
@@ -135,7 +155,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
135
155
|
it 'sets nil if invalid value is passed' do
|
136
156
|
user = User.new
|
137
157
|
user.sex = :invalid
|
138
|
-
user.sex.must_be_nil
|
158
|
+
expect(user.sex).must_be_nil
|
139
159
|
end
|
140
160
|
|
141
161
|
it 'saves value' do
|
@@ -143,7 +163,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
143
163
|
user = User.new
|
144
164
|
user.sex = :female
|
145
165
|
user.save!
|
146
|
-
user.sex.must_equal 'female'
|
166
|
+
expect(user.sex).must_equal 'female'
|
147
167
|
end
|
148
168
|
|
149
169
|
it 'loads value' do
|
@@ -151,15 +171,15 @@ describe Enumerize::ActiveRecordSupport do
|
|
151
171
|
User.create!(:sex => :male)
|
152
172
|
store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
|
153
173
|
user = User.first
|
154
|
-
user.sex.must_equal 'male'
|
155
|
-
user.sex_text.must_equal 'Male'
|
174
|
+
expect(user.sex).must_equal 'male'
|
175
|
+
expect(user.sex_text).must_equal 'Male'
|
156
176
|
end
|
157
177
|
end
|
158
178
|
|
159
179
|
it 'sets nil if invalid stored attribute value is passed' do
|
160
180
|
user = User.new
|
161
181
|
user.language = :invalid
|
162
|
-
user.language.must_be_nil
|
182
|
+
expect(user.language).must_be_nil
|
163
183
|
end
|
164
184
|
|
165
185
|
it 'saves stored attribute value' do
|
@@ -168,12 +188,12 @@ describe Enumerize::ActiveRecordSupport do
|
|
168
188
|
user.language = :en
|
169
189
|
user.save!
|
170
190
|
user.reload
|
171
|
-
user.language.must_equal 'en'
|
191
|
+
expect(user.language).must_equal 'en'
|
172
192
|
end
|
173
193
|
|
174
194
|
it 'has default value' do
|
175
|
-
User.new.role.must_equal 'user'
|
176
|
-
User.new.attributes['role'].must_equal 'user'
|
195
|
+
expect(User.new.role).must_equal 'user'
|
196
|
+
expect(User.new.attributes['role']).must_equal 'user'
|
177
197
|
end
|
178
198
|
|
179
199
|
it 'does not set default value for not selected attributes' do
|
@@ -181,13 +201,13 @@ describe Enumerize::ActiveRecordSupport do
|
|
181
201
|
User.create!(:sex => :male)
|
182
202
|
|
183
203
|
user = User.select(:id).first
|
184
|
-
user.attributes['role'].
|
185
|
-
user.attributes['lambda_role'].
|
204
|
+
expect(user.attributes['role']).must_be_nil
|
205
|
+
expect(user.attributes['lambda_role']).must_be_nil
|
186
206
|
end
|
187
207
|
|
188
208
|
it 'has default value with lambda' do
|
189
|
-
User.new.lambda_role.must_equal 'admin'
|
190
|
-
User.new.attributes['lambda_role'].must_equal 'admin'
|
209
|
+
expect(User.new.lambda_role).must_equal 'admin'
|
210
|
+
expect(User.new.attributes['lambda_role']).must_equal 'admin'
|
191
211
|
end
|
192
212
|
|
193
213
|
it 'uses after_initialize callback to set default value' do
|
@@ -195,11 +215,11 @@ describe Enumerize::ActiveRecordSupport do
|
|
195
215
|
User.create!(sex: 'male', lambda_role: nil)
|
196
216
|
|
197
217
|
user = User.where(:sex => 'male').first
|
198
|
-
user.lambda_role.must_equal 'admin'
|
218
|
+
expect(user.lambda_role).must_equal 'admin'
|
199
219
|
end
|
200
220
|
|
201
221
|
it 'uses default value from db column' do
|
202
|
-
User.new.account_type.must_equal 'basic'
|
222
|
+
expect(User.new.account_type).must_equal 'basic'
|
203
223
|
end
|
204
224
|
|
205
225
|
it 'has default value with default scope' do
|
@@ -207,39 +227,39 @@ describe Enumerize::ActiveRecordSupport do
|
|
207
227
|
default_scope -> { having_role(:user) }
|
208
228
|
end
|
209
229
|
|
210
|
-
UserWithDefaultScope.new.role.must_equal 'user'
|
211
|
-
UserWithDefaultScope.new.attributes['role'].must_equal 'user'
|
230
|
+
expect(UserWithDefaultScope.new.role).must_equal 'user'
|
231
|
+
expect(UserWithDefaultScope.new.attributes['role']).must_equal 'user'
|
212
232
|
end
|
213
233
|
|
214
234
|
it 'validates inclusion' do
|
215
235
|
user = User.new
|
216
236
|
user.role = 'wrong'
|
217
|
-
user.wont_be :valid?
|
218
|
-
user.errors[:role].must_include 'is not included in the list'
|
237
|
+
expect(user).wont_be :valid?
|
238
|
+
expect(user.errors[:role]).must_include 'is not included in the list'
|
219
239
|
end
|
220
240
|
|
221
241
|
it 'sets value to enumerized field from db when record is reloaded' do
|
222
242
|
user = User.create!(interests: [:music])
|
223
243
|
User.find(user.id).update(interests: %i[music dancing])
|
224
|
-
user.interests.must_equal %w[music]
|
244
|
+
expect(user.interests).must_equal %w[music]
|
225
245
|
user.reload
|
226
|
-
user.interests.must_equal %w[music dancing]
|
246
|
+
expect(user.interests).must_equal %w[music dancing]
|
227
247
|
end
|
228
248
|
|
229
249
|
it 'validates inclusion when using write_attribute with string attribute' do
|
230
250
|
user = User.new
|
231
251
|
user.send(:write_attribute, 'role', 'wrong')
|
232
|
-
user.read_attribute_for_validation(:role).must_equal 'wrong'
|
233
|
-
user.wont_be :valid?
|
234
|
-
user.errors[:role].must_include 'is not included in the list'
|
252
|
+
expect(user.read_attribute_for_validation(:role)).must_equal 'wrong'
|
253
|
+
expect(user).wont_be :valid?
|
254
|
+
expect(user.errors[:role]).must_include 'is not included in the list'
|
235
255
|
end
|
236
256
|
|
237
257
|
it 'validates inclusion when using write_attribute with symbol attribute' do
|
238
258
|
user = User.new
|
239
259
|
user.send(:write_attribute, :role, 'wrong')
|
240
|
-
user.read_attribute_for_validation(:role).must_equal 'wrong'
|
241
|
-
user.wont_be :valid?
|
242
|
-
user.errors[:role].must_include 'is not included in the list'
|
260
|
+
expect(user.read_attribute_for_validation(:role)).must_equal 'wrong'
|
261
|
+
expect(user).wont_be :valid?
|
262
|
+
expect(user.errors[:role]).must_include 'is not included in the list'
|
243
263
|
end
|
244
264
|
|
245
265
|
it 'validates inclusion on mass assignment' do
|
@@ -250,72 +270,72 @@ describe Enumerize::ActiveRecordSupport do
|
|
250
270
|
|
251
271
|
it "uses persisted value for validation if it hasn't been set" do
|
252
272
|
user = User.create! :sex => :male
|
253
|
-
User.find(user.id).read_attribute_for_validation(:sex).must_equal 'male'
|
273
|
+
expect(User.find(user.id).read_attribute_for_validation(:sex)).must_equal 'male'
|
254
274
|
end
|
255
275
|
|
256
276
|
it 'is valid with empty string assigned' do
|
257
277
|
user = User.new
|
258
278
|
user.role = ''
|
259
|
-
user.must_be :valid?
|
279
|
+
expect(user).must_be :valid?
|
260
280
|
end
|
261
281
|
|
262
282
|
it 'stores nil when empty string assigned' do
|
263
283
|
user = User.new
|
264
284
|
user.role = ''
|
265
|
-
user.read_attribute(:role).must_be_nil
|
285
|
+
expect(user.read_attribute(:role)).must_be_nil
|
266
286
|
end
|
267
287
|
|
268
288
|
it 'validates inclusion when :skip_validations = false' do
|
269
289
|
user = DoNotSkipValidationsUser.new
|
270
290
|
user.foo = 'wrong'
|
271
|
-
user.wont_be :valid?
|
272
|
-
user.errors[:foo].must_include 'is not included in the list'
|
291
|
+
expect(user).wont_be :valid?
|
292
|
+
expect(user.errors[:foo]).must_include 'is not included in the list'
|
273
293
|
end
|
274
294
|
|
275
295
|
it 'does not validate inclusion when :skip_validations = true' do
|
276
296
|
user = SkipValidationsUser.new
|
277
297
|
user.foo = 'wrong'
|
278
|
-
user.must_be :valid?
|
298
|
+
expect(user).must_be :valid?
|
279
299
|
end
|
280
300
|
|
281
301
|
it 'supports :skip_validations option as lambda' do
|
282
302
|
user = SkipValidationsLambdaUser.new
|
283
303
|
user.foo = 'wrong'
|
284
|
-
user.must_be :valid?
|
304
|
+
expect(user).must_be :valid?
|
285
305
|
end
|
286
306
|
|
287
307
|
it 'supports :skip_validations option as lambda with a parameter' do
|
288
308
|
user = SkipValidationsLambdaWithParamUser.new
|
289
309
|
user.foo = 'wrong'
|
290
|
-
user.must_be :valid?
|
310
|
+
expect(user).must_be :valid?
|
291
311
|
end
|
292
312
|
|
293
313
|
it 'supports multiple attributes' do
|
294
314
|
user = User.new
|
295
|
-
user.interests.must_be_empty
|
315
|
+
expect(user.interests).must_be_empty
|
296
316
|
user.interests << :music
|
297
|
-
user.interests.must_equal %w(music)
|
317
|
+
expect(user.interests).must_equal %w(music)
|
298
318
|
user.save!
|
299
319
|
|
300
320
|
user = User.find(user.id)
|
301
|
-
user.interests.must_be_instance_of Enumerize::Set
|
302
|
-
user.interests.must_equal %w(music)
|
321
|
+
expect(user.interests).must_be_instance_of Enumerize::Set
|
322
|
+
expect(user.interests).must_equal %w(music)
|
303
323
|
user.interests << :sports
|
304
|
-
user.interests.must_equal %w(music sports)
|
324
|
+
expect(user.interests).must_equal %w(music sports)
|
305
325
|
|
306
326
|
user.interests = []
|
307
327
|
interests = user.interests
|
308
328
|
interests << :music
|
309
|
-
interests.must_equal %w(music)
|
329
|
+
expect(interests).must_equal %w(music)
|
310
330
|
interests << :dancing
|
311
|
-
interests.must_equal %w(music dancing)
|
331
|
+
expect(interests).must_equal %w(music dancing)
|
312
332
|
end
|
313
333
|
|
314
334
|
it 'stores multiple value passed passed to new' do
|
315
335
|
user = User.new(interests: [:music, :dancing])
|
316
336
|
user.save!
|
317
|
-
user.interests.must_equal %w(music dancing)
|
318
|
-
User.find(user.id).interests.must_equal %w(music dancing)
|
337
|
+
expect(user.interests).must_equal %w(music dancing)
|
338
|
+
expect(User.find(user.id).interests).must_equal %w(music dancing)
|
319
339
|
end
|
320
340
|
|
321
341
|
it 'returns invalid multiple value for validation' do
|
@@ -323,19 +343,19 @@ describe Enumerize::ActiveRecordSupport do
|
|
323
343
|
user.interests << :music
|
324
344
|
user.interests << :invalid
|
325
345
|
values = user.read_attribute_for_validation(:interests)
|
326
|
-
values.must_equal %w(music invalid)
|
346
|
+
expect(values).must_equal %w(music invalid)
|
327
347
|
end
|
328
348
|
|
329
349
|
it 'validates multiple attributes' do
|
330
350
|
user = User.new
|
331
351
|
user.interests << :invalid
|
332
|
-
user.wont_be :valid?
|
352
|
+
expect(user).wont_be :valid?
|
333
353
|
|
334
354
|
user.interests = Object.new
|
335
|
-
user.wont_be :valid?
|
355
|
+
expect(user).wont_be :valid?
|
336
356
|
|
337
357
|
user.interests = ['music', '']
|
338
|
-
user.must_be :valid?
|
358
|
+
expect(user).must_be :valid?
|
339
359
|
end
|
340
360
|
|
341
361
|
it 'stores custom values for multiple attributes' do
|
@@ -350,36 +370,39 @@ describe Enumerize::ActiveRecordSupport do
|
|
350
370
|
|
351
371
|
user = klass.new
|
352
372
|
user.interests << :music
|
353
|
-
user.read_attribute(:interests).must_equal [0]
|
354
|
-
user.interests.must_equal %w(music)
|
373
|
+
expect(user.read_attribute(:interests)).must_equal [0]
|
374
|
+
expect(user.interests).must_equal %w(music)
|
355
375
|
user.save
|
356
376
|
|
357
377
|
user = klass.find(user.id)
|
358
|
-
user.interests.must_equal %w(music)
|
378
|
+
expect(user.interests).must_equal %w(music)
|
359
379
|
end
|
360
380
|
|
361
381
|
it 'adds scope' do
|
362
382
|
User.delete_all
|
363
383
|
|
364
|
-
user_1 = User.create!(status: :active, role: :admin)
|
365
|
-
user_2 = User.create!(status: :blocked)
|
384
|
+
user_1 = User.create!(sex: :female, skill: :noob, status: :active, role: :admin)
|
385
|
+
user_2 = User.create!(sex: :female, skill: :casual, status: :blocked)
|
366
386
|
user_3 = User.create!(sex: :male, skill: :pro)
|
367
387
|
|
368
|
-
User.with_status(:active).must_equal [user_1]
|
369
|
-
User.with_status(:blocked).must_equal [user_2]
|
370
|
-
User.with_status(:active, :blocked).to_set.must_equal [user_1, user_2].to_set
|
388
|
+
expect(User.with_status(:active)).must_equal [user_1]
|
389
|
+
expect(User.with_status(:blocked)).must_equal [user_2]
|
390
|
+
expect(User.with_status(:active, :blocked).to_set).must_equal [user_1, user_2].to_set
|
391
|
+
|
392
|
+
expect(User.without_status(:active)).must_equal [user_2]
|
393
|
+
expect(User.without_status(:active, :blocked)).must_equal []
|
371
394
|
|
372
|
-
User.
|
373
|
-
User.
|
395
|
+
expect(User.male).must_equal [user_3]
|
396
|
+
expect(User.pro).must_equal [user_3]
|
374
397
|
|
375
|
-
User.
|
376
|
-
User.
|
398
|
+
expect(User.not_male.to_set).must_equal [user_1, user_2].to_set
|
399
|
+
expect(User.not_pro.to_set).must_equal [user_1, user_2].to_set
|
377
400
|
end
|
378
401
|
|
379
402
|
it 'ignores not enumerized values that passed to the scope method' do
|
380
403
|
User.delete_all
|
381
404
|
|
382
|
-
User.with_status(:foo).must_equal []
|
405
|
+
expect(User.with_status(:foo)).must_equal []
|
383
406
|
end
|
384
407
|
|
385
408
|
it 'allows either key or value as valid' do
|
@@ -387,13 +410,13 @@ describe Enumerize::ActiveRecordSupport do
|
|
387
410
|
user_2 = User.new(status: 1)
|
388
411
|
user_3 = User.new(status: '1')
|
389
412
|
|
390
|
-
user_1.status.must_equal 'active'
|
391
|
-
user_2.status.must_equal 'active'
|
392
|
-
user_3.status.must_equal 'active'
|
413
|
+
expect(user_1.status).must_equal 'active'
|
414
|
+
expect(user_2.status).must_equal 'active'
|
415
|
+
expect(user_3.status).must_equal 'active'
|
393
416
|
|
394
|
-
user_1.must_be :valid?
|
395
|
-
user_2.must_be :valid?
|
396
|
-
user_3.must_be :valid?
|
417
|
+
expect(user_1).must_be :valid?
|
418
|
+
expect(user_2).must_be :valid?
|
419
|
+
expect(user_3).must_be :valid?
|
397
420
|
end
|
398
421
|
|
399
422
|
it 'supports defining enumerized attributes on abstract class' do
|
@@ -401,7 +424,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
401
424
|
|
402
425
|
document = Document.new
|
403
426
|
document.visibility = :protected
|
404
|
-
document.visibility.must_equal 'protected'
|
427
|
+
expect(document.visibility).must_equal 'protected'
|
405
428
|
end
|
406
429
|
|
407
430
|
it 'supports defining enumerized scopes on abstract class' do
|
@@ -410,7 +433,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
410
433
|
document_1 = Document.create!(visibility: :public)
|
411
434
|
document_2 = Document.create!(visibility: :private)
|
412
435
|
|
413
|
-
Document.with_visibility(:public).must_equal [document_1]
|
436
|
+
expect(Document.with_visibility(:public)).must_equal [document_1]
|
414
437
|
end
|
415
438
|
|
416
439
|
it 'validates uniqueness' do
|
@@ -422,7 +445,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
422
445
|
user.status = :active
|
423
446
|
user.valid?
|
424
447
|
|
425
|
-
user.errors[:status].wont_be :empty?
|
448
|
+
expect(user.errors[:status]).wont_be :empty?
|
426
449
|
end
|
427
450
|
|
428
451
|
it 'validates presence with multiple attributes' do
|
@@ -430,17 +453,17 @@ describe Enumerize::ActiveRecordSupport do
|
|
430
453
|
user.interests = []
|
431
454
|
user.valid?
|
432
455
|
|
433
|
-
user.errors[:interests].wont_be :empty?
|
456
|
+
expect(user.errors[:interests]).wont_be :empty?
|
434
457
|
|
435
458
|
user.interests = ['']
|
436
459
|
user.valid?
|
437
460
|
|
438
|
-
user.errors[:interests].wont_be :empty?
|
461
|
+
expect(user.errors[:interests]).wont_be :empty?
|
439
462
|
|
440
463
|
user.interests = [:dancing, :programming]
|
441
464
|
user.valid?
|
442
465
|
|
443
|
-
user.errors[:interests].must_be_empty
|
466
|
+
expect(user.errors[:interests]).must_be_empty
|
444
467
|
end
|
445
468
|
|
446
469
|
it 'is valid after #becomes' do
|
@@ -452,7 +475,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
452
475
|
uniq_user = User.find(user.id).becomes(UniqStatusUser)
|
453
476
|
uniq_user.valid?
|
454
477
|
|
455
|
-
uniq_user.errors.must_be_empty
|
478
|
+
expect(uniq_user.errors).must_be_empty
|
456
479
|
end
|
457
480
|
|
458
481
|
it 'supports multiple attributes in #becomes' do
|
@@ -465,8 +488,8 @@ describe Enumerize::ActiveRecordSupport do
|
|
465
488
|
|
466
489
|
user = uniq_user.becomes(User)
|
467
490
|
|
468
|
-
user.sex.must_equal uniq_user.sex
|
469
|
-
user.interests.must_equal uniq_user.interests
|
491
|
+
expect(user.sex).must_equal uniq_user.sex
|
492
|
+
expect(user.interests).must_equal uniq_user.interests
|
470
493
|
end
|
471
494
|
|
472
495
|
it "doesn't update record" do
|
@@ -496,7 +519,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
496
519
|
user.reload
|
497
520
|
user.status = 'active'
|
498
521
|
|
499
|
-
user.changes.must_be_empty
|
522
|
+
expect(user.changes).must_be_empty
|
500
523
|
end
|
501
524
|
|
502
525
|
it 'allows using update_all' do
|
@@ -506,12 +529,12 @@ describe Enumerize::ActiveRecordSupport do
|
|
506
529
|
|
507
530
|
User.update_all(status: :blocked)
|
508
531
|
user.reload
|
509
|
-
user.status.must_equal 'blocked'
|
532
|
+
expect(user.status).must_equal 'blocked'
|
510
533
|
|
511
534
|
User.update_all(status: :active, account_type: :basic)
|
512
535
|
user.reload
|
513
|
-
user.status.must_equal 'active'
|
514
|
-
user.account_type.must_equal 'basic'
|
536
|
+
expect(user.status).must_equal 'active'
|
537
|
+
expect(user.account_type).must_equal 'basic'
|
515
538
|
end
|
516
539
|
|
517
540
|
it 'allows using update_all for multiple enumerize' do
|
@@ -528,8 +551,8 @@ describe Enumerize::ActiveRecordSupport do
|
|
528
551
|
klass.update_all(status: :blocked, interests: [:music, :dancing])
|
529
552
|
|
530
553
|
user = klass.find(user.id)
|
531
|
-
user.status.must_equal 'blocked'
|
532
|
-
user.interests.must_equal %w(music dancing)
|
554
|
+
expect(user.status).must_equal 'blocked'
|
555
|
+
expect(user.interests).must_equal %w(music dancing)
|
533
556
|
end
|
534
557
|
|
535
558
|
it 'allows using update_all with values' do
|
@@ -539,7 +562,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
539
562
|
|
540
563
|
User.update_all(status: 2)
|
541
564
|
user.reload
|
542
|
-
user.status.must_equal 'blocked'
|
565
|
+
expect(user.status).must_equal 'blocked'
|
543
566
|
end
|
544
567
|
|
545
568
|
it 'allows using update_all on relation objects' do
|
@@ -549,7 +572,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
549
572
|
|
550
573
|
User.all.update_all(status: :blocked)
|
551
574
|
user.reload
|
552
|
-
user.status.must_equal 'blocked'
|
575
|
+
expect(user.status).must_equal 'blocked'
|
553
576
|
end
|
554
577
|
|
555
578
|
it 'allows using update_all on association relation objects' do
|
@@ -561,7 +584,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
561
584
|
|
562
585
|
user.documents.update_all(status: :release)
|
563
586
|
document.reload
|
564
|
-
document.status.must_equal 'release'
|
587
|
+
expect(document.status).must_equal 'release'
|
565
588
|
end
|
566
589
|
|
567
590
|
it 'preserves string usage of update_all' do
|
@@ -571,7 +594,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
571
594
|
|
572
595
|
User.update_all("name = 'Frederick'")
|
573
596
|
user.reload
|
574
|
-
user.name.must_equal 'Frederick'
|
597
|
+
expect(user.name).must_equal 'Frederick'
|
575
598
|
end
|
576
599
|
|
577
600
|
it 'preserves interpolated array usage of update_all' do
|
@@ -581,7 +604,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
581
604
|
|
582
605
|
User.update_all(["name = :name", {name: 'Frederick'}])
|
583
606
|
user.reload
|
584
|
-
user.name.must_equal 'Frederick'
|
607
|
+
expect(user.name).must_equal 'Frederick'
|
585
608
|
end
|
586
609
|
|
587
610
|
it 'sets attribute to nil if given one is not valid' do
|
@@ -591,24 +614,24 @@ describe Enumerize::ActiveRecordSupport do
|
|
591
614
|
|
592
615
|
User.update_all(status: :foo)
|
593
616
|
user.reload
|
594
|
-
user.status.must_be_nil
|
617
|
+
expect(user.status).must_be_nil
|
595
618
|
end
|
596
619
|
|
597
620
|
it 'supports AR types serialization' do
|
598
621
|
type = User.type_for_attribute('status')
|
599
|
-
type.must_be_instance_of Enumerize::ActiveRecordSupport::Type
|
622
|
+
expect(type).must_be_instance_of Enumerize::ActiveRecordSupport::Type
|
600
623
|
serialized = type.serialize('blocked')
|
601
|
-
serialized.must_equal 2
|
624
|
+
expect(serialized).must_equal 2
|
602
625
|
end
|
603
626
|
|
604
627
|
it 'has AR type itself JSON serializable' do
|
605
628
|
type = User.type_for_attribute('status')
|
606
|
-
type.as_json['attr'].must_equal 'status'
|
629
|
+
expect(type.as_json['attr']).must_equal 'status'
|
607
630
|
end
|
608
631
|
|
609
632
|
it "doesn't break YAML serialization" do
|
610
633
|
user = YAML.load(User.create(status: :blocked).to_yaml)
|
611
|
-
user.status.must_equal 'blocked'
|
634
|
+
expect(user.status).must_equal 'blocked'
|
612
635
|
end
|
613
636
|
|
614
637
|
# https://github.com/brainspec/enumerize/issues/304
|
@@ -616,7 +639,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
616
639
|
table = User.arel_table
|
617
640
|
sql = User.where(table[:account_type].matches '%foo%').to_sql
|
618
641
|
|
619
|
-
sql.must_include 'LIKE \'%foo%\''
|
642
|
+
expect(sql).must_include 'LIKE \'%foo%\''
|
620
643
|
end
|
621
644
|
|
622
645
|
if Rails::VERSION::MAJOR >= 6
|
@@ -627,9 +650,9 @@ describe Enumerize::ActiveRecordSupport do
|
|
627
650
|
User.insert_all([{ status: :active }])
|
628
651
|
User.insert_all([{ interests: [:music, :sports] }])
|
629
652
|
|
630
|
-
User.exists?(sex: :male).must_equal true
|
631
|
-
User.exists?(status: :active).must_equal true
|
632
|
-
User.exists?(interests: [:music, :sports]).must_equal true
|
653
|
+
expect(User.exists?(sex: :male)).must_equal true
|
654
|
+
expect(User.exists?(status: :active)).must_equal true
|
655
|
+
expect(User.exists?(interests: [:music, :sports])).must_equal true
|
633
656
|
end
|
634
657
|
|
635
658
|
it 'supports AR#upsert_all' do
|
@@ -639,9 +662,9 @@ describe Enumerize::ActiveRecordSupport do
|
|
639
662
|
User.upsert_all([{ status: :active }])
|
640
663
|
User.upsert_all([{ interests: [:music, :sports] }])
|
641
664
|
|
642
|
-
User.exists?(sex: :male).must_equal true
|
643
|
-
User.exists?(status: :active).must_equal true
|
644
|
-
User.exists?(interests: [:music, :sports]).must_equal true
|
665
|
+
expect(User.exists?(sex: :male)).must_equal true
|
666
|
+
expect(User.exists?(status: :active)).must_equal true
|
667
|
+
expect(User.exists?(interests: [:music, :sports])).must_equal true
|
645
668
|
end
|
646
669
|
end
|
647
670
|
end
|
data/test/attribute_map_test.rb
CHANGED
@@ -11,12 +11,12 @@ module Enumerize
|
|
11
11
|
end
|
12
12
|
|
13
13
|
it 'empty when no attrs' do
|
14
|
-
subject.must_be_empty
|
14
|
+
expect(subject).must_be_empty
|
15
15
|
end
|
16
16
|
|
17
17
|
it 'not empty when attr added' do
|
18
18
|
subject << make_attr(:a)
|
19
|
-
subject.wont_be_empty
|
19
|
+
expect(subject).wont_be_empty
|
20
20
|
end
|
21
21
|
|
22
22
|
it 'iterates over added attrs' do
|
@@ -34,20 +34,20 @@ module Enumerize
|
|
34
34
|
actual << element
|
35
35
|
end
|
36
36
|
|
37
|
-
count.must_equal 2
|
38
|
-
actual.must_equal [attr_1, attr_2]
|
37
|
+
expect(count).must_equal 2
|
38
|
+
expect(actual).must_equal [attr_1, attr_2]
|
39
39
|
end
|
40
40
|
|
41
41
|
it 'reads attribute by name' do
|
42
42
|
attr = make_attr(:a)
|
43
43
|
subject << attr
|
44
|
-
subject[:a].must_equal attr
|
44
|
+
expect(subject[:a]).must_equal attr
|
45
45
|
end
|
46
46
|
|
47
47
|
it 'reads attribute by name using string' do
|
48
48
|
attr = make_attr(:a)
|
49
49
|
subject << attr
|
50
|
-
subject['a'].must_equal attr
|
50
|
+
expect(subject['a']).must_equal attr
|
51
51
|
end
|
52
52
|
|
53
53
|
it 'updates dependants' do
|
@@ -64,7 +64,7 @@ module Enumerize
|
|
64
64
|
subject << attr
|
65
65
|
dependant = AttributeMap.new
|
66
66
|
subject.add_dependant dependant
|
67
|
-
dependant[:a].must_equal attr
|
67
|
+
expect(dependant[:a]).must_equal attr
|
68
68
|
end
|
69
69
|
end
|
70
70
|
end
|