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
data/test/mongoid_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  begin
@@ -18,10 +20,16 @@ describe Enumerize do
18
20
 
19
21
  field :sex
20
22
  field :role
23
+ field :foo
24
+ field :skill
25
+
21
26
  enumerize :sex, :in => %w[male female], scope: true
22
27
  enumerize :status, :in => %w[notice warning error], scope: true
23
28
  enumerize :role, :in => %w[admin user], :default => 'user', scope: :having_role
24
29
  enumerize :mult, :in => %w[one two three four], :multiple => true
30
+ enumerize :foo, :in => %w[bar baz], :skip_validations => true
31
+ enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
32
+ enumerize :account_type, :in => %w[basic premium], scope: :shallow
25
33
  end
26
34
 
27
35
  before { $VERBOSE = nil }
@@ -32,7 +40,7 @@ describe Enumerize do
32
40
  it 'sets nil if invalid value is passed' do
33
41
  user = model.new
34
42
  user.sex = :invalid
35
- user.sex.must_be_nil
43
+ expect(user.sex).must_be_nil
36
44
  end
37
45
 
38
46
  it 'saves value' do
@@ -40,7 +48,7 @@ describe Enumerize do
40
48
  user = model.new
41
49
  user.sex = :female
42
50
  user.save!
43
- user.sex.must_equal 'female'
51
+ expect(user.sex).must_equal 'female'
44
52
  end
45
53
 
46
54
  it 'loads value' do
@@ -48,13 +56,13 @@ describe Enumerize do
48
56
  model.create!(:sex => :male)
49
57
  store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
50
58
  user = model.first
51
- user.sex.must_equal 'male'
52
- user.sex_text.must_equal 'Male'
59
+ expect(user.sex).must_equal 'male'
60
+ expect(user.sex_text).must_equal 'Male'
53
61
  end
54
62
  end
55
63
 
56
64
  it 'has default value' do
57
- model.new.role.must_equal 'user'
65
+ expect(model.new.role).must_equal 'user'
58
66
  end
59
67
 
60
68
  it 'uses after_initialize callback to set default value' do
@@ -62,7 +70,7 @@ describe Enumerize do
62
70
  model.create!(sex: 'male', role: nil)
63
71
 
64
72
  user = model.where(sex: 'male').first
65
- user.role.must_equal 'user'
73
+ expect(user.role).must_equal 'user'
66
74
  end
67
75
 
68
76
  it 'does not set default value for not selected attributes' do
@@ -75,7 +83,21 @@ describe Enumerize do
75
83
  it 'validates inclusion' do
76
84
  user = model.new
77
85
  user.role = 'wrong'
78
- user.wont_be :valid?
86
+ expect(user).wont_be :valid?
87
+ end
88
+
89
+ it 'does not validate inclusion when :skip_validations option passed' do
90
+ user = model.new
91
+ user.foo = 'wrong'
92
+ expect(user).must_be :valid?
93
+ end
94
+
95
+ it 'sets value to enumerized field from db when record is reloaded' do
96
+ user = model.create!(mult: [:one])
97
+ model.find(user.id).update(mult: %i[two three])
98
+ expect(user.mult).must_equal %w[one]
99
+ user.reload
100
+ expect(user.mult).must_equal %w[two three]
79
101
  end
80
102
 
81
103
  it 'assigns value on loaded record' do
@@ -83,7 +105,7 @@ describe Enumerize do
83
105
  model.create!(:sex => :male)
84
106
  user = model.first
85
107
  user.sex = :female
86
- user.sex.must_equal 'female'
108
+ expect(user.sex).must_equal 'female'
87
109
  end
88
110
 
89
111
  it 'loads multiple properly' do
@@ -91,25 +113,32 @@ describe Enumerize do
91
113
 
92
114
  model.create!(:mult => ['one', 'two'])
93
115
  user = model.first
94
- user.mult.to_a.must_equal ['one', 'two']
116
+ expect(user.mult.to_a).must_equal ['one', 'two']
95
117
  end
96
118
 
97
119
  it 'adds scope' do
98
120
  model.delete_all
99
121
 
