enumerize 0.8.0 → 2.6.1

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 (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
@@ -1,38 +1,60 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  module Integrations
3
5
  module RSpec
4
6
  class Matcher
5
- attr_accessor :attr, :values, :subject, :default
6
7
 
7
- def initialize(attr)
8
- self.attr = attr
8
+ def initialize(expected_attr)
9
+ self.expected_attr = expected_attr
9
10
  end
10
11
 
11
- def in(*values)
12
- self.values = values.map(&:to_s).sort
12
+ def in(*expected_values)
13
+ self.expected_values = expected_values.flatten
13
14
  self
14
15
  end
15
16
 
16
- def with_default(default)
17
- self.default = default.to_s
17
+ def with_default(expected_default)
18
+ self.expected_default = expected_default.to_s
18
19
  self
19
20
  end
20
21
 
21
- def failure_message
22
- message = " expected :#{attr} to allow value#{values.size == 1 ? nil : 's'}: #{quote_values(values)},"
23
- message += " but it allows #{quote_values(enumerized_values)} instead"
22
+ def with_i18n_scope(expected_i18n_scope)
23
+ self.expected_i18n_scope = expected_i18n_scope
24
+ self
25
+ end
24
26
 
25
- if default && !matches_default_value?
26
- message = " expected :#{attr} to have #{default.inspect} as default value,"
27
- message += " but it sets #{enumerized_default.inspect} instead"
28
- end
27
+ def with_predicates(expected_predicates)
28
+ self.expected_predicates = expected_predicates
29
+ self
30
+ end
31
+
32
+ def with_multiple(expected_multiple)
33
+ self.expected_multiple = expected_multiple
34
+ self
35
+ end
29
36
 
30
- message
37
+ def with_scope(expected_scope)
38
+ self.expected_scope = expected_scope
39
+ self
40
+ end
41
+
42
+ def failure_message
43
+ "Expected #{expectation}"
44
+ end
45
+
46
+ def failure_message_when_negated
47
+ "Did not expect #{expectation}"
31
48
  end
32
49
 
33
50
  def description
34
- description = "enumerize :#{attr} in: #{quote_values(values)}"
35
- description += " with #{default.inspect} as default value" if default
51
+ description = "define enumerize :#{expected_attr}"
52
+ description += " in: #{quote_values(expected_values)}" if expected_values
53
+ description += " with #{expected_default.inspect} as default value" if expected_default
54
+ description += " i18n_scope: #{expected_i18n_scope.inspect}" if expected_i18n_scope
55
+ description += " predicates: #{expected_predicates.inspect}" if expected_predicates
56
+ description += " multiple: #{expected_multiple.inspect}" if expected_multiple
57
+ description += " scope: #{expected_scope.inspect}" if expected_scope
36
58
 
37
59
  description
38
60
  end
@@ -41,36 +63,100 @@ module Enumerize
41
63
  self.subject = subject
42
64
  matches = true
43
65
 
44
- matches &= matches_attributes?
45
- matches &= matches_default_value? if default
66
+ matches &= matches_attribute?
67
+ matches &= matches_values? if expected_values
68
+ matches &= matches_default_value? if expected_default
69
+ matches &= matches_i18n_scope? if expected_i18n_scope
70
+ matches &= matches_predicates? if expected_predicates
71
+ matches &= matches_multiple? if expected_multiple
72
+ matches &= matches_scope? if expected_scope
46
73
 
47
74
  matches
48
75
  end
49
76
 
50
77
  private
78
+ attr_accessor :expected_attr, :expected_values, :subject, :expected_default,
79
+ :expected_i18n_scope, :expected_predicates, :expected_multiple,
80
+ :expected_scope
81
+
82
+ def expectation
83
+ "#{subject.class.name} to #{description}"
84
+ end
85
+
86
+ def matches_attribute?
87
+ attributes.present?
88
+ end
51
89
 
52
- def matches_attributes?
53
- values == enumerized_values
90
+ def matches_values?
91
+ matches_array_values? || matches_hash_values?
92
+ end
93
+
94
+ def matches_array_values?
95
+ sorted_values == enumerized_values
96
+ end
97
+
98
+ def matches_hash_values?
99
+ return unless expected_values.first.is_a?(Hash)
100
+ expected_values.first.all? { |k, v| enumerized_value_hash[k.to_s] == v; }
54
101
  end
55
102
 
56
103
  def matches_default_value?
57
- default == enumerized_default
104
+ expected_default == enumerized_default
105
+ end
106
+
107
+ def matches_i18n_scope?
108
+ attributes.i18n_scope == expected_i18n_scope
109
+ end
110
+
111
+ def matches_predicates?
112
+ if expected_predicates.is_a?(TrueClass)
113
+ subject.respond_to?("#{enumerized_values.first}?")
114
+ else
115
+ subject.respond_to?("#{expected_attr}_#{attributes.values.first}?")
116
+ end
117
+ end
118
+
119
+ def matches_multiple?
120
+ subject.public_send(expected_attr).is_a?(Enumerize::Set)
121
+ end
122
+
123
+ def matches_scope?
124
+ case expected_scope
125
+ when TrueClass
126
+ subject_class.respond_to?("with_#{expected_attr}")
127
+ when :shallow
128
+ enumerized_values.all? { |value| subject_class.respond_to?(value) }
129
+ else
130
+ subject_class.respond_to?(expected_scope[:scope])
131
+ end
132
+ end
133
+
134
+ def sorted_values
135
+ @sorted_values ||=expected_values.map(&:to_s).sort
58
136
  end
59
137
 
60
138
  def enumerized_values
61
- @enumerized_values ||= attributes[attr.to_s].values.sort
139
+ @enumerized_values ||= attributes.values.sort
62
140
  end
63
141
 
64
142
  def enumerized_default
65
- @enumerized_default ||= attributes[attr.to_s].default_value
143
+ @enumerized_default ||= attributes.default_value
144
+ end
145
+
146
+ def enumerized_value_hash
147
+ @enumerized_value_hash ||= attributes.instance_variable_get('@value_hash')
66
148
  end
67
149
 
68
150
  def attributes
69
- subject.class.enumerized_attributes.attributes
151
+ subject_class.enumerized_attributes.attributes[expected_attr.to_s]
152
+ end
153
+
154
+ def subject_class
155
+ @subject_class ||= subject.class
70
156
  end
71
157
 
72
158
  def quote_values(values)
73
- values.map(&:inspect).join(', ')
159
+ sorted_values.map(&:inspect).join(', ')
74
160
  end
75
161
  end
76
162
  end
@@ -1,3 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rspec/matchers'
1
4
  require 'enumerize/integrations/rspec/matcher'
2
5
 
3
6
  module Enumerize
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  class Module < ::Module
3
5
  attr_reader :_class_methods
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  module ModuleAttributes
3
5
  def included(base)
@@ -0,0 +1,36 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module MongoidSupport
5
+ def enumerize(name, options={})
6
+ super
7
+
8
+ _enumerize_module.dependent_eval do
9
+ if self < ::Mongoid::Document
10
+ include InstanceMethods
11
+
12
+ after_initialize :_set_default_value_for_enumerized_attributes
13
+ end
14
+ end
15
+ end
16
+
17
+ module InstanceMethods
18
+ def reload
19
+ reloaded = super
20
+
21
+ reloaded.class.enumerized_attributes.each do |attr|
22
+ reloaded.send("#{attr.name}=", reloaded[attr.name])
23
+ end
24
+
25
+ reloaded
26
+ end
27
+
28
+ private
29
+
30
+ def _set_default_value_for_enumerized_attribute(attr)
31
+ super
32
+ rescue Mongoid::Errors::AttributeNotLoaded
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,30 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
4
  module Predicatable
3
- def method_missing(method, *args, &block)
4
- if boolean_method?(method)
5
- define_query_methods
6
- send(method, *args, &block)
7
- else
8
- super
9
- end
10
- end
11
-
12
5
  def respond_to_missing?(method, include_private=false)
13
- boolean_method?(method)
6
+ predicate_method?(method) || super
14
7
  end
15
8
 
16
9
  private
17
10
 
18
- def define_query_methods
19
- @attr.values.each do |value|
20
- unless singleton_methods.include?(:"#{value}?")
21
- define_query_method(value)
22
- end
11
+ def method_missing(method, *args, &block)
12
+ if predicate_method?(method)
13
+ predicate_call(method[0..-2], *args, &block)
14
+ else
15
+ super
23
16
  end
24
17
  end
25
18
 
26
- def boolean_method?(method)
27
- method[-1] == '?' && @attr.values.include?(method[0..-2])
19
+ def predicate_method?(method)
20
+ method[-1] == '?' && @attr && @attr.value?(method[0..-2])
28
21
  end
29
22
  end
30
23
  end
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/module/delegation'
4
+
1
5
  module Enumerize
2
6
  # Predicate methods.
3
7
  #
@@ -61,7 +65,7 @@ module Enumerize
61
65
  end
62
66
 
63
67
  def names
64
- values.map { |v| "#{v}?" }
68
+ values.map { |v| "#{v.tr('-', '_')}?" }
65
69
  end
66
70
 
67
71
  def build(klass)
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module Scope
5
+ module ActiveRecord
6
+ def enumerize(name, options={})
7
+ super
8
+
9
+ _enumerize_module.dependent_eval do
10
+ if self < ::ActiveRecord::Base
11
+ if options[:scope]
12
+ _define_activerecord_scope_methods!(name, options)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def _define_activerecord_scope_methods!(name, options)
21
+ return _define_activerecord_shallow_scopes!(name) if options[:scope] == :shallow
22
+
23
+ scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
24
+
25
+ define_singleton_method scope_name do |*values|
26
+ values = enumerized_attributes[name].find_values(*values).map(&:value)
27
+ values = values.first if values.size == 1
28
+
29
+ where(name => values)
30
+ end
31
+
32
+ if options[:scope] == true
33
+ define_singleton_method "without_#{name}" do |*values|
34
+ values = enumerized_attributes[name].find_values(*values).map(&:value)
35
+ where(arel_table[name].not_in(values))
36
+ end
37
+ end
38
+ end
39
+
40
+ def _define_activerecord_shallow_scopes!(attribute_name)
41
+ enumerized_attributes[attribute_name].each_value do |value_obj|
42
+ define_singleton_method(value_obj) do
43
+ where(attribute_name => value_obj.value)
44
+ end
45
+
46
+ define_singleton_method("not_#{value_obj}") do
47
+ where.not(attribute_name => value_obj.value)
48
+ end
49
+ end
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,50 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module Scope
5
+ module Mongoid
6
+ def enumerize(name, options={})
7
+ super
8
+
9
+ _enumerize_module.dependent_eval do
10
+ if self < ::Mongoid::Document
11
+ if options[:scope]
12
+ _define_mongoid_scope_methods!(name, options)
13
+ end
14
+ end
15
+ end
16
+ end
17
+
18
+ private
19
+
20
+ def _define_mongoid_scope_methods!(name, options)
21
+ return _define_mongoid_shallow_scopes!(name) if options[:scope] == :shallow
22
+ scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
23
+
24
+ define_singleton_method scope_name do |*values|
25
+ values = enumerized_attributes[name].find_values(*values).map(&:value)
26
+ self.in(name => values)
27
+ end
28
+
29
+ if options[:scope] == true
30
+ define_singleton_method "without_#{name}" do |*values|
31
+ values = enumerized_attributes[name].find_values(*values).map(&:value)
32
+ not_in(name => values)
33
+ end
34
+ end
35
+ end
36
+
37
+ def _define_mongoid_shallow_scopes!(attribute_name)
38
+ enumerized_attributes[attribute_name].each_value do |value_obj|
39
+ define_singleton_method(value_obj) do
40
+ self.in(attribute_name => value_obj.value)
41
+ end
42
+
43
+ define_singleton_method("not_#{value_obj}") do
44
+ self.not_in(attribute_name => value_obj.value)
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,56 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module Scope
5
+ module Sequel
6
+ def enumerize(name, options={})
7
+ super
8
+
9
+ _enumerize_module.dependent_eval do
10
+ if defined?(::Sequel::Model) && self < ::Sequel::Model
11
+ if options[:scope]
12
+ _define_sequel_scope_methods!(name, options)
13
+ end
14
+
15
+ require 'enumerize/hooks/sequel_dataset'
16
+ end
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def _define_sequel_scope_methods!(name, options)
23
+ return _define_sequel_shallow_scopes!(name) if options[:scope] == :shallow
24
+
25
+ klass = self
26
+ scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
27
+
28
+ def_dataset_method scope_name do |*values|
29
+ values = values.map { |value| klass.enumerized_attributes[name].find_value(value).value }
30
+ values = values.first if values.size == 1
31
+
32
+ where(name => values)
33
+ end
34
+
35
+ if options[:scope] == true
36
+ def_dataset_method "without_#{name}" do |*values|
37
+ values = values.map { |value| klass.enumerized_attributes[name].find_value(value).value }
38
+ exclude(name => values)
39
+ end
40
+ end
41
+ end
42
+
43
+ def _define_sequel_shallow_scopes!(attribute_name)
44
+ enumerized_attributes[attribute_name].each_value do |value_obj|
45
+ def_dataset_method(value_obj) do
46
+ where(attribute_name => value_obj.value.to_s)
47
+ end
48
+
49
+ def_dataset_method("not_#{value_obj}") do
50
+ exclude(attribute_name => value_obj.value.to_s)
51
+ end
52
+ end
53
+ end
54
+ end
55
+ end
56
+ end
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module SequelSupport
5
+ def enumerize(name, options={})
6
+ super
7
+
8
+ _enumerize_module.dependent_eval do
9
+ if defined?(::Sequel::Model) && self < ::Sequel::Model
10
+ include InstanceMethods
11
+
12
+ require 'enumerize/hooks/sequel_dataset'
13
+ end
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ module InstanceMethods
20
+ def validate
21
+ super
22
+
23
+ self.class.enumerized_attributes.each do |attr|
24
+ skip_validations = Utils.call_if_callable(attr.skip_validations_value, self)
25
+ next if skip_validations
26
+
27
+ value = read_attribute_for_validation(attr.name)
28
+ next if value.blank?
29
+
30
+ if attr.kind_of? Multiple
31
+ errors.add attr.name, "is invalid" unless value.respond_to?(:all?) && value.all? { |v| v.blank? || attr.find_value(v) }
32
+ else
33
+ errors.add attr.name, "is not included in the list" unless attr.find_value(value)
34
+ end
35
+ end
36
+ end
37
+
38
+ def _set_default_value_for_enumerized_attributes
39
+ _enumerized_values_for_validation.delete_if do |k, v|
40
+ v.nil?
41
+ end
42
+
43
+ if defined?(Sequel::Plugins::Serialization::InstanceMethods)
44
+ modules = self.class.ancestors
45
+ plugin_idx = modules.index(Sequel::Plugins::Serialization::InstanceMethods)
46
+
47
+ if plugin_idx && plugin_idx < modules.index(Enumerize::SequelSupport::InstanceMethods)
48
+ abort "ERROR: You need to enable the Sequel serialization plugin before calling any enumerize methods on a model."
49
+ end
50
+
51
+ plugin_idx = modules.index(Sequel::Plugins::ValidationHelpers::InstanceMethods)
52
+
53
+ if plugin_idx && plugin_idx < modules.index(Enumerize::SequelSupport::InstanceMethods)
54
+ abort "ERROR: You need to enable the Sequel validation_helpers plugin before calling any enumerize methods on a model."
55
+ end
56
+ end
57
+
58
+ super
59
+ end
60
+ end
61
+ end
62
+ end
data/lib/enumerize/set.rb CHANGED
@@ -1,3 +1,7 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'active_support/core_ext/module/delegation'
4
+
1
5
  module Enumerize
2
6
  class Set
3
7
  include Enumerable
@@ -8,12 +12,15 @@ module Enumerize
8
12
  def initialize(obj, attr, values)
9
13
  @obj = obj
10
14
  @attr = attr
11
- @values = ::Set.new
15
+ @values = []
12
16
 
13
17
  if values.respond_to?(:each)
14
18
  values.each do |input|
15
19
  value = @attr.find_value(input)
16
- @values << value if value
20
+
21
+ if value && !@values.include?(value)
22
+ @values << value
23
+ end
17
24
  end
18
25
  end
19
26
  end
@@ -31,9 +38,14 @@ module Enumerize
31
38
  @values.to_a
32
39
  end
33
40
 
41
+ def texts
42
+ @values.map(&:text)
43
+ end
44
+
34
45
  delegate :join, to: :to_ary
35
46
 
36
47
  def ==(other)
48
+ return false unless other.respond_to?(:each)
37
49
  other.size == size && other.all? { |v| @values.include?(@attr.find_value(v)) }
38
50
  end
39
51
 
@@ -52,14 +64,14 @@ module Enumerize
52
64
  "#<Enumerize::Set {#{join(', ')}}>"
53
65
  end
54
66
 
67
+ def encode_with(coder)
68
+ coder.represent_object(Array, @values)
69
+ end
70
+
55
71
  private
56
72
 
57
- def define_query_method(value)
58
- singleton_class.class_eval <<-RUBY, __FILE__, __LINE__ + 1
59
- def #{value}?
60
- include?("#{value}")
61
- end
62
- RUBY
73
+ def predicate_call(value)
74
+ include?(value)
63
75
  end
64
76
 
65
77
  def mutate!
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Enumerize
4
+ module Utils
5
+ class << self
6
+ def call_if_callable(value, param = nil)
7
+ return value unless value.respond_to?(:call)
8
+ value.arity == 0 ? value.call : value.call(param)
9
+ end
10
+ end
11
+ end
12
+ end
@@ -1,4 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'i18n'
4
+ require 'active_support/inflector'
2
5
 
3
6
  module Enumerize
4
7
  class Value < String
@@ -7,14 +10,28 @@ module Enumerize
7
10
  attr_reader :value
8
11
 
9
12
  def initialize(attr, name, value=nil)
13
+ if self.class.method_defined?("#{name}?")
14
+ warn("It's not recommended to use `#{name}` as a field value since `#{name}?` is defined. (#{attr.klass.name}##{attr.name})")
15
+ end
16
+
10
17
  @attr = attr
11
18
  @value = value.nil? ? name.to_s : value
12
19
 
13
20
  super(name.to_s)
21
+
22
+ @i18n_keys = @attr.i18n_scopes.map { |s| :"#{s}.#{self}" }
23
+ @i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}"
24
+ @i18n_keys << :"enumerize.#{@attr.name}.#{self}"
25
+ @i18n_keys << ActiveSupport::Inflector.humanize(ActiveSupport::Inflector.underscore(self)) # humanize value if there are no translations
26
+ @i18n_keys
14
27
  end
