enumerize 0.8.0 → 2.6.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (70) hide show
  1. checksums.yaml +5 -5
  2. data/.github/workflows/ruby.yml +73 -0
  3. data/.gitignore +2 -0
  4. data/.rspec +2 -0
  5. data/CHANGELOG.md +210 -0
  6. data/Gemfile +4 -21
  7. data/Gemfile.global +12 -0
  8. data/Gemfile.mongo_mapper +6 -0
  9. data/Gemfile.rails60 +6 -0
  10. data/Gemfile.rails61 +6 -0
  11. data/Gemfile.rails70 +9 -0
  12. data/Gemfile.railsmaster +5 -0
  13. data/README.md +366 -73
  14. data/Rakefile +4 -4
  15. data/enumerize.gemspec +2 -1
  16. data/lib/enumerize/activemodel.rb +47 -0
  17. data/lib/enumerize/activerecord.rb +102 -27
  18. data/lib/enumerize/attribute.rb +59 -15
  19. data/lib/enumerize/attribute_map.rb +2 -0
  20. data/lib/enumerize/base.rb +32 -17
  21. data/lib/enumerize/hooks/formtastic.rb +7 -9
  22. data/lib/enumerize/hooks/sequel_dataset.rb +17 -0
  23. data/lib/enumerize/hooks/simple_form.rb +9 -12
  24. data/lib/enumerize/hooks/uniqueness.rb +7 -8
  25. data/lib/enumerize/integrations/rails_admin.rb +3 -1
  26. data/lib/enumerize/integrations/rspec/matcher.rb +112 -26
  27. data/lib/enumerize/integrations/rspec.rb +3 -0
  28. data/lib/enumerize/module.rb +2 -0
  29. data/lib/enumerize/module_attributes.rb +2 -0
  30. data/lib/enumerize/mongoid.rb +36 -0
  31. data/lib/enumerize/predicatable.rb +10 -17
  32. data/lib/enumerize/predicates.rb +5 -1
  33. data/lib/enumerize/scope/activerecord.rb +53 -0
  34. data/lib/enumerize/scope/mongoid.rb +50 -0
  35. data/lib/enumerize/scope/sequel.rb +56 -0
  36. data/lib/enumerize/sequel.rb +62 -0
  37. data/lib/enumerize/set.rb +20 -8
  38. data/lib/enumerize/utils.rb +12 -0
  39. data/lib/enumerize/value.rb +20 -20
  40. data/lib/enumerize/version.rb +3 -1
  41. data/lib/enumerize.rb +33 -2
  42. data/lib/sequel/plugins/enumerize.rb +18 -0
  43. data/spec/enumerize/integrations/rspec/matcher_spec.rb +261 -0
  44. data/spec/spec_helper.rb +30 -0
  45. data/test/activemodel_test.rb +114 -0
  46. data/test/activerecord_test.rb +434 -58
  47. data/test/attribute_map_test.rb +9 -7
  48. data/test/attribute_test.rb +52 -23
  49. data/test/base_test.rb +118 -66
  50. data/test/formtastic_test.rb +28 -12
  51. data/test/module_attributes_test.rb +10 -8
  52. data/test/mongo_mapper_test.rb +26 -11
  53. data/test/mongoid_test.rb +100 -15
  54. data/test/multiple_test.rb +41 -12
  55. data/test/predicates_test.rb +34 -26
  56. data/test/rails_admin_test.rb +8 -6
  57. data/test/sequel_test.rb +342 -0
  58. data/test/set_test.rb +42 -26
  59. data/test/simple_form_test.rb +25 -1
  60. data/test/support/mock_controller.rb +6 -0
  61. data/test/support/shared_enums.rb +43 -0
  62. data/test/support/view_test_helper.rb +18 -1
  63. data/test/test_helper.rb +33 -2
  64. data/test/value_test.rb +79 -28
  65. metadata +51 -12
  66. data/.travis.yml +0 -19
  67. data/Gemfile.rails4 +0 -23
  68. data/lib/enumerize/form_helper.rb +0 -23
  69. data/test/rspec_matcher_test.rb +0 -76
  70. data/test/rspec_spec.rb +0 -13
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module ActiveModelAttributesSupport
5
+ def enumerize(name, options={})
6
+ super
7
+
8
+ _enumerize_module.dependent_eval do
9
+ if self.included_modules.include? ::ActiveModel::Attributes
10
+ include InstanceMethods
11
+
12
+ attribute name, Enumerize::ActiveModelAttributesSupport::Type.new(enumerized_attributes[name])
13
+ end
14
+ end
15
+ end
16
+
17
+ module InstanceMethods
18
+ # https://github.com/brainspec/enumerize/issues/74
19
+ def write_attribute(attr_name, value, *options)
20
+ if self.class.enumerized_attributes[attr_name]
21
+ _enumerized_values_for_validation[attr_name.to_s] = value
22
+ end
23
+
24
+ super
25
+ end
26
+ end
27
+
28
+ class Type < ActiveModel::Type::Value
29
+ def type
30
+ :enumerize
31
+ end
32
+
33
+ def initialize(attr)
34
+ @attr = attr
35
+ end
36
+
37
+ def serialize(value)
38
+ v = @attr.find_value(value)
39
+ v && v.value
40
+ end
41
+
42
+ def deserialize(value)
43
+ @attr.find_value(value)
44
+ end
45
+ end
46
+ end
47
+ end
@@ -1,51 +1,49 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  module ActiveRecordSupport
3
5
  def enumerize(name, options={})