100
- user_1 = model.create!(sex: :male, role: :admin)
101
- user_2 = model.create!(sex: :female, role: :user)
122
+ user_1 = model.create!(sex: :male, skill: :noob, role: :admin, account_type: :basic)
123
+ user_2 = model.create!(sex: :female, skill: :noob, role: :user, account_type: :basic)
124
+ user_3 = model.create!(skill: :pro, account_type: :premium)
125
+
126
+ expect(model.with_sex(:male).to_a).must_equal [user_1]
127
+ expect(model.with_sex(:female).to_a).must_equal [user_2]
128
+ expect(model.with_sex(:male, :female).to_set).must_equal [user_1, user_2].to_set
129
+
130
+ expect(model.without_sex(:male).to_set).must_equal [user_2, user_3].to_set
131
+ expect(model.without_sex(:female).to_set).must_equal [user_1, user_3].to_set
132
+ expect(model.without_sex(:male, :female).to_a).must_equal [user_3]
102
133
 
103
- model.with_sex(:male).to_a.must_equal [user_1]
104
- model.with_sex(:female).to_a.must_equal [user_2]
105
- model.with_sex(:male, :female).to_set.must_equal [user_1, user_2].to_set
134
+ expect(model.having_role(:admin).to_a).must_equal [user_1]
135
+ expect(model.having_role(:user).to_a).must_equal [user_2, user_3]
106
136
 
107
- model.without_sex(:male).to_a.must_equal [user_2]
108
- model.without_sex(:female).to_a.must_equal [user_1]
109
- model.without_sex(:male, :female).to_a.must_equal []
137
+ expect(model.pro.to_a).must_equal [user_3]
138
+ expect(model.premium.to_a).must_equal [user_3]
110
139
 
111
- model.having_role(:admin).to_a.must_equal [user_1]
112
- model.having_role(:user).to_a.must_equal [user_2]
140
+ expect(model.not_pro.to_set).must_equal [user_1, user_2].to_set
141
+ expect(model.not_premium.to_set).must_equal [user_1, user_2].to_set
113
142
  end
114
143
 
115
144
  it 'chains scopes' do
@@ -119,14 +148,14 @@ describe Enumerize do
119
148
  user_2 = model.create!(status: :warning)
120
149
  user_3 = model.create!(status: :error)
121
150
 
122
- model.with_status(:notice, :warning).with_status(:notice, :error).to_a.must_equal [user_1]
123
- model.with_status(:notice, :warning).union.with_status(:notice, :error).to_a.must_equal [user_1, user_2, user_3]
151
+ expect(model.with_status(:notice, :warning).with_status(:notice, :error).to_a).must_equal [user_1]
152
+ expect(model.with_status(:notice, :warning).union.with_status(:notice, :error).to_a).must_equal [user_1, user_2, user_3]
124
153
  end
125
154
 
126
155
  it 'ignores not enumerized values that passed to the scope method' do
127
156
  model.delete_all
128
157
 
129
- model.with_sex(:foo).must_equal []
158
+ expect(model.with_sex(:foo)).must_equal []
130
159
  end
131
160
  end
132
161
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  describe Enumerize::Base do
@@ -15,38 +17,38 @@ describe Enumerize::Base do
15
17
 
16
18
  it 'returns [] when not set' do
17
19
  kklass.enumerize :foos, in: %w(a b), multiple: true
18
- object.foos.must_equal []
20
+ expect(object.foos).must_equal []
19
21
  end
20
22
 
21
23
  it 'returns setted array' do
22
24
  kklass.enumerize :foos, in: %w(a b c), multiple: true
23
25
  object.foos = %w(a c)
24
- object.foos.must_equal %w(a c)
26
+ expect(object.foos).must_equal %w(a c)
25
27
  end
26
28
 
27
29
  it 'sets default value as single value' do
28
30
  kklass.enumerize :foos, in: %w(a b c), default: 'b', multiple: true
29
- object.foos.must_equal %w(b)
31
+ expect(object.foos).must_equal %w(b)
30
32
  end
31
33
 
32
34
  it 'sets default value as array of one element' do
33
35
  kklass.enumerize :foos, in: %w(a b c), default: %w(b), multiple: true
34
- object.foos.must_equal %w(b)
36
+ expect(object.foos).must_equal %w(b)
35
37
  end
36
38
 
37
39
  it 'sets default value as array of several elements' do
38
40
  kklass.enumerize :foos, in: %w(a b c), default: %w(b c), multiple: true
39
- object.foos.must_equal %w(b c)
41
+ expect(object.foos).must_equal %w(b c)
40
42
  end
41
43
 
42
44
  it "doesn't define _text method" do
43
45
  kklass.enumerize :foos, in: %w(a b c), multiple: true
44
- object.wont_respond_to :foos_text
46
+ expect(object).wont_respond_to :foos_text
45
47
  end
