enumerize 2.1.2 → 2.4.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 (62) hide show
  1. checksums.yaml +5 -5
  2. data/.travis.yml +10 -9
  3. data/CHANGELOG.md +50 -3
  4. data/Gemfile +2 -3
  5. data/Gemfile.global +1 -2
  6. data/Gemfile.mongo_mapper +2 -3
  7. data/Gemfile.rails60 +6 -0
  8. data/Gemfile.rails61 +6 -0
  9. data/README.md +37 -1
  10. data/Rakefile +2 -0
  11. data/lib/enumerize.rb +9 -0
  12. data/lib/enumerize/activemodel.rb +47 -0
  13. data/lib/enumerize/activerecord.rb +33 -3
  14. data/lib/enumerize/attribute.rb +19 -11
  15. data/lib/enumerize/attribute_map.rb +2 -0
  16. data/lib/enumerize/base.rb +6 -6
  17. data/lib/enumerize/hooks/formtastic.rb +4 -1
  18. data/lib/enumerize/hooks/sequel_dataset.rb +2 -0
  19. data/lib/enumerize/hooks/simple_form.rb +4 -1
  20. data/lib/enumerize/hooks/uniqueness.rb +5 -1
  21. data/lib/enumerize/integrations/rails_admin.rb +3 -1
  22. data/lib/enumerize/integrations/rspec.rb +2 -0
  23. data/lib/enumerize/integrations/rspec/matcher.rb +7 -2
  24. data/lib/enumerize/module.rb +2 -0
  25. data/lib/enumerize/module_attributes.rb +2 -0
  26. data/lib/enumerize/mongoid.rb +16 -0
  27. data/lib/enumerize/predicatable.rb +3 -1
  28. data/lib/enumerize/predicates.rb +2 -0
  29. data/lib/enumerize/scope/activerecord.rb +12 -0
  30. data/lib/enumerize/scope/mongoid.rb +11 -0
  31. data/lib/enumerize/scope/sequel.rb +12 -0
  32. data/lib/enumerize/sequel.rb +9 -4
  33. data/lib/enumerize/set.rb +2 -0
  34. data/lib/enumerize/utils.rb +12 -0
  35. data/lib/enumerize/value.rb +14 -15
  36. data/lib/enumerize/version.rb +1 -1
  37. data/lib/sequel/plugins/enumerize.rb +18 -0
  38. data/spec/enumerize/integrations/rspec/matcher_spec.rb +13 -10
  39. data/spec/spec_helper.rb +2 -0
  40. data/test/activemodel_test.rb +114 -0
  41. data/test/activerecord_test.rb +127 -5
  42. data/test/attribute_map_test.rb +2 -0
  43. data/test/attribute_test.rb +7 -0
  44. data/test/base_test.rb +35 -33
  45. data/test/formtastic_test.rb +25 -0
  46. data/test/module_attributes_test.rb +2 -0
  47. data/test/mongo_mapper_test.rb +12 -3
  48. data/test/mongoid_test.rb +30 -4
  49. data/test/multiple_test.rb +19 -11
  50. data/test/predicates_test.rb +12 -10
  51. data/test/rails_admin_test.rb +7 -5
  52. data/test/sequel_test.rb +62 -12
  53. data/test/set_test.rb +6 -4
  54. data/test/simple_form_test.rb +25 -0
  55. data/test/support/mock_controller.rb +2 -0
  56. data/test/support/shared_enums.rb +43 -0
  57. data/test/support/view_test_helper.rb +14 -1
  58. data/test/test_helper.rb +2 -0
  59. data/test/value_test.rb +33 -5
  60. metadata +15 -9
  61. data/Gemfile.rails42 +0 -7
  62. data/Gemfile.rails51 +0 -7
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails'
2
4
  require 'enumerize'
3
5
  require 'rspec/matchers/fail_matchers'
@@ -0,0 +1,114 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'test_helper'
4
+
5
+ if defined?(::ActiveModel::Attributes)
6
+
7
+ describe Enumerize do
8
+ class ActiveModelUser
9
+ include ActiveModel::Model
10
+ include ActiveModel::Attributes
11
+ extend Enumerize
12
+
13
+ attribute :name, :string
14
+ enumerize :sex, :in => %w[male female]
15
+ enumerize :role, :in => %w[admin user], :default => 'user'
16
+ enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true
17
+ end
18
+
19
+ class InterestsRequiredActiveModelUser < ActiveModelUser
20
+ validates :interests, presence: true
21
+ end
22
+
23
+ let(:model) { ActiveModelUser }
24
+
25
+ it 'initialize value' do
26
+ user = model.new(:name => 'active_model_user', :sex => :male, :role => :user, :interests => [:music, :programming])
27
+ user.sex.must_equal 'male'
28
+ user.sex_text.must_equal 'Male'
29
+ user.role.must_equal 'user'
30
+ user.role_text.must_equal 'User'
31
+ user.interests.must_equal %w(music programming)
32
+ end
33
+
34
+ it 'sets nil if invalid value is passed' do
35
+ user = model.new
36
+ user.sex = :invalid
37
+ user.sex.must_be_nil
38
+ end
39
+
40
+ it 'stores value' do
41
+ user = model.new
42
+ user.sex = :female
43
+ user.sex.must_equal 'female'
44
+ end
45
+
46
+ it 'has default value' do
47
+ model.new.role.must_equal 'user'
48
+ end
49
+
50
+ it 'validates inclusion' do
51
+ user = model.new
52
+ user.role = 'wrong'
53
+ user.wont_be :valid?
54
+ end
55
+
56
+ it 'supports multiple attributes' do
57
+ user = ActiveModelUser.new
58
+ user.interests.must_be_instance_of Enumerize::Set
59
+ user.interests.must_be_empty
60
+ user.interests << :music
61
+ user.interests.must_equal %w(music)
62
+ user.interests << :sports
63
+ user.interests.must_equal %w(music sports)
64
+
65
+ user.interests = []
66
+ interests = user.interests
67
+ interests << :music
68
+ interests.must_equal %w(music)
69
+ interests << :dancing
70
+ interests.must_equal %w(music dancing)
71
+ end
72
+
73
+ it 'returns invalid multiple value for validation' do
74
+ user = ActiveModelUser.new
75
+ user.interests << :music
76
+ user.interests << :invalid
77
+ values = user.read_attribute_for_validation(:interests)
78
+ values.must_equal %w(music invalid)
79
+ end
80
+
81
+ it 'validates multiple attributes' do
82
+ user = ActiveModelUser.new
83
+ user.interests << :invalid
84
+ user.wont_be :valid?
85
+
86
+ user.interests = Object.new
87
+ user.wont_be :valid?
88
+
89
+ user.interests = ['music', '']
90
+ user.must_be :valid?
91
+ end
92
+
93
+ it 'validates presence with multiple attributes' do
94
+ user = InterestsRequiredActiveModelUser.new
95
+ user.interests = []
96
+ user.valid?
97
+
98
+ user.errors[:interests].wont_be :empty?
99
+
100
+ user.interests = ['']
101
+ user.valid?
102
+
103
+ user.errors[:interests].wont_be :empty?
104
+
105
+ user.interests = [:dancing, :programming]
106
+ user.valid?
107
+
108
+ user.errors[:interests].must_be_empty
109
+ end
110
+ end
111
+
112
+ else
113
+ # Skip
114
+ end
@@ -44,7 +44,10 @@ ActiveRecord::Base.connection.instance_eval do
44
44
  t.string :name
45
45
  t.string :interests
46
46
  t.integer :status
47
+ t.text :settings
48
+ t.integer :skill
47
49
  t.string :account_type, :default => :basic
50
+ t.string :foo
48
51
  end
49
52
 
50
53
  create_table :documents do |t|
@@ -78,13 +81,18 @@ class User < ActiveRecord::Base
78
81
  extend Enumerize
79
82
  include RoleEnum
80
83
 
81
- enumerize :sex, :in => [:male, :female]
84
+ store :settings, accessors: [:language]
85
+
86
+ enumerize :sex, :in => [:male, :female], scope: :shallow
87
+ enumerize :language, :in => [:en, :jp]
82
88
 
83
89
  serialize :interests, Array
84
90
  enumerize :interests, :in => [:music, :sports, :dancing, :programming], :multiple => true
85
91
 
86
92
  enumerize :status, :in => { active: 1, blocked: 2 }, scope: true
87
93
 
94
+ enumerize :skill, :in => { noob: 0, casual: 1, pro: 2 }, scope: :shallow
95
+
88
96
  enumerize :account_type, :in => [:basic, :premium]
89
97
 
90
98
  # There is no column for relationship enumeration for testing purposes: model
@@ -103,6 +111,26 @@ class InterestsRequiredUser < User
103
111
  validates :interests, presence: true
104
112
  end
105
113
 
114
+ class SkipValidationsUser < ActiveRecord::Base
115
+ self.table_name = "users"
116
+ include SkipValidationsEnum
117
+ end
118
+
119
+ class DoNotSkipValidationsUser < ActiveRecord::Base
120
+ self.table_name = "users"
121
+ include DoNotSkipValidationsEnum
122
+ end
123
+
124
+ class SkipValidationsLambdaUser < ActiveRecord::Base
125
+ self.table_name = "users"
126
+ include SkipValidationsLambdaEnum
127
+ end
128
+
129
+ class SkipValidationsLambdaWithParamUser < ActiveRecord::Base
130
+ self.table_name = "users"
131
+ include SkipValidationsLambdaWithParamEnum
132
+ end
133
+
106
134
  describe Enumerize::ActiveRecordSupport do
107
135
  it 'sets nil if invalid value is passed' do
108
136
  user = User.new
@@ -128,6 +156,21 @@ describe Enumerize::ActiveRecordSupport do
128
156
  end
129
157
  end
130
158
 
159
+ it 'sets nil if invalid stored attribute value is passed' do
160
+ user = User.new
161
+ user.language = :invalid
162
+ user.language.must_be_nil
163
+ end
164
+
165
+ it 'saves stored attribute value' do
166
+ User.delete_all
167
+ user = User.new
168
+ user.language = :en
169
+ user.save!
170
+ user.reload
171
+ user.language.must_equal 'en'
172
+ end
173
+
131
174
  it 'has default value' do
132
175
  User.new.role.must_equal 'user'
133
176
  User.new.attributes['role'].must_equal 'user'
@@ -137,7 +180,9 @@ describe Enumerize::ActiveRecordSupport do
137
180
  User.delete_all
138
181
  User.create!(:sex => :male)
139
182
 
140
- assert_equal ['id'], User.select(:id).first.attributes.keys
183
+ user = User.select(:id).first
184
+ user.attributes['role'].must_equal nil
185
+ user.attributes['lambda_role'].must_equal nil
141
186
  end
142
187
 
143
188
  it 'has default value with lambda' do
@@ -173,6 +218,14 @@ describe Enumerize::ActiveRecordSupport do
173
218
  user.errors[:role].must_include 'is not included in the list'
174
219
  end
175
220
 
221
+ it 'sets value to enumerized field from db when record is reloaded' do
222
+ user = User.create!(interests: [:music])
223
+ User.find(user.id).update(interests: %i[music dancing])
224
+ user.interests.must_equal %w[music]
225
+ user.reload
226
+ user.interests.must_equal %w[music dancing]
227
+ end
228
+
176
229
  it 'validates inclusion when using write_attribute with string attribute' do
177
230
  user = User.new
178
231
  user.send(:write_attribute, 'role', 'wrong')
@@ -212,6 +265,31 @@ describe Enumerize::ActiveRecordSupport do
212
265
  user.read_attribute(:role).must_be_nil
213
266
  end
214
267
 
268
+ it 'validates inclusion when :skip_validations = false' do
269
+ user = DoNotSkipValidationsUser.new
270
+ user.foo = 'wrong'
271
+ user.wont_be :valid?
272
+ user.errors[:foo].must_include 'is not included in the list'
273
+ end
274
+
275
+ it 'does not validate inclusion when :skip_validations = true' do
276
+ user = SkipValidationsUser.new
277
+ user.foo = 'wrong'
278
+ user.must_be :valid?
279
+ end
280
+
281
+ it 'supports :skip_validations option as lambda' do
282
+ user = SkipValidationsLambdaUser.new
283
+ user.foo = 'wrong'
284
+ user.must_be :valid?
285
+ end
286
+
287
+ it 'supports :skip_validations option as lambda with a parameter' do
288
+ user = SkipValidationsLambdaWithParamUser.new
289
+ user.foo = 'wrong'
290
+ user.must_be :valid?
291
+ end
292
+
215
293
  it 'supports multiple attributes' do
216
294
  user = User.new
217
295
  user.interests.must_be_empty
@@ -263,7 +341,11 @@ describe Enumerize::ActiveRecordSupport do
263
341
  it 'stores custom values for multiple attributes' do
264
342
  User.delete_all
265
343
 
266
- klass = Class.new(User)
344
+ klass = Class.new(User) do
345
+ def self.name
346
+ 'UserSubclass'
347
+ end
348
+ end
267
349
  klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
268
350
 
269
351
  user = klass.new
@@ -281,6 +363,7 @@ describe Enumerize::ActiveRecordSupport do
281
363
 
282
364
  user_1 = User.create!(status: :active, role: :admin)
283
365
  user_2 = User.create!(status: :blocked)
366
+ user_3 = User.create!(sex: :male, skill: :pro)
284
367
 
285
368
  User.with_status(:active).must_equal [user_1]
286
369
  User.with_status(:blocked).must_equal [user_2]
@@ -289,7 +372,8 @@ describe Enumerize::ActiveRecordSupport do
289
372
  User.without_status(:active).must_equal [user_2]
290
373
  User.without_status(:active, :blocked).must_equal []
291
374
 
292
- User.having_role(:admin).must_equal [user_1]
375
+ User.male.must_equal [user_3]
376
+ User.pro.must_equal [user_3]
293
377
  end
294
378
 
295
379
  it 'ignores not enumerized values that passed to the scope method' do
@@ -433,7 +517,11 @@ describe Enumerize::ActiveRecordSupport do
433
517
  it 'allows using update_all for multiple enumerize' do
434
518
  User.delete_all
435
519
 
436
- klass = Class.new(User)
520
+ klass = Class.new(User) do
521
+ def self.name
522
+ 'UserSubclass'
523
+ end
524
+ end
437
525
  klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
438
526
 
439
527
  user = klass.create(status: :active)
@@ -522,4 +610,38 @@ describe Enumerize::ActiveRecordSupport do
522
610
  user = YAML.load(User.create(status: :blocked).to_yaml)
523
611
  user.status.must_equal 'blocked'
524
612
  end
613
+
614
+ # https://github.com/brainspec/enumerize/issues/304
615
+ it "fallbacks to a raw passed value if AR type can't find value in the attribute" do
616
+ table = User.arel_table
617
+ sql = User.where(table[:account_type].matches '%foo%').to_sql
618
+
619
+ sql.must_include 'LIKE \'%foo%\''
620
+ end
621
+
622
+ if Rails::VERSION::MAJOR >= 6
623
+ it 'supports AR#insert_all' do
624
+ User.delete_all
625
+
626
+ User.insert_all([{ sex: :male }])
627
+ User.insert_all([{ status: :active }])
628
+ User.insert_all([{ interests: [:music, :sports] }])
629
+
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
633
+ end
634
+
635
+ it 'supports AR#upsert_all' do
636
+ User.delete_all
637
+
638
+ User.upsert_all([{ sex: :male }])
639
+ User.upsert_all([{ status: :active }])
640
+ User.upsert_all([{ interests: [:music, :sports] }])
641
+
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
645
+ end
646
+ end
525
647
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  module Enumerize
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  describe Enumerize::Attribute do
@@ -14,6 +16,11 @@ describe Enumerize::Attribute do
14
16
  attr.values.must_equal %w[a b]
15
17
  end
16
18
 
19
+ it 'returns frozen values' do
20
+ build_attr nil, :foo, :in => [:a, :b]
21
+ attr.values.map(&:frozen?).must_equal [true, true]
22
+ end
23
+
17
24
  it 'converts name to symbol' do
18
25
  build_attr nil, 'foo', :in => %w[a b]
19
26
  attr.name.must_equal :foo
@@ -1,32 +1,34 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  describe Enumerize::Base do
4
- let(:klass) do
6
+ let(:kklass) do
5
7
  Class.new do
6
8
  extend Enumerize
7
9
  end
8
10
  end
9
11
 
10
12
  let(:subklass) do
11
- Class.new(klass)
13
+ Class.new(kklass)
12
14
  end
13
15
 
14
- let(:object) { klass.new }
16
+ let(:object) { kklass.new }
15
17
 
16
18
  it 'returns nil when not set' do
17
- klass.enumerize(:foo, :in => [:a, :b])
19
+ kklass.enumerize(:foo, :in => [:a, :b])
18
20
  object.foo.must_be_nil
19
21
  end
20
22
 
21
23
  it 'returns value that was set' do
22
- klass.enumerize(:foo, :in => [:a, :b])
24
+ kklass.enumerize(:foo, :in => [:a, :b])
23
25
  object.foo = :a
24
26
  object.foo.must_equal 'a'
25
27
  end
26
28
 
27
29
  it 'returns translation' do
28
30
  store_translations(:en, :enumerize => {:foo => {:a => 'a text'}}) do
29
- klass.enumerize(:foo, :in => [:a, :b])
31
+ kklass.enumerize(:foo, :in => [:a, :b])
30
32
  object.foo = :a
31
33
  object.foo.text.must_equal 'a text'
32
34
  object.foo_text.must_equal 'a text'
@@ -36,14 +38,14 @@ describe Enumerize::Base do
36
38
 
37
39
  it 'returns nil as translation when value is nil' do
38
40
  store_translations(:en, :enumerize => {:foo => {:a => 'a text'}}) do
39
- klass.enumerize(:foo, :in => [:a, :b])
41
+ kklass.enumerize(:foo, :in => [:a, :b])
40
42
  object.foo_text.must_be_nil
41
43
  end
42
44
  end
43
45
 
44
46
  it 'scopes translation by i18n key' do
45
- def klass.model_name
46
- name = "ExampleClass"
47
+ def kklass.model_name
48
+ name = String.new("ExampleClass")
47
49
  def name.i18n_key
48
50
  'example_class'
49
51
  end
@@ -52,7 +54,7 @@ describe Enumerize::Base do
52
54
  end
53
55
 
54
56
  store_translations(:en, :enumerize => {:example_class => {:foo => {:a => 'a text scoped'}}}) do
55
- klass.enumerize(:foo, :in => [:a, :b])
57
+ kklass.enumerize(:foo, :in => [:a, :b])
56
58
  object.foo = :a
57
59
  object.foo.text.must_equal 'a text scoped'
58
60
  object.foo_text.must_equal 'a text scoped'
@@ -61,88 +63,88 @@ describe Enumerize::Base do
61
63
 
62
64
  it 'returns humanized value if there are no translations' do
63
65
  store_translations(:en, :enumerize => {}) do
64
- klass.enumerize(:foo, :in => [:a, :b])
66
+ kklass.enumerize(:foo, :in => [:a, :b])
65
67
  object.foo = :a
66
68
  object.foo_text.must_equal 'A'
67
69
  end
68
70
  end
69
71
 
70
72
  it 'stores value as string' do
71
- klass.enumerize(:foo, :in => [:a, :b])
73
+ kklass.enumerize(:foo, :in => [:a, :b])
72
74
  object.foo = :a
73
75
  object.instance_variable_get(:@foo).must_be_instance_of String
74
76
  end
75
77
 
76
78
  it 'handles default value' do
77
- klass.enumerize(:foo, :in => [:a, :b], :default => :b)
79
+ kklass.enumerize(:foo, :in => [:a, :b], :default => :b)
78
80
  object.foo.must_equal 'b'
79
81
  end
80
82
 
81
83
  it 'handles default value with lambda' do
82
- klass.enumerize(:foo, :in => [:a, :b], :default => lambda { :b })
84
+ kklass.enumerize(:foo, :in => [:a, :b], :default => lambda { :b })
83
85
  object.foo.must_equal 'b'
84
86
  end
85
87
 
86
88
  it 'injects object instance into lamda default value' do
87
- klass.enumerize(:foo, :in => [:a, :b], :default => lambda { |obj| :b if obj.is_a? klass })
89
+ kklass.enumerize(:foo, :in => [:a, :b], :default => lambda { |obj| :b if obj.is_a? kklass })
88
90
  object.foo.must_equal 'b'
89
91
  end
90
92
 
91
93
  it 'raises exception on invalid default value' do
92
94
  proc {
93
- klass.enumerize(:foo, :in => [:a, :b], :default => :c)
95
+ kklass.enumerize(:foo, :in => [:a, :b], :default => :c)
94
96
  }.must_raise ArgumentError
95
97
  end
96
98
 
97
99
  it 'has enumerized attributes' do
98
- klass.enumerized_attributes.must_be_empty
99
- klass.enumerize(:foo, :in => %w[a b])
100
- klass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
100
+ kklass.enumerized_attributes.must_be_empty
101
+ kklass.enumerize(:foo, :in => %w[a b])
102
+ kklass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
101
103
  end
102
104
 
103
105
  it "doesn't override existing method" do
104
- method = klass.method(:name)
105
- klass.enumerize(:name, :in => %w[a b], :default => 'a')
106
- klass.method(:name).must_equal method
106
+ method = kklass.method(:name)
107
+ kklass.enumerize(:name, :in => %w[a b], :default => 'a')
108
+ kklass.method(:name).must_equal method
107
109
  end
108
110
 
109
111
  it "inherits enumerized attributes from a parent class" do
110
- klass.enumerize(:foo, :in => %w[a b])
112
+ kklass.enumerize(:foo, :in => %w[a b])
111
113
  subklass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
112
114
  end
113
115
 
114
116
  it "inherits enumerized attributes from a grandparent class" do
115
- klass.enumerize(:foo, :in => %w[a b])
117
+ kklass.enumerize(:foo, :in => %w[a b])
116
118
  Class.new(subklass).enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
117
119
  end
118
120
 
119
121
  it "doesn't add enumerized attributes to parent class" do
120
- klass.enumerize(:foo, :in => %w[a b])
122
+ kklass.enumerize(:foo, :in => %w[a b])
121
123
  subklass.enumerize(:bar, :in => %w[c d])
122
124
 
123
- klass.enumerized_attributes[:bar].must_be_nil
125
+ kklass.enumerized_attributes[:bar].must_be_nil
124
126
  end
125
127
 
126
128
  it 'adds new parent class attributes to subclass' do
127
- subklass = Class.new(klass)
128
- klass.enumerize :foo, :in => %w[a b]
129
+ subklass = Class.new(kklass)
130
+ kklass.enumerize :foo, :in => %w[a b]
129
131
  subklass.enumerized_attributes[:foo].must_be_instance_of Enumerize::Attribute
130
132
  end
131
133
 
132
134
  it 'stores nil value' do
133
- klass.enumerize(:foo, :in => [:a, :b])
135
+ kklass.enumerize(:foo, :in => [:a, :b])
134
136
  object.foo = nil
135
137
  object.instance_variable_get(:@foo).must_be_nil
136
138
  end
137
139
 
138
140
  it 'casts value to string for validation' do
139
- klass.enumerize(:foo, :in => [:a, :b])
141
+ kklass.enumerize(:foo, :in => [:a, :b])
140
142
  object.foo = :c
141
143
  object.read_attribute_for_validation(:foo).must_equal 'c'
142
144
  end
143
145
 
144
146
  it "doesn't cast nil to string for validation" do
145
- klass.enumerize(:foo, :in => [:a, :b])
147
+ kklass.enumerize(:foo, :in => [:a, :b])
146
148
  object.foo = nil
147
149
  object.read_attribute_for_validation(:foo).must_be_nil
148
150
  end
@@ -179,7 +181,7 @@ describe Enumerize::Base do
179
181
  end
180
182
 
181
183
  it 'stores hash values' do
182
- klass.enumerize(:foo, :in => {:a => 1, :b => 2})
184
+ kklass.enumerize(:foo, :in => {:a => 1, :b => 2})
183
185
 
184
186
  object.foo = :a
185
187
  object.instance_variable_get(:@foo).must_equal 1
@@ -191,7 +193,7 @@ describe Enumerize::Base do
191
193
  end
192
194
 
193
195
  it 'returns custom value' do
194
- klass.enumerize(:foo, :in => {:a => 1, :b => 2})
196
+ kklass.enumerize(:foo, :in => {:a => 1, :b => 2})
195
197
 
196
198
  object.foo = :a
197
199
  object.foo_value.must_equal 1