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