enumerize 2.2.1 → 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.
Files changed (66) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ruby.yml +73 -0
  3. data/CHANGELOG.md +35 -1
  4. data/Gemfile +2 -3
  5. data/Gemfile.global +2 -10
  6. data/Gemfile.mongo_mapper +2 -3
  7. data/Gemfile.rails60 +6 -0
  8. data/Gemfile.rails61 +6 -0
  9. data/Gemfile.rails70 +9 -0
  10. data/Gemfile.railsmaster +5 -0
  11. data/README.md +205 -94
  12. data/Rakefile +2 -0
  13. data/lib/enumerize/activemodel.rb +2 -0
  14. data/lib/enumerize/activerecord.rb +36 -2
  15. data/lib/enumerize/attribute.rb +19 -11
  16. data/lib/enumerize/attribute_map.rb +2 -0
  17. data/lib/enumerize/base.rb +6 -6
  18. data/lib/enumerize/hooks/formtastic.rb +4 -1
  19. data/lib/enumerize/hooks/sequel_dataset.rb +2 -0
  20. data/lib/enumerize/hooks/simple_form.rb +4 -1
  21. data/lib/enumerize/hooks/uniqueness.rb +2 -0
  22. data/lib/enumerize/integrations/rails_admin.rb +2 -0
  23. data/lib/enumerize/integrations/rspec/matcher.rb +7 -2
  24. data/lib/enumerize/integrations/rspec.rb +2 -0
  25. data/lib/enumerize/module.rb +2 -0
  26. data/lib/enumerize/module_attributes.rb +2 -0
  27. data/lib/enumerize/mongoid.rb +16 -0
  28. data/lib/enumerize/predicatable.rb +3 -1
  29. data/lib/enumerize/predicates.rb +2 -0
  30. data/lib/enumerize/scope/activerecord.rb +16 -0
  31. data/lib/enumerize/scope/mongoid.rb +15 -0
  32. data/lib/enumerize/scope/sequel.rb +16 -0
  33. data/lib/enumerize/sequel.rb +9 -4
  34. data/lib/enumerize/set.rb +2 -0
  35. data/lib/enumerize/utils.rb +12 -0
  36. data/lib/enumerize/value.rb +14 -15
  37. data/lib/enumerize/version.rb +1 -1
  38. data/lib/enumerize.rb +4 -0
  39. data/lib/sequel/plugins/enumerize.rb +2 -0
  40. data/spec/enumerize/integrations/rspec/matcher_spec.rb +13 -10
  41. data/spec/spec_helper.rb +2 -0
  42. data/test/activemodel_test.rb +24 -22
  43. data/test/activerecord_test.rb +229 -92
  44. data/test/attribute_map_test.rb +9 -7
  45. data/test/attribute_test.rb +37 -30
  46. data/test/base_test.rb +38 -36
  47. data/test/formtastic_test.rb +17 -0
  48. data/test/module_attributes_test.rb +10 -8
  49. data/test/mongo_mapper_test.rb +19 -10
  50. data/test/mongoid_test.rb +51 -22
  51. data/test/multiple_test.rb +15 -7
  52. data/test/predicates_test.rb +20 -18
  53. data/test/rails_admin_test.rb +4 -2
  54. data/test/sequel_test.rb +100 -47
  55. data/test/set_test.rb +25 -23
  56. data/test/simple_form_test.rb +17 -0
  57. data/test/support/mock_controller.rb +2 -0
  58. data/test/support/shared_enums.rb +43 -0
  59. data/test/support/view_test_helper.rb +14 -1
  60. data/test/test_helper.rb +2 -0
  61. data/test/value_test.rb +51 -30
  62. metadata +11 -30
  63. data/.travis.yml +0 -35
  64. data/Gemfile.rails42 +0 -7
  65. data/Gemfile.rails50 +0 -7
  66. data/Gemfile.rails52 +0 -7
@@ -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
- 'username' => ENV['DB_USER'],
20
- 'password' => ENV['DB_PASSD'],
21
- 'database' => 'enumerize_test'
28
+ 'host' => 'localhost',
29
+ 'username' => ENV['POSTGRES_USER'],
30
+ 'password' => ENV['POSTGRES_PASSWORD']
22
31
  },