46
48
 
47
49
  it "doesn't define _value method" do
48
50
  kklass.enumerize :foos, in: %w(a b c), multiple: true
49
- object.wont_respond_to :foos_value
51
+ expect(object).wont_respond_to :foos_value
50
52
  end
51
53
 
52
54
  it "cannot define multiple with scope" do
@@ -54,4 +56,10 @@ describe Enumerize::Base do
54
56
  kklass.enumerize :foos, in: %w(a b c), multiple: true, scope: true
55
57
  end
56
58
  end
59
+
60
+ it 'assign a name with the first letter capitalized' do
61
+ kklass.enumerize :Foos, in: %w(a b c), multiple: true
62
+ object.Foos = %w(a c)
63
+ expect(object.Foos).must_equal %w(a c)
64
+ end
57
65
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  describe Enumerize::Predicates do
@@ -11,53 +13,53 @@ describe Enumerize::Predicates do
11
13
 
12
14
  it 'creates predicate methods' do
13
15
  kklass.enumerize(:foo, in: %w(a b), predicates: true)
14
- object.must_respond_to :a?
15
- object.must_respond_to :b?
16
+ expect(object).must_respond_to :a?
17
+ expect(object).must_respond_to :b?
16
18
  end
17
19
 
18
20
  it 'creates predicate methods when enumerized values have dash in it' do
19
21
  kklass.enumerize(:foo, in: %w(foo-bar bar-foo), predicates: true)
20
- object.must_respond_to :foo_bar?
21
- object.must_respond_to :bar_foo?
22
+ expect(object).must_respond_to :foo_bar?
23
+ expect(object).must_respond_to :bar_foo?
22
24
  end
23
25
 
24
26
  it 'creates predicate methods on multiple attribute' do
25
27
  kklass.enumerize(:foo, in: %w(a b), predicates: true, multiple: true)
26
- object.must_respond_to :a?
27
- object.must_respond_to :b?
28
+ expect(object).must_respond_to :a?
29
+ expect(object).must_respond_to :b?
28
30
  end
29
31
 
30
32
  it 'checks values' do
31
33
  kklass.enumerize(:foo, in: %w(a b), predicates: true)
32
34
  object.foo = 'a'
33
- object.a?.must_equal true
34
- object.b?.must_equal false
35
+ expect(object.a?).must_equal true
36
+ expect(object.b?).must_equal false
35
37
  end
36
38
 
37
39
  it 'checks values on multiple attribute' do
38
40
  kklass.enumerize(:foo, in: %w(a b), predicates: true, multiple: true)
39
41
  object.foo << :a
40
- object.a?.must_equal true
41
- object.b?.must_equal false
42
+ expect(object.a?).must_equal true
43
+ expect(object.b?).must_equal false
42
44
  end
43
45
 
44
46
  it 'prefixes methods' do
45
47
  kklass.enumerize(:foo, in: %w(a b), predicates: { prefix: 'bar' })
46
- object.wont_respond_to :a?
47
- object.wont_respond_to :b?
48
- object.must_respond_to :bar_a?
49
- object.must_respond_to :bar_b?
48
+ expect(object).wont_respond_to :a?
49
+ expect(object).wont_respond_to :b?
50
+ expect(object).must_respond_to :bar_a?
51
+ expect(object).must_respond_to :bar_b?
50
52
  end
51
53
 
52
54
  it 'accepts only option' do
53
55
  kklass.enumerize(:foo, in: %w(a b), predicates: { only: :a })
54
- object.must_respond_to :a?
55
- object.wont_respond_to :b?
56
+ expect(object).must_respond_to :a?
57
+ expect(object).wont_respond_to :b?
56
58
  end
57
59
 
58
60
  it 'accepts except option' do
59
61
  kklass.enumerize(:foo, in: %w(a b), predicates: { except: :a })
60
- object.wont_respond_to :a?
61
- object.must_respond_to :b?
62
+ expect(object).wont_respond_to :a?
63
+ expect(object).must_respond_to :b?
62
64
  end
63
65
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class RailsAdminSpec < MiniTest::Spec
@@ -12,14 +14,14 @@ class RailsAdminSpec < MiniTest::Spec
12
14
  it 'defines enum method' do
13
15
  store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
14
16
  kklass.enumerize(:foo, in: [:a, :b])
15
- object.foo_enum.must_equal [['a text', 'a'], ['b text', 'b']]
17
+ expect(object.foo_enum).must_equal [['a text', 'a'], ['b text', 'b']]
16
18
  end
