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
@@ -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