23
32
  'postgresql_master' => {
24
33
  'adapter' => 'postgresql',
25
- 'username' => ENV['DB_USER'],
26
- 'password' => ENV['DB_PASS'],
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
- if db == :postgresql
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
- end
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
- ActiveRecord::Base.establish_connection(db)
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
@@ -44,7 +64,10 @@ ActiveRecord::Base.connection.instance_eval do
44
64
  t.string :name
45
65
  t.string :interests
46
66
  t.integer :status
67
+ t.text :settings
68
+ t.integer :skill
47
69
  t.string :account_type, :default => :basic
70
+ t.string :foo
48
71
  end
49
72
 
50
73
  create_table :documents do |t|
@@ -78,13 +101,18 @@ class User < ActiveRecord::Base
78
101
  extend Enumerize
79
102
  include RoleEnum
80
103
 
81
- enumerize :sex, :in => [:male, :female]
104
+ store :settings, accessors: [:language]
105
+
106
+ enumerize :sex, :in => [:male, :female], scope: :shallow
107
+ enumerize :language, :in => [:en, :jp]
82
108
 
83
109
  serialize :interests, Array
84
110
  enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true
85
111
 
86
112
  enumerize :status, :in => { active: 1, blocked: 2 }, scope: true
87
113
 
114
+ enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
115
+
88
116
  enumerize :account_type, :in => [:basic, :premium]
89
117
 
90
118
  # There is no column for relationship enumeration for testing purposes: model
@@ -103,11 +131,31 @@ class InterestsRequiredUser < User
103
131
  validates :interests, presence: true
104
132
  end
105
133
 
134
+ class SkipValidationsUser < ActiveRecord::Base
135
+ self.table_name = "users"
136
+ include SkipValidationsEnum
137
+ end
138
+
139
+ class DoNotSkipValidationsUser < ActiveRecord::Base
140
+ self.table_name = "users"
141
+ include DoNotSkipValidationsEnum
142
+ end
143
+
144
+ class SkipValidationsLambdaUser < ActiveRecord::Base
145
+ self.table_name = "users"
146
+ include SkipValidationsLambdaEnum
147
+ end
148
+
149
+ class SkipValidationsLambdaWithParamUser < ActiveRecord::Base
150
+ self.table_name = "users"
151
+ include SkipValidationsLambdaWithParamEnum
152
+ end
153
+
106
154
  describe Enumerize::ActiveRecordSupport do
107
155
  it 'sets nil if invalid value is passed' do
108
156
  user = User.new
109
157
  user.sex = :invalid
110
- user.sex.must_be_nil
158
+ expect(user.sex).must_be_nil
111
159
  end
112
160
 
113
161
  it 'saves value' do
@@ -115,7 +163,7 @@ describe Enumerize::ActiveRecordSupport do
115
163
  user = User.new
116
164
  user.sex = :female
117
165
  user.save!
118
- user.sex.must_equal 'female'
166
+ expect(user.sex).must_equal 'female'
119
167
  end
120
168
 
121
169
  it 'loads value' do
@@ -123,26 +171,43 @@ describe Enumerize::ActiveRecordSupport do
123
171
  User.create!(:sex => :male)
124
172
  store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
125
173
  user = User.first
126
- user.sex.must_equal 'male'
127
- user.sex_text.must_equal 'Male'
174
+ expect(user.sex).must_equal 'male'
175
+ expect(user.sex_text).must_equal 'Male'
128
176
  end
129
177
  end
130
178
 
179
+ it 'sets nil if invalid stored attribute value is passed' do
180
+ user = User.new
181
+ user.language = :invalid
182
+ expect(user.language).must_be_nil
183
+ end
184
+
185
+ it 'saves stored attribute value' do
186
+ User.delete_all
187
+ user = User.new
188
+ user.language = :en
189
+ user.save!
190
+ user.reload
191
+ expect(user.language).must_equal 'en'
192
+ end
193
+
131
194
  it 'has default value' do
132
- User.new.role.must_equal 'user'
133
- User.new.attributes['role'].must_equal 'user'
195
+ expect(User.new.role).must_equal 'user'
196
+ expect(User.new.attributes['role']).must_equal 'user'
134
197
  end
135
198
 
136
199
  it 'does not set default value for not selected attributes' do
137
200
  User.delete_all
138
201
  User.create!(:sex => :male)
139
202
 
140
- assert_equal ['id'], User.select(:id).first.attributes.keys
203
+ user = User.select(:id).first
204
+ expect(user.attributes['role']).must_be_nil
205
+ expect(user.attributes['lambda_role']).must_be_nil
141
206
  end
142
207
 
143
208
  it 'has default value with lambda' do
144
- User.new.lambda_role.must_equal 'admin'
145
- 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'
146
211
  end
147
212
 
148
213
  it 'uses after_initialize callback to set default value' do
@@ -150,11 +215,11 @@ describe Enumerize::ActiveRecordSupport do
150
215
  User.create!(sex: 'male', lambda_role: nil)
151
216
 
152
217
  user = User.where(:sex => 'male').first
153
- user.lambda_role.must_equal 'admin'
218
+ expect(user.lambda_role).must_equal 'admin'
154
219
  end
155
220
 
156
221
  it 'uses default value from db column' do
157
- User.new.account_type.must_equal 'basic'
222
+ expect(User.new.account_type).must_equal 'basic'
158
223
  end
159
224
 
160
225
  it 'has default value with default scope' do
@@ -162,31 +227,39 @@ describe Enumerize::ActiveRecordSupport do
162
227
  default_scope -> { having_role(:user) }
163
228
  end
164
229
 
165
- UserWithDefaultScope.new.role.must_equal 'user'
166
- UserWithDefaultScope.new.attributes['role'].must_equal 'user'
230
+ expect(UserWithDefaultScope.new.role).must_equal 'user'
231
+ expect(UserWithDefaultScope.new.attributes['role']).must_equal 'user'
167
232
  end
168
233
 
169
234
  it 'validates inclusion' do
170
235
  user = User.new
171
236
  user.role = 'wrong'
172
- user.wont_be :valid?
173
- 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'
239
+ end
240
+
241
+ it 'sets value to enumerized field from db when record is reloaded' do
242
+ user = User.create!(interests: [:music])
243
+ User.find(user.id).update(interests: %i[music dancing])
244
+ expect(user.interests).must_equal %w[music]
245
+ user.reload
246
+ expect(user.interests).must_equal %w[music dancing]
174
247
  end
175
248
 
176
249
  it 'validates inclusion when using write_attribute with string attribute' do
177
250
  user = User.new
178
251
  user.send(:write_attribute, 'role', 'wrong')
179
- user.read_attribute_for_validation(:role).must_equal 'wrong'
180
- user.wont_be :valid?
181
- 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'
182
255
  end
183
256
 
184
257
  it 'validates inclusion when using write_attribute with symbol attribute' do
185
258
  user = User.new
186
259
  user.send(:write_attribute, :role, 'wrong')
187
- user.read_attribute_for_validation(:role).must_equal 'wrong'
188
- user.wont_be :valid?
189
- 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'
190
263
  end
191
264
 
192
265
  it 'validates inclusion on mass assignment' do
@@ -197,47 +270,72 @@ describe Enumerize::ActiveRecordSupport do
197
270
 
198
271
  it "uses persisted value for validation if it hasn't been set" do
199
272
  user = User.create! :sex => :male
200
- 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'
201
274
  end
202
275
 
203
276
  it 'is valid with empty string assigned' do
204
277
  user = User.new
205
278
  user.role = ''
206
- user.must_be :valid?
279
+ expect(user).must_be :valid?
207
280
  end
208
281
 
209
282
  it 'stores nil when empty string assigned' do
210
283
  user = User.new
211
284
  user.role = ''
212
- user.read_attribute(:role).must_be_nil
285
+ expect(user.read_attribute(:role)).must_be_nil
286
+ end
287
+
288
+ it 'validates inclusion when :skip_validations = false' do
289
+ user = DoNotSkipValidationsUser.new
290
+ user.foo = 'wrong'
291
+ expect(user).wont_be :valid?
292
+ expect(user.errors[:foo]).must_include 'is not included in the list'
293
+ end
294
+
295
+ it 'does not validate inclusion when :skip_validations = true' do
296
+ user = SkipValidationsUser.new
297
+ user.foo = 'wrong'
298
+ expect(user).must_be :valid?
299
+ end
300
+
301
+ it 'supports :skip_validations option as lambda' do
302
+ user = SkipValidationsLambdaUser.new
303
+ user.foo = 'wrong'
304
+ expect(user).must_be :valid?
305
+ end
306
+
307
+ it 'supports :skip_validations option as lambda with a parameter' do
308
+ user = SkipValidationsLambdaWithParamUser.new
309
+ user.foo = 'wrong'
310
+ expect(user).must_be :valid?
213
311
  end
214
312
 
215
313
  it 'supports multiple attributes' do
216
314
  user = User.new
217
- user.interests.must_be_empty
315
+ expect(user.interests).must_be_empty
218
316
  user.interests << :music
219
- user.interests.must_equal %w(music)
317
+ expect(user.interests).must_equal %w(music)
220
318
  user.save!
221
319
 
222
320
  user = User.find(user.id)
223
- user.interests.must_be_instance_of Enumerize::Set
224
- user.interests.must_equal %w(music)
321
+ expect(user.interests).must_be_instance_of Enumerize::Set
322
+ expect(user.interests).must_equal %w(music)
225
323
  user.interests << :sports
226
- user.interests.must_equal %w(music sports)
324
+ expect(user.interests).must_equal %w(music sports)
227
325
 
228
326
  user.interests = []
229
327
  interests = user.interests
230
328
  interests << :music
231
- interests.must_equal %w(music)
329
+ expect(interests).must_equal %w(music)
232
330
  interests << :dancing
233
- interests.must_equal %w(music dancing)
331
+ expect(interests).must_equal %w(music dancing)
234
332
  end
235
333
 
236
334
  it 'stores multiple value passed passed to new' do
237
335
  user = User.new(interests: [:music, :dancing])
238
336
  user.save!
239
- user.interests.must_equal %w(music dancing)
240
- 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)
241
339
  end