17
19
  end
18
20
 
19
21
  it 'defines enum properly for custom values enumerations' do
20
22
  store_translations(:en, :enumerize => {:foo => {:a => 'a text', :b => 'b text'}}) do
21
23
  kklass.enumerize(:foo, in: {:a => 1, :b => 2})
22
- object.foo_enum.must_equal [['a text', 'a'], ['b text', 'b']]
24
+ expect(object.foo_enum).must_equal [['a text', 'a'], ['b text', 'b']]
23
25
  end
24
26
  end
25
27
  end
data/test/sequel_test.rb CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'sequel'
3
5
  require 'logger'
@@ -21,7 +23,9 @@ module SequelTest
21
23
  String :name
22
24
  String :interests
23
25
  String :status
26
+ Integer :skill
24
27
  String :account_type, default: "basic"
28
+ String :foo
25
29
  end
26
30
 
27
31
  DB.create_table :documents do
@@ -50,12 +54,14 @@ module SequelTest
50
54
  plugin :enumerize
51
55
  include RoleEnum
52
56
 
53
- enumerize :sex, :in => [:male, :female]
57
+ enumerize :sex, :in => [:male, :female], scope: :shallow
54
58
 
55
59
  enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true
56
60
 
57
61
  enumerize :status, :in => { active: 1, blocked: 2 }, scope: true
58
62
 
63
+ enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
64
+
59
65
  enumerize :account_type, :in => [:basic, :premium]
60
66
  end
61
67
 
@@ -67,11 +73,27 @@ module SequelTest
67
73
  end
68
74
  end
69
75
 
76
+ class SkipValidationsUser < Sequel::Model(:users)
77
+ include SkipValidationsEnum
78
+ end
79
+
80
+ class DoNotSkipValidationsUser < Sequel::Model(:users)
81
+ include DoNotSkipValidationsEnum
82
+ end
83
+
84
+ class SkipValidationsLambdaUser < Sequel::Model(:users)
85
+ include SkipValidationsLambdaEnum
86
+ end
87
+
88
+ class SkipValidationsLambdaWithParamUser < Sequel::Model(:users)
89
+ include SkipValidationsLambdaWithParamEnum
90
+ end
91
+
70
92
  describe Enumerize::SequelSupport do
71
93
  it 'sets nil if invalid value is passed' do
72
94
  user = User.new
73
95
  user.sex = :invalid
74
- user.sex.must_be_nil
96
+ expect(user.sex).must_be_nil
75
97
  end
76
98
 
77
99
  it 'saves value' do
@@ -79,7 +101,7 @@ module SequelTest
79
101
  user = User.new
80
102
  user.sex = :female
81
103
  user.save
82
- user.sex.must_equal 'female'
104
+ expect(user.sex).must_equal 'female'
83
105
  end
84
106
 
85
107
  it 'loads value' do
@@ -87,14 +109,14 @@ module SequelTest
87
109
  User.create(:sex => :male)
88
110
  store_translations(:en, :enumerize => {:sex => {:male => 'Male'}}) do
89
111
  user = User.first
90
- user.sex.must_equal 'male'
91
- user.sex_text.must_equal 'Male'
112
+ expect(user.sex).must_equal 'male'
113
+ expect(user.sex_text).must_equal 'Male'
92
114
  end
93
115
  end
94
116
 
95
117
  it 'has default value' do
96
- User.new.role.must_equal 'user'
97
- User.new.values[:role].must_equal 'user'
118
+ expect(User.new.role).must_equal 'user'
119
+ expect(User.new.values[:role]).must_equal 'user'
98
120
  end
99
121
 
100
122
  it 'does not set default value for not selected attributes' do
@@ -105,26 +127,26 @@ module SequelTest
105
127
  end
106
128
 
107
129
  it 'has default value with lambda' do
108
- User.new.lambda_role.must_equal 'admin'
109
- User.new.values[:lambda_role].must_equal 'admin'
130
+ expect(User.new.lambda_role).must_equal 'admin'
131
+ expect(User.new.values[:lambda_role]).must_equal 'admin'
110
132
  end
111
133
  it 'uses after_initialize callback to set default value' do
112
134
  User.filter{ true }.delete
113
135
  User.create(sex: 'male', lambda_role: nil)
114
136
 
115
137
  user = User.where(:sex => 'male').first
116
- user.lambda_role.must_equal 'admin'
138
+ expect(user.lambda_role).must_equal 'admin'
117
139
  end