15
28
 
16
29
  def text
17
- I18n.t(i18n_keys[0], :default => i18n_keys[1..-1])
30
+ I18n.t(@i18n_keys[0], :default => @i18n_keys[1..-1]) if @i18n_keys
31
+ end
32
+
33
+ def ==(other)
34
+ super(other.to_s) || value == other
18
35
  end
19
36
 
20
37
  def encode_with(coder)
@@ -23,25 +40,8 @@ module Enumerize
23
40
 
24
41
  private
25
42
 
26
- def define_query_method(value)
27
- singleton_class.class_eval <<-RUBY, __FILE__, __LINE__ + 1
28
- def #{value}?
29
- #{value == self}
30
- end
31
- RUBY
32
- end
33
-
34
- def i18n_keys
35
- @i18n_keys ||= begin
36
- i18n_keys = i18n_scopes
37
- i18n_keys << [:"enumerize.#{@attr.name}.#{self}"]
38
- i18n_keys << self.humanize # humanize value if there are no translations
39
- i18n_keys.flatten
40
- end
41
- end
42
-
43
- def i18n_scopes
44
- @attr.i18n_scopes.map { |s| :"#{s}.#{self}" }
43
+ def predicate_call(value)
44
+ value == self
45
45
  end
46
46
  end
47
47
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Enumerize
2
- VERSION = "0.8.0"
4
+ VERSION = '2.6.1'
3
5
  end