242
340
 
243
341
  it 'returns invalid multiple value for validation' do
@@ -245,57 +343,66 @@ describe Enumerize::ActiveRecordSupport do
245
343
  user.interests << :music
246
344
  user.interests << :invalid
247
345
  values = user.read_attribute_for_validation(:interests)
248
- values.must_equal %w(music invalid)
346
+ expect(values).must_equal %w(music invalid)
249
347
  end
250
348
 
251
349
  it 'validates multiple attributes' do
252
350
  user = User.new
253
351
  user.interests << :invalid
254
- user.wont_be :valid?
352
+ expect(user).wont_be :valid?
255
353
 
256
354
  user.interests = Object.new
257
- user.wont_be :valid?
355
+ expect(user).wont_be :valid?
258
356
 
259
357
  user.interests = ['music', '']
260
- user.must_be :valid?
358
+ expect(user).must_be :valid?
261
359
  end
262
360
 
263
361
  it 'stores custom values for multiple attributes' do
264
362
  User.delete_all
265
363
 
266
- klass = Class.new(User)
364
+ klass = Class.new(User) do
365
+ def self.name
366
+ 'UserSubclass'
367
+ end
368
+ end
267
369
  klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
268
370
 
269
371
  user = klass.new
270
372
  user.interests << :music