118
140
 
119
141
  it 'uses default value from db column' do
120
- User.new.account_type.must_equal 'basic'
142
+ expect(User.new.account_type).must_equal 'basic'
121
143
  end
122
144
 
123
145
  it 'validates inclusion' do
124
146
  user = User.new
125
147
  user.role = 'wrong'
126
- user.wont_be :valid?
127
- user.errors[:role].must_include 'is not included in the list'
148
+ expect(user).wont_be :valid?
149
+ expect(user.errors[:role]).must_include 'is not included in the list'
128
150
  end
129
151
 
130
152
  it 'validates inclusion on mass assignment' do
@@ -135,41 +157,66 @@ module SequelTest
135
157
 
136
158
  it "uses persisted value for validation if it hasn't been set" do
137
159
  user = User.create :sex => :male
138
- User[user.id].read_attribute_for_validation(:sex).must_equal 'male'
160
+ expect(User[user.id].read_attribute_for_validation(:sex)).must_equal 'male'
139
161
  end
140
162
 
141
163
  it 'is valid with empty string assigned' do
142
164
  user = User.new
143
165
  user.role = ''
144
- user.must_be :valid?
166
+ expect(user).must_be :valid?
145
167
  end
146
168
 
147
169
  it 'stores nil when empty string assigned' do
148
170
  user = User.new
149
171
  user.role = ''
150
- user.values[:role].must_be_nil
172
+ expect(user.values[:role]).must_be_nil
173
+ end
174
+
175
+ it 'validates inclusion when :skip_validations = false' do
176
+ user = DoNotSkipValidationsUser.new
177
+ user.foo = 'wrong'
178
+ expect(user).wont_be :valid?
179
+ expect(user.errors[:foo]).must_include 'is not included in the list'
180
+ end
181
+
182
+ it 'does not validate inclusion when :skip_validations = true' do
183
+ user = SkipValidationsUser.new
184
+ user.foo = 'wrong'
185
+ expect(user).must_be :valid?
186
+ end
187
+
188
+ it 'supports :skip_validations option as lambda' do
189
+ user = SkipValidationsLambdaUser.new
190
+ user.foo = 'wrong'
191
+ expect(user).must_be :valid?
192
+ end
193
+
194
+ it 'supports :skip_validations option as lambda with a parameter' do
195
+ user = SkipValidationsLambdaWithParamUser.new
196
+ user.foo = 'wrong'
197
+ expect(user).must_be :valid?
151
198
  end
152
199
 
153
200
  it 'supports multiple attributes' do
154
201
  user = User.new
155
202
  user.interests ||= []
156
- user.interests.must_be_empty
203
+ expect(user.interests).must_be_empty
157
204
  user.interests << "music"
158
- user.interests.must_equal %w(music)
205
+ expect(user.interests).must_equal %w(music)
159
206
  user.save
160
207
 
161
208
  user = User[user.id]
162
- user.interests.must_be_instance_of Enumerize::Set
163
- user.interests.must_equal %w(music)
209
+ expect(user.interests).must_be_instance_of Enumerize::Set
210
+ expect(user.interests).must_equal %w(music)
164
211
  user.interests << "sports"
165
- user.interests.must_equal %w(music sports)
212
+ expect(user.interests).must_equal %w(music sports)
166
213
 
167
214
  user.interests = []
168
215
  interests = user.interests
169
216
  interests << "music"
170
- interests.must_equal %w(music)
217
+ expect(interests).must_equal %w(music)
171
218
  interests << "dancing"
172
- interests.must_equal %w(music dancing)
219
+ expect(interests).must_equal %w(music dancing)
173
220
  end
174
221
 
175
222
  it 'returns invalid multiple value for validation' do
@@ -177,19 +224,19 @@ module SequelTest
177
224
  user.interests << :music
178
225
  user.interests << :invalid
179
226
  values = user.read_attribute_for_validation(:interests)
180
- values.must_equal %w(music invalid)
227
+ expect(values).must_equal %w(music invalid)
181
228
  end
182
229
 
183
230
  it 'validates multiple attributes' do
184
231
  user = User.new
185
232
  user.interests << :invalid
186
- user.wont_be :valid?
233
+ expect(user).wont_be :valid?
187
234
 
188
235
  user.interests = Object.new
189
- user.wont_be :valid?
236
+ expect(user).wont_be :valid?
190
237
 
191
238
  user.interests = ['music', '']