4
6
  super
5
7
 
6
8
  _enumerize_module.dependent_eval do
7
- if defined?(::ActiveRecord::Base) && self < ::ActiveRecord::Base
8
- if options[:scope]
9
- _define_scope_methods!(name, options)
10
- end
11
-
9
+ if self < ::ActiveRecord::Base
12
10
  include InstanceMethods
13
11
 
12
+ const_get(:ActiveRecord_Relation).include(RelationMethods)
13
+ const_get(:ActiveRecord_AssociationRelation).include(RelationMethods)
14
+ const_get(:ActiveRecord_Associations_CollectionProxy).include(RelationMethods)
15
+
14
16
  # Since Rails use `allocate` method on models and initializes them with `init_with` method.
15
17
  # This way `initialize` method is not being called, but `after_initialize` callback always gets triggered.
16
18
  after_initialize :_set_default_value_for_enumerized_attributes
17
19
 
18
20
  # https://github.com/brainspec/enumerize/issues/111
19
21
  require 'enumerize/hooks/uniqueness'
20
- end
21
- end
22
- end
23
-
24
- private
25
-
26
- def _define_scope_methods!(name, options)
27
- scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
28
22
 
29
- define_singleton_method scope_name do |*values|
30
- values = values.map { |value| enumerized_attributes[name].find_value(value).value }
31
- values = values.first if values.size == 1
32
-
33
- where(name => values)
34
- end
35
-
36
- if options[:scope] == true
37
- define_singleton_method "without_#{name}" do |*values|
38
- values = values.map { |value| enumerized_attributes[name].find_value(value).value }
39
- where(arel_table[name].not_in(values))
23
+ unless options[:multiple]
24
+ if ::ActiveRecord.version >= ::Gem::Version.new("7.0.0.alpha")
25
+ attribute(name) do |subtype|
26
+ Type.new(enumerized_attributes[name], subtype)
27
+ end
28
+ elsif ::ActiveRecord.version >= ::Gem::Version.new("6.1.0.alpha")
29
+ decorate_attribute_type(name.to_s) do |subtype|
30
+ Type.new(enumerized_attributes[name], subtype)
31
+ end
32
+ else
33
+ decorate_attribute_type(name, :enumerize) do |subtype|
34
+ Type.new(enumerized_attributes[name], subtype)
35
+ end
36
+ end
37
+ end
40
38
  end
41
39
  end
42
40
  end
43
41
 
44
42
  module InstanceMethods
45
43
  # https://github.com/brainspec/enumerize/issues/74
46
- def write_attribute(attr_name, value)
44
+ def write_attribute(attr_name, value, *options)
47
45
  if self.class.enumerized_attributes[attr_name]
48
- _enumerized_values_for_validation[attr_name] = value
46
+ _enumerized_values_for_validation[attr_name.to_s] = value
49
47
  end
50
48
 
51
49
  super
@@ -55,13 +53,90 @@ module Enumerize
55
53
  def becomes(klass)
56
54
  became = super