271
- user.read_attribute(:interests).must_equal [0]
272
- user.interests.must_equal %w(music)
373
+ expect(user.read_attribute(:interests)).must_equal [0]
374
+ expect(user.interests).must_equal %w(music)
273
375
  user.save
274
376
 
275
377
  user = klass.find(user.id)
276
- user.interests.must_equal %w(music)
378
+ expect(user.interests).must_equal %w(music)
277
379
  end
278
380
 
279
381
  it 'adds scope' do
280
382
  User.delete_all
281
383
 
282
- user_1 = User.create!(status: :active, role: :admin)
283
- 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)
386
+ user_3 = User.create!(sex: :male, skill: :pro)
284
387
 
285
- User.with_status(:active).must_equal [user_1]
286
- User.with_status(:blocked).must_equal [user_2]
287
- 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
288
391
 
289
- User.without_status(:active).must_equal [user_2]
290
- User.without_status(:active, :blocked).must_equal []
392
+ expect(User.without_status(:active)).must_equal [user_2]
393
+ expect(User.without_status(:active, :blocked)).must_equal []
291
394
 
292
- User.having_role(:admin).must_equal [user_1]
395
+ expect(User.male).must_equal [user_3]
396
+ expect(User.pro).must_equal [user_3]
397
+
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
293
400
  end
294
401
 
295
402
  it 'ignores not enumerized values that passed to the scope method' do
296
403
  User.delete_all
297
404
 
298
- User.with_status(:foo).must_equal []
405
+ expect(User.with_status(:foo)).must_equal []
299
406
  end
300
407
 
301
408
  it 'allows either key or value as valid' do
@@ -303,13 +410,13 @@ describe Enumerize::ActiveRecordSupport do
303
410
  user_2 = User.new(status: 1)
304
411
  user_3 = User.new(status: '1')
305
412
 
306
- user_1.status.must_equal 'active'
307
- user_2.status.must_equal 'active'
308
- 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'
309
416
 