192
- user.must_be :valid?
239
+ expect(user).must_be :valid?
193
240
  end
194
241
 
195
242
  it 'stores custom values for multiple attributes' do
@@ -200,27 +247,33 @@ module SequelTest
200
247
 
201
248
  user = klass.new
202
249
  user.interests << :music
203
- user.interests.must_equal %w(music)
250
+ expect(user.interests).must_equal %w(music)
204
251
  user.save
205
252
 
206
253
  user = klass[user.id]
207
- user.interests.must_equal %w(music)
254
+ expect(user.interests).must_equal %w(music)
208
255
  end
209
256
 
210
257
  it 'adds scope' do
211
258
  User.filter{ true }.delete
212
259
 
213
- user_1 = User.create(status: :active, role: :admin)
214
- user_2 = User.create(status: :blocked)
260
+ user_1 = User.create(sex: :female, skill: :noob, status: :active, role: :admin)
261
+ user_2 = User.create(sex: :female, skill: :casual, status: :blocked)
262
+ user_3 = User.create(sex: :male, skill: :pro)
263
+
264
+ expect(User.with_status(:active).to_a).must_equal [user_1]
265
+ expect(User.with_status(:blocked).to_a).must_equal [user_2]
266
+ expect(User.with_status(:active, :blocked).to_set).must_equal [user_1, user_2].to_set
215
267
 
216
- User.with_status(:active).to_a.must_equal [user_1]
217
- User.with_status(:blocked).to_a.must_equal [user_2]
218
- User.with_status(:active, :blocked).to_set.must_equal [user_1, user_2].to_set
268
+ expect(User.without_status(:active).to_a).must_equal [user_2]
269
+ expect(User.without_status(:active, :blocked).to_a).must_equal []
219
270
 
220
- User.without_status(:active).to_a.must_equal [user_2]
221
- User.without_status(:active, :blocked).to_a.must_equal []
271
+ expect(User.having_role(:admin).to_a).must_equal [user_1]
272
+ expect(User.male.to_a).must_equal [user_3]
273
+ expect(User.pro.to_a).must_equal [user_3]
222
274
 
223
- User.having_role(:admin).to_a.must_equal [user_1]
275
+ expect(User.not_male.to_set).must_equal [user_1, user_2].to_set
276
+ expect(User.not_pro.to_set).must_equal [user_1, user_2].to_set
224
277
  end
225
278
 
226
279
  it 'allows either key or value as valid' do
@@ -228,13 +281,13 @@ module SequelTest
228
281
  user_2 = User.new(status: 1)
229
282
  user_3 = User.new(status: '1')
230
283
 
231
- user_1.status.must_equal 'active'
232
- user_2.status.must_equal 'active'
233
- user_3.status.must_equal 'active'
284
+ expect(user_1.status).must_equal 'active'
285
+ expect(user_2.status).must_equal 'active'
286
+ expect(user_3.status).must_equal 'active'
234
287
 
235
- user_1.must_be :valid?
236
- user_2.must_be :valid?
237
- user_3.must_be :valid?
288
+ expect(user_1).must_be :valid?
289
+ expect(user_2).must_be :valid?
290
+ expect(user_3).must_be :valid?
238
291
  end
239
292
 
240
293
  it 'supports defining enumerized attributes on abstract class' do
@@ -242,7 +295,7 @@ module SequelTest
242
295
 
243
296
  document = Document.new
244
297
  document.visibility = :protected
245
- document.visibility.must_equal 'protected'
298
+ expect(document.visibility).must_equal 'protected'
246
299
  end
247
300
 
248
301
  it 'supports defining enumerized scopes on abstract class' do
@@ -251,7 +304,7 @@ module SequelTest
251
304
  document_1 = Document.create(visibility: :public)
252
305
  document_2 = Document.create(visibility: :private)
253
306
 
254
- Document.with_visibility(:public).to_a.must_equal [document_1]
307
+ expect(Document.with_visibility(:public).to_a).must_equal [document_1]
255
308
  end
256
309
 
257
310
  it 'validates uniqueness' do
@@ -260,9 +313,9 @@ module SequelTest
260
313
  user = UniqStatusUser.new
261
314
  user.sex = "male"
262
315
  user.status = :active
263
- user.valid?.must_equal false
316
+ expect(user.valid?).must_equal false
264
317
 
265
- user.errors[:status].wont_be :empty?
318
+ expect(user.errors[:status]).wont_be :empty?
266
319
  end
267
320
 
268
321
  it "doesn't update record" do