57
55
  klass.enumerized_attributes.each do |attr|
58
- if attr.is_a? Multiple
56
+ # Rescue when column associated to the enum does not exist.
57
+ begin
59
58
  became.send("#{attr.name}=", send(attr.name))
59
+ rescue ActiveModel::MissingAttributeError
60
60
  end
61
61
  end
62
62
 
63
63
  became
64
64
  end
65
+
66
+ def reload(options = nil)
67
+ reloaded = super
68
+
69
+ reloaded.class.enumerized_attributes.each do |attr|
70
+ begin
71
+ # Checks first if the enumerized attribute is in ActiveRecord::Store
72
+ store_attr, _ = reloaded.class.stored_attributes.detect do |_store_attr, keys|
73
+ keys.include?(attr.name)
74
+ end
75
+
76
+ if store_attr.present?
77
+ reloaded.send("#{attr.name}=", reloaded.send(store_attr).with_indifferent_access[attr.name])
78
+ else
79
+ reloaded.send("#{attr.name}=", reloaded[attr.name])
80
+ end
81
+ rescue ActiveModel::MissingAttributeError
82
+ end
83
+ end
84
+
85
+ reloaded
86
+ end
87
+ end
88
+
89
+ module RelationMethods
90
+ def update_all(updates)
91
+ if updates.is_a?(Hash)
92
+ enumerized_attributes.each do |attr|
93
+ next if updates[attr.name].blank? || attr.kind_of?(Enumerize::Multiple)
94
+ enumerize_value = attr.find_value(updates[attr.name])
95
+ updates[attr.name] = enumerize_value && enumerize_value.value
96
+ end
97
+ end
98
+
99
+ super(updates)
100
+ end
101
+ end
102
+
103
+ class Type < ActiveRecord::Type::Value
104
+ delegate :type, to: :@subtype
105
+
106
+ def initialize(attr, subtype)
107
+ @attr = attr
108
+ @subtype = subtype
109
+ end
110
+
111
+ def serialize(value)
112
+ v = @attr.find_value(value)
113
+ (v && v.value) || value
114
+ end
115
+
116
+ alias type_cast_for_database serialize
117
+
118
+ def deserialize(value)
119
+ @attr.find_value(value)
120
+ end
121
+
122
+ alias type_cast_from_database deserialize
123
+
124
+ def as_json(options = nil)
125
+ {attr: @attr.name}.as_json(options)
126
+ end
127
+
128
+ def encode_with(coder)
129
+ coder[:class_name] = @attr.klass.name
130
+ coder[:attr_name] = @attr.name
131
+ coder[:subtype] = @subtype
132
+ end
133
+
134
+ def init_with(coder)
135
+ initialize(
136
+ coder[:class_name].constantize.enumerized_attributes[coder[:attr_name]],
137
+ coder[:subtype]
138
+ )
139
+ end
65
140
  end
66
141
  end
67
142
  end
@@ -1,27 +1,35 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  class Attribute
3
- attr_reader :name, :values, :default_value, :i18n_scope
5
+ attr_reader :klass, :name, :values, :default_value, :i18n_scope, :skip_validations_value
4
6
 
5
7
  def initialize(klass, name, options={})
6
8
  raise ArgumentError, ':in option is required' unless options[:in]
9
+ raise ArgumentError, ':scope option does not work with option :multiple' if options[:multiple] && options[:scope]
7
10
 
8
11
  extend Multiple if options[:multiple]
9
12
 
10
13
  @klass = klass
11
14
  @name = name.to_sym
12
- @values = Array(options[:in]).map { |v| Value.new(self, *v) }
13
- @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }]
14
- @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }]
15
15
 
16
16
  if options[:i18n_scope]
17
17
  raise ArgumentError, ':i18n_scope option accepts only String or Array of strings' unless Array(options[:i18n_scope]).all? { |s| s.is_a?(String) }
18
18
  @i18n_scope = options[:i18n_scope]
19
19
  end
20
20
 
21
+ value_class = options.fetch(:value_class, Value)
22
+ @values = Array(options[:in]).map { |v| value_class.new(self, *v).freeze }
23
+
24
+ @value_hash = Hash[@values.map { |v| [v.value.to_s, v] }]
25
+ @value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }]
26
+
21
27
  if options[:default]