310
- user_1.must_be :valid?
311
- user_2.must_be :valid?
312
- 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?
313
420
  end
314
421
 
315
422
  it 'supports defining enumerized attributes on abstract class' do
@@ -317,7 +424,7 @@ describe Enumerize::ActiveRecordSupport do
317
424
 
318
425
  document = Document.new
319
426
  document.visibility = :protected
320
- document.visibility.must_equal 'protected'
427
+ expect(document.visibility).must_equal 'protected'
321
428
  end
322
429
 
323
430
  it 'supports defining enumerized scopes on abstract class' do
@@ -326,7 +433,7 @@ describe Enumerize::ActiveRecordSupport do
326
433
  document_1 = Document.create!(visibility: :public)
327
434
  document_2 = Document.create!(visibility: :private)
328
435
 
329
- Document.with_visibility(:public).must_equal [document_1]
436
+ expect(Document.with_visibility(:public)).must_equal [document_1]
330
437
  end
331
438
 
332
439
  it 'validates uniqueness' do
@@ -338,7 +445,7 @@ describe Enumerize::ActiveRecordSupport do
338
445
  user.status = :active
339
446
  user.valid?
340
447
 
341
- user.errors[:status].wont_be :empty?
448
+ expect(user.errors[:status]).wont_be :empty?
342
449
  end
343
450
 
344
451
  it 'validates presence with multiple attributes' do
@@ -346,17 +453,17 @@ describe Enumerize::ActiveRecordSupport do
346
453
  user.interests = []
347
454
  user.valid?
348
455
 
349
- user.errors[:interests].wont_be :empty?
456
+ expect(user.errors[:interests]).wont_be :empty?
350
457
 
351
458
  user.interests = ['']
352
459
  user.valid?
353
460
 
354
- user.errors[:interests].wont_be :empty?
461
+ expect(user.errors[:interests]).wont_be :empty?
355
462
 
356
463
  user.interests = [:dancing, :programming]
357
464
  user.valid?
358
465
 
359
- user.errors[:interests].must_be_empty
466
+ expect(user.errors[:interests]).must_be_empty
360
467
  end
361
468
 
362
469
  it 'is valid after #becomes' do
@@ -368,7 +475,7 @@ describe Enumerize::ActiveRecordSupport do
368
475
  uniq_user = User.find(user.id).becomes(UniqStatusUser)
369
476
  uniq_user.valid?
370
477
 
371
- uniq_user.errors.must_be_empty
478
+ expect(uniq_user.errors).must_be_empty
372
479
  end
373
480
 
374
481
  it 'supports multiple attributes in #becomes' do
@@ -381,8 +488,8 @@ describe Enumerize::ActiveRecordSupport do
381
488
 
382
489
  user = uniq_user.becomes(User)
383
490
 
384
- user.sex.must_equal uniq_user.sex
385
- 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
386
493
  end
387
494
 
388
495
  it "doesn't update record" do
@@ -412,7 +519,7 @@ describe Enumerize::ActiveRecordSupport do
412
519
  user.reload
413
520
  user.status = 'active'
414
521
 
415
- user.changes.must_be_empty
522
+ expect(user.changes).must_be_empty
416
523
  end
417
524
 
418
525
  it 'allows using update_all' do
@@ -422,26 +529,30 @@ describe Enumerize::ActiveRecordSupport do
422
529
 
423
530
  User.update_all(status: :blocked)
424
531
  user.reload
425
- user.status.must_equal 'blocked'
532
+ expect(user.status).must_equal 'blocked'
426
533
 
427
534
  User.update_all(status: :active, account_type: :basic)
428
535
  user.reload
429
- user.status.must_equal 'active'
430
- user.account_type.must_equal 'basic'
536
+ expect(user.status).must_equal 'active'
537
+ expect(user.account_type).must_equal 'basic'
431
538
  end
432
539
 
433
540
  it 'allows using update_all for multiple enumerize' do
434
541
  User.delete_all
435
542
 
436
- klass = Class.new(User)
543
+ klass = Class.new(User) do
544
+ def self.name
545
+ 'UserSubclass'
546
+ end
547
+ end
437
548
  klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
438
549
 
439
550
  user = klass.create(status: :active)
440
551
  klass.update_all(status: :blocked, interests: [:music, :dancing])
441
552
 
442
553
  user = klass.find(user.id)
443
- user.status.must_equal 'blocked'
444
- user.interests.must_equal %w(music dancing)
554
+ expect(user.status).must_equal 'blocked'
555
+ expect(user.interests).must_equal %w(music dancing)
445
556
  end
446
557
 
447
558
  it 'allows using update_all with values' do
@@ -451,7 +562,7 @@ describe Enumerize::ActiveRecordSupport do
451
562
 
452
563
  User.update_all(status: 2)
453
564
  user.reload
454
- user.status.must_equal 'blocked'
565
+ expect(user.status).must_equal 'blocked'
455
566
  end
456
567
 
457
568
  it 'allows using update_all on relation objects' do
@@ -461,7 +572,7 @@ describe Enumerize::ActiveRecordSupport do
461
572
 
462
573
  User.all.update_all(status: :blocked)
463
574
  user.reload
464
- user.status.must_equal 'blocked'
575
+ expect(user.status).must_equal 'blocked'
465
576
  end
466
577
 
467
578
  it 'allows using update_all on association relation objects' do
@@ -473,7 +584,7 @@ describe Enumerize::ActiveRecordSupport do
473
584
 
474
585
  user.documents.update_all(status: :release)
475
586
  document.reload
476
- document.status.must_equal 'release'
587
+ expect(document.status).must_equal 'release'
477
588
  end
478
589
 
479
590
  it 'preserves string usage of update_all' do
@@ -483,7 +594,7 @@ describe Enumerize::ActiveRecordSupport do
483
594
 
484
595
  User.update_all("name = 'Frederick'")
485
596
  user.reload
486
- user.name.must_equal 'Frederick'
597
+ expect(user.name).must_equal 'Frederick'
487
598
  end
488
599
 
489
600
  it 'preserves interpolated array usage of update_all' do
@@ -493,7 +604,7 @@ describe Enumerize::ActiveRecordSupport do
493
604
 
494
605
  User.update_all(["name = :name", {name: 'Frederick'}])
495
606
  user.reload
496
- user.name.must_equal 'Frederick'
607
+ expect(user.name).must_equal 'Frederick'
497
608
  end
498
609
 
499
610
  it 'sets attribute to nil if given one is not valid' do
@@ -503,24 +614,24 @@ describe Enumerize::ActiveRecordSupport do
503
614
 
504
615
  User.update_all(status: :foo)
505
616
  user.reload
506
- user.status.must_be_nil
617
+ expect(user.status).must_be_nil
507
618
  end
508
619
 
509
620
  it 'supports AR types serialization' do
510
621
  type = User.type_for_attribute('status')
511
- type.must_be_instance_of Enumerize::ActiveRecordSupport::Type
622
+ expect(type).must_be_instance_of Enumerize::ActiveRecordSupport::Type
512
623
  serialized = type.serialize('blocked')
513
- serialized.must_equal 2
624
+ expect(serialized).must_equal 2
514
625
  end
515
626
 
516
627
  it 'has AR type itself JSON serializable' do
517
628
  type = User.type_for_attribute('status')
518
- type.as_json['attr'].must_equal 'status'
629
+ expect(type.as_json['attr']).must_equal 'status'
519
630
  end
520
631
 
521
632
  it "doesn't break YAML serialization" do
522
633
  user = YAML.load(User.create(status: :blocked).to_yaml)
523
- user.status.must_equal 'blocked'
634
+ expect(user.status).must_equal 'blocked'
524
635
  end
525
636
 
526
637
  # https://github.com/brainspec/enumerize/issues/304
@@ -528,6 +639,32 @@ describe Enumerize::ActiveRecordSupport do
528
639
  table = User.arel_table
529
640
  sql = User.where(table[:account_type].matches '%foo%').to_sql
530
641
 
531
- sql.must_include 'LIKE \'%foo%\''
642
+ expect(sql).must_include 'LIKE \'%foo%\''
643
+ end
644
+
645
+ if Rails::VERSION::MAJOR >= 6
646
+ it 'supports AR#insert_all' do
647
+ User.delete_all
648
+
649
+ User.insert_all([{ sex: :male }])
650
+ User.insert_all([{ status: :active }])
651
+ User.insert_all([{ interests: [:music, :sports] }])
652
+
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
656
+ end
657
+
658
+ it 'supports AR#upsert_all' do
659
+ User.delete_all
660
+
661
+ User.upsert_all([{ sex: :male }])
662
+ User.upsert_all([{ status: :active }])
663
+ User.upsert_all([{ interests: [:music, :sports] }])
664
+
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
668
+ end
532
669
  end
533
670
  end