22
28
  @default_value = find_default_value(options[:default])
23
29
  raise ArgumentError, 'invalid default value' unless @default_value
24
30
  end
31
+
32
+ @skip_validations_value = options.fetch(:skip_validations, false)
25
33
  end
26
34
 
27
35
  def find_default_value(value)
@@ -36,11 +44,23 @@ module Enumerize
36
44
  @value_hash[value.to_s] unless value.nil?
37
45
  end
38
46
 
47
+ def find_values(*values)
48
+ values.map { |value| find_value(value) }.compact
49
+ end
50
+
51
+ def each_value
52
+ values.each { |value| yield value }
53
+ end
54
+
55
+ def value?(value)
56
+ values.include?(value)
57
+ end
58
+
39
59
  def i18n_scopes
40
60
  @i18n_scopes ||= if i18n_scope
41
- scopes = Array(i18n_scope)
61
+ Array(i18n_scope)
42
62
  elsif @klass.respond_to?(:model_name)
43
- scopes = ["enumerize.#{@klass.model_name.i18n_key}.#{name}"]
63
+ ["enumerize.#{@klass.model_name.i18n_key}.#{name}"]
44
64
  else
45
65
  []
46
66
  end
@@ -67,6 +87,10 @@ module Enumerize
67
87
  values.map { |v| [v.text, v.to_s] }
68
88
  end
69
89
 
90
+ def respond_to_missing?(method, include_private=false)
91
+ @value_hash.include?(method.to_s) || super
92
+ end
93
+
70
94
  def define_methods!(mod)
71
95
  mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
72
96
  def #{name}
@@ -84,8 +108,6 @@ module Enumerize
84
108
  end
85
109
 
86
110
  def #{name}=(new_value)
87
- _enumerized_values_for_validation[:#{name}] = new_value.nil? ? nil : new_value.to_s
88
-
89
111
  allowed_value_or_nil = self.class.enumerized_attributes[:#{name}].find_value(new_value)
90
112
  allowed_value_or_nil = allowed_value_or_nil.value unless allowed_value_or_nil.nil?
91
113
 
@@ -96,6 +118,10 @@ module Enumerize
96
118
  else
97
119
  @#{name} = allowed_value_or_nil
98
120
  end
121
+
122
+ _enumerized_values_for_validation['#{name}'] = new_value.nil? ? nil : new_value.to_s
123
+
124
+ allowed_value_or_nil
99
125
  end
100
126
 
101
127
  def #{name}_text
@@ -107,9 +133,27 @@ module Enumerize
107
133
  end
108
134
  RUBY
109
135
  end
136
+
137
+ private
138
+
139
+ def method_missing(method)
140
+ if @value_hash.include?(method.to_s)
141
+ find_value(method)
142
+ else
143
+ super
144
+ end
145
+ end
110
146
  end
111
147
 
112
148
  module Multiple
149
+ def find_default_value(value)
150
+ if value.respond_to?(:call)
151
+ value
152
+ else
153
+ find_values(*value)
154
+ end
155
+ end
156
+
113
157
  def define_methods!(mod)
114
158
  mod.module_eval <<-RUBY, __FILE__, __LINE__ + 1
115
159
  def #{name}
@@ -131,20 +175,20 @@ module Enumerize
131
175
  end
132
176
 
133
177
  def #{name}=(values)
134
- _enumerized_values_for_validation[:#{name}] = values.respond_to?(:map) ? values.map(&:to_s) : values
135
-
136
178
  @_#{name}_enumerized_set = Enumerize::Set.new(self, self.class.enumerized_attributes[:#{name}], values)
137
- string_values = #{name}.values.map(&:to_str)
179
+ raw_values = self.#{name}.values.map(&:value)
138
180
 
139
181
  if defined?(super)
140
- super string_values
182
+ super raw_values
141
183
  elsif respond_to?(:write_attribute, true)
142
- write_attribute '#{name}', string_values
184
+ write_attribute '#{name}', raw_values
143
185
  else
144
- @#{name} = string_values
186
+ @#{name} = raw_values
145
187
  end
146
188
 
147
- #{name}
189
+ _enumerized_values_for_validation['#{name}'] = values.respond_to?(:map) ? values.reject(&:blank?).map(&:to_s) : values
190
+
191
+ self.#{name}
148
192
  end
149
193
  RUBY
150
194
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  class AttributeMap
3
5
  attr_reader :attributes
@@ -1,7 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  module Base
3
5
  def self.included(base)
4
6
  base.extend ClassMethods
7
+ base.singleton_class.prepend ClassMethods::Hook
5
8
 
6
9
  if base.respond_to?(:validate)
7
10
  base.validate :_validate_enumerized_attributes
@@ -28,9 +31,11 @@ module Enumerize
28
31
  @enumerized_attributes ||= AttributeMap.new
29
32
  end
30
33
 
31
- def inherited(subclass)
32
- enumerized_attributes.add_dependant subclass.enumerized_attributes
33
- super
34
+ module Hook
35
+ def inherited(subclass)
36
+ enumerized_attributes.add_dependant subclass.enumerized_attributes
37
+ super subclass
38
+ end
34
39
  end
35
40
 
36
41
  private
@@ -44,16 +49,20 @@ module Enumerize
44
49
  end
45
50
  end
46
51
 
47
- def initialize(*)
52
+ def initialize(...)
48
53
  super
49
54
  _set_default_value_for_enumerized_attributes
50
55
  end
51
56
 
52
57
  def read_attribute_for_validation(key)
58
+ key = key.to_s
59
+
53
60
  if _enumerized_values_for_validation.has_key?(key)
54
61
  _enumerized_values_for_validation[key]
55
- else
62
+ elsif defined?(super)
56
63
  super
64
+ else
65
+ send(key)
57
66
  end
58
67
  end
59
68
 
@@ -65,6 +74,9 @@ module Enumerize
65
74
 
66
75
  def _validate_enumerized_attributes
67
76
  self.class.enumerized_attributes.each do |attr|
77
+ skip_validations = Utils.call_if_callable(attr.skip_validations_value, self)
78
+ next if skip_validations
79
+
68
80
  value = read_attribute_for_validation(attr.name)
69
81
  next if value.blank?
70
82
 
@@ -78,23 +90,26 @@ module Enumerize
78
90
 
79
91
  def _set_default_value_for_enumerized_attributes
80
92
  self.class.enumerized_attributes.each do |attr|
81
- # remove after dropping support for Rails 3.x
82
- # https://github.com/brainspec/enumerize/issues/101
83
- attr_value = begin
84
- public_send(attr.name)
85
- rescue ActiveModel::MissingAttributeError
86
- nil
87
- end
93
+ _set_default_value_for_enumerized_attribute(attr)
94
+ end
95
+ end
88
96
 
89
- if !attr_value && !_enumerized_values_for_validation.key?(attr.name)
90
- value = attr.default_value
97
+ def _set_default_value_for_enumerized_attribute(attr)
98
+ return if attr.default_value.nil?
99
+ begin
100
+ if respond_to?(attr.name)
101
+ attr_value = public_send(attr.name)
102
+ else
103
+ return
104
+ end
91
105
 
92
- if value.respond_to?(:call)
93
- value = value.arity == 0 ? value.call : value.call(self)
94
- end
106
+ value_for_validation = _enumerized_values_for_validation[attr.name.to_s]
95
107
 
108
+ if (!attr_value || attr_value.empty?) && (!value_for_validation || value_for_validation.empty?)
109
+ value = Utils.call_if_callable(attr.default_value, self)
96
110
  public_send("#{attr.name}=", value)
97
111
  end
112
+ rescue ActiveModel::MissingAttributeError
98
113
  end
99
114
  end
100
115
  end
@@ -1,16 +1,14 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
 
3
5
  module Enumerize
4
6
  module Hooks
5
7
  module FormtasticFormBuilderExtension
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- alias_method_chain :input, :enumerize
10
- end
11
8
 
12
- def input_with_enumerize(method, options={})
13
- klass = object.class
9
+ def input(method, options={})
10
+ enumerized_object = convert_to_model(object)
11
+ klass = enumerized_object.class
14
12
 
15
13
  if klass.respond_to?(:enumerized_attributes) && (attr = klass.enumerized_attributes[method])
16
14
  options[:collection] ||= attr.options
@@ -20,10 +18,10 @@ module Enumerize
20
18
  end
21
19
  end
22
20
 
23
- input_without_enumerize(method, options)
21
+ super(method, options)
24
22
  end
25
23
  end
26
24
  end
27
25
  end
28
26
 
29
- ::Formtastic::FormBuilder.send :include, Enumerize::Hooks::FormtasticFormBuilderExtension
27
+ ::Formtastic::FormBuilder.send :prepend, Enumerize::Hooks::FormtasticFormBuilderExtension
@@ -0,0 +1,17 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module Hooks
5
+ module SequelDataset
6
+ def literal_append(sql, v)
7
+ if v.is_a?(Enumerize::Value)
8
+ super(sql, v.value)
9
+ else
10
+ super(sql, v)
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
16
+
17
+ ::Sequel::Dataset.send :prepend, Enumerize::Hooks::SequelDataset
@@ -1,29 +1,26 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
 
3
5
  module Enumerize
4
6
  module Hooks
5
7
  module SimpleFormBuilderExtension
6
- extend ActiveSupport::Concern
7
-
8
- included do
9
- alias_method_chain :input, :enumerize
10
- alias_method_chain :input_field, :enumerize
11
- end
12
8
 
13
- def input_with_enumerize(attribute_name, options={}, &block)
9
+ def input(attribute_name, options={}, &block)
14
10
  add_input_options_for_enumerized_attribute(attribute_name, options)
15
- input_without_enumerize(attribute_name, options, &block)
11
+ super(attribute_name, options, &block)
16
12
  end
17
13
 
18
- def input_field_with_enumerize(attribute_name, options={})
14
+ def input_field(attribute_name, options={})
19
15
  add_input_options_for_enumerized_attribute(attribute_name, options)
20
- input_field_without_enumerize(attribute_name, options)
16
+ super(attribute_name, options)
21
17
  end
22
18
 
23
19
  private
24
20
 
25
21
  def add_input_options_for_enumerized_attribute(attribute_name, options)
26
- klass = object.class
22
+ enumerized_object = convert_to_model(object)
23
+ klass = enumerized_object.class
27
24
 
28
25
  if klass.respond_to?(:enumerized_attributes) && (attr = klass.enumerized_attributes[attribute_name])
29
26
  options[:collection] ||= attr.options
@@ -37,4 +34,4 @@ module Enumerize
37
34
  end
38
35
  end
39
36
 
40
- ::SimpleForm::FormBuilder.send :include, Enumerize::Hooks::SimpleFormBuilderExtension
37
+ ::SimpleForm::FormBuilder.send :prepend, Enumerize::Hooks::SimpleFormBuilderExtension
@@ -1,23 +1,22 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'active_support/concern'
2
4
 
3
5
  module Enumerize
4
6
  module Hooks
5
7
  module UniquenessValidator
6
- extend ActiveSupport::Concern
7
8
 
8
- included do
9
- alias_method_chain :validate_each, :enumerize
10
- end
9
+ def validate_each(record, name, value)
10
+ klass = record.to_model.class
11
11
 
12
- def validate_each_with_enumerize(record, name, value)
13
- if record.class.respond_to?(:enumerized_attributes) && (attr = record.class.enumerized_attributes[name])
12
+ if klass.respond_to?(:enumerized_attributes) && (attr = klass.enumerized_attributes[name])
14
13
  value = attr.find_value(value).try(:value)
15
14
  end
16
15
 
17
- validate_each_without_enumerize(record, name, value)
16
+ super(record, name, value)
18
17
  end
19
18
  end
20
19
  end
21
20
  end
22
21
 
23
- ::ActiveRecord::Validations::UniquenessValidator.send :include, Enumerize::Hooks::UniquenessValidator
22
+ ::ActiveRecord::Validations::UniquenessValidator.send :prepend, Enumerize::Hooks::UniquenessValidator
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  module Integrations
3
5
  module RailsAdmin
@@ -7,7 +9,7 @@ module Enumerize
7
9
 
8
10
  _enumerize_module.module_eval <<-RUBY, __FILE__, __LINE__ + 1
9
11
  def #{name}_enum
10
- self.class.enumerized_attributes[:#{name}].values.map{|v| [v.text, v.value]}
12
+ self.class.enumerized_attributes[:#{name}].options
11
13
  end
12
14
  RUBY
13
15
  end