enumerize 2.2.2 → 2.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.travis.yml +10 -3
- data/CHANGELOG.md +12 -0
- data/Gemfile.global +1 -1
- data/README.md +30 -0
- data/Rakefile +2 -0
- data/lib/enumerize.rb +3 -0
- data/lib/enumerize/activemodel.rb +2 -0
- data/lib/enumerize/activerecord.rb +24 -0
- data/lib/enumerize/attribute.rb +17 -9
- data/lib/enumerize/attribute_map.rb +2 -0
- data/lib/enumerize/base.rb +6 -6
- data/lib/enumerize/hooks/formtastic.rb +2 -0
- data/lib/enumerize/hooks/sequel_dataset.rb +2 -0
- data/lib/enumerize/hooks/simple_form.rb +2 -0
- data/lib/enumerize/hooks/uniqueness.rb +2 -0
- data/lib/enumerize/integrations/rails_admin.rb +2 -0
- data/lib/enumerize/integrations/rspec.rb +2 -0
- data/lib/enumerize/integrations/rspec/matcher.rb +2 -0
- data/lib/enumerize/module.rb +2 -0
- data/lib/enumerize/module_attributes.rb +2 -0
- data/lib/enumerize/mongoid.rb +16 -0
- data/lib/enumerize/predicatable.rb +2 -0
- data/lib/enumerize/predicates.rb +2 -0
- data/lib/enumerize/scope/activerecord.rb +12 -0
- data/lib/enumerize/scope/mongoid.rb +11 -0
- data/lib/enumerize/scope/sequel.rb +12 -0
- data/lib/enumerize/sequel.rb +9 -4
- data/lib/enumerize/set.rb +2 -0
- data/lib/enumerize/utils.rb +12 -0
- data/lib/enumerize/value.rb +9 -15
- data/lib/enumerize/version.rb +1 -1
- data/lib/sequel/plugins/enumerize.rb +2 -0
- data/spec/enumerize/integrations/rspec/matcher_spec.rb +2 -0
- data/spec/spec_helper.rb +2 -0
- data/test/activemodel_test.rb +2 -0
- data/test/activerecord_test.rb +90 -4
- data/test/attribute_map_test.rb +2 -0
- data/test/attribute_test.rb +7 -0
- data/test/base_test.rb +3 -1
- data/test/formtastic_test.rb +2 -0
- data/test/module_attributes_test.rb +2 -0
- data/test/mongo_mapper_test.rb +11 -1
- data/test/mongoid_test.rb +30 -4
- data/test/multiple_test.rb +2 -0
- data/test/predicates_test.rb +2 -0
- data/test/rails_admin_test.rb +2 -0
- data/test/sequel_test.rb +51 -1
- data/test/set_test.rb +2 -0
- data/test/simple_form_test.rb +2 -0
- data/test/support/mock_controller.rb +2 -0
- data/test/support/shared_enums.rb +43 -0
- data/test/support/view_test_helper.rb +2 -0
- data/test/test_helper.rb +2 -0
- data/test/value_test.rb +5 -4
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9f6c56fc7c04faa02a4b4e4c137d3e3b743426d040e3f58bb79377d2c896d98f
|
4
|
+
data.tar.gz: 1e1842411f2b914b6142d071e84c435f17dfdac0f87a61eb9bf0a45a469a7780
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b3c9a1fd651070c324e04f26dcf0539ed6d1a8666878106875b78acc00d6219c5525349e0f3557aa43eb6625986322063117f06f8162922b9ae1b91544593d10
|
7
|
+
data.tar.gz: 4f070511d3e8d06e13eef610b73b4e40b5db8bd73c7282aec5cf1203de78b09e323248ce9627b82a8c8ab0a8688a4e0e05ac6d4bf1659c3e5ff69cb86c435745
|
data/.travis.yml
CHANGED
@@ -10,10 +10,17 @@ gemfile:
|
|
10
10
|
- Gemfile.rails52
|
11
11
|
- Gemfile.mongo_mapper
|
12
12
|
rvm:
|
13
|
-
- 2.2.
|
14
|
-
- 2.3.
|
15
|
-
- 2.4.
|
13
|
+
- 2.2.9
|
14
|
+
- 2.3.6
|
15
|
+
- 2.4.3
|
16
|
+
- 2.5.0
|
16
17
|
- jruby-9.1.14.0
|
18
|
+
before_install:
|
19
|
+
# Rubygems > 3.0.0 no longer supported rubies < 2.3
|
20
|
+
- gem install "rubygems-update:<3.0.0" --no-document && update_rubygems
|
21
|
+
# Bundler 2.0 is not supported by Rails < 5
|
22
|
+
- gem list -i bundler -v '>= 2.0.0' && rvm @global do gem uninstall bundler -x || true
|
23
|
+
- gem install bundler -v '< 2'
|
17
24
|
env:
|
18
25
|
global:
|
19
26
|
- DB_USER=postgres
|
data/CHANGELOG.md
CHANGED
@@ -4,6 +4,18 @@
|
|
4
4
|
|
5
5
|
### bug fix
|
6
6
|
|
7
|
+
## 2.3.1 (May 2, 2019)
|
8
|
+
|
9
|
+
### enhancements
|
10
|
+
|
11
|
+
* Add ability to skip validations by passing `:skip_validations` option. (by [@chumakoff](https://github.com/chumakoff))
|
12
|
+
* Add option `scope: shallow` to extend scopes based on enumerized attribute values (by [@moofkit](https://github.com/moofkit/))
|
13
|
+
|
14
|
+
### bug fix
|
15
|
+
|
16
|
+
* Fix issue with ActiveRecord and Mongoid `reload` method when enumberized attributes weren't synced from DB. (by [@nashby](https://github.com/nashby) and [@FunkyloverOne](https://github.com/FunkyloverOne))
|
17
|
+
* Fix issue with ActiveRecord `reload` method not working for ActiveRecord::Store attributes due to `1b776c`. (by [@rickcsong](https://github.com/rickcsong))
|
18
|
+
|
7
19
|
## 2.2.2 (March 6, 2018)
|
8
20
|
|
9
21
|
### bug fix
|
data/Gemfile.global
CHANGED
data/README.md
CHANGED
@@ -58,6 +58,18 @@ class User < ActiveRecord::Base
|
|
58
58
|
end
|
59
59
|
```
|
60
60
|
|
61
|
+
:warning: By default, `enumerize` adds `inclusion` validation to the model. You can skip validations by passing `skip_validations` option. :warning:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
class User < ActiveRecord::Base
|
65
|
+
extend Enumerize
|
66
|
+
|
67
|
+
enumerize :sex, in: [:male, :female], skip_validations: lambda { |user| user.new_record? }
|
68
|
+
|
69
|
+
enumerize :role, in: [:user, :admin], skip_validations: true
|
70
|
+
end
|
71
|
+
```
|
72
|
+
|
61
73
|
Mongoid:
|
62
74
|
|
63
75
|
```ruby
|
@@ -256,6 +268,24 @@ User.having_status(:blocked).with_sex(:male, :female)
|
|
256
268
|
# SELECT "users".* FROM "users" WHERE "users"."status" IN (2) AND "users"."sex" IN ('male', 'female')
|
257
269
|
```
|
258
270
|
|
271
|
+
Shallow scopes:
|
272
|
+
|
273
|
+
Adds named scopes to the class directly
|
274
|
+
|
275
|
+
```ruby
|
276
|
+
class User < ActiveRecord::Base
|
277
|
+
extend Enumerize
|
278
|
+
enumerize :sex, :in => [:male, :female], scope: :shallow
|
279
|
+
enumerize :status, :in => { active: 1, blocked: 2 }, scope: :shallow
|
280
|
+
end
|
281
|
+
|
282
|
+
User.male
|
283
|
+
# SELECT "users".* FROM "users" WHERE "users"."sex" = 'male'
|
284
|
+
|
285
|
+
User.active
|
286
|
+
# SELECT "users".* FROM "users" WHERE "users"."status" = 1
|
287
|
+
```
|
288
|
+
|
259
289
|
:warning: It is not possible to define a scope when using the `:multiple` option. :warning:
|
260
290
|
|
261
291
|
Array-like attributes with plain ruby objects:
|
data/Rakefile
CHANGED
data/lib/enumerize.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'active_support/concern'
|
2
4
|
require 'enumerize/version'
|
3
5
|
|
@@ -10,6 +12,7 @@ module Enumerize
|
|
10
12
|
autoload :Module, 'enumerize/module'
|
11
13
|
autoload :Predicates, 'enumerize/predicates'
|
12
14
|
autoload :Predicatable, 'enumerize/predicatable'
|
15
|
+
autoload :Utils, 'enumerize/utils'
|
13
16
|
autoload :ModuleAttributes, 'enumerize/module_attributes'
|
14
17
|
|
15
18
|
autoload :ActiveModelAttributesSupport, 'enumerize/activemodel'
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module ActiveRecordSupport
|
3
5
|
def enumerize(name, options={})
|
@@ -50,6 +52,28 @@ module Enumerize
|
|
50
52
|
|
51
53
|
became
|
52
54
|
end
|
55
|
+
|
56
|
+
def reload(options = nil)
|
57
|
+
reloaded = super
|
58
|
+
|
59
|
+
reloaded.class.enumerized_attributes.each do |attr|
|
60
|
+
begin
|
61
|
+
# Checks first if the enumerized attribute is in ActiveRecord::Store
|
62
|
+
store_attr, _ = reloaded.class.stored_attributes.detect do |store_attr, keys|
|
63
|
+
keys.include?(attr.name)
|
64
|
+
end
|
65
|
+
|
66
|
+
if store_attr.present?
|
67
|
+
reloaded.send("#{attr.name}=", reloaded.send(store_attr).with_indifferent_access[attr.name])
|
68
|
+
else
|
69
|
+
reloaded.send("#{attr.name}=", reloaded[attr.name])
|
70
|
+
end
|
71
|
+
rescue ActiveModel::MissingAttributeError
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
reloaded
|
76
|
+
end
|
53
77
|
end
|
54
78
|
|
55
79
|
module RelationMethods
|
data/lib/enumerize/attribute.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
class Attribute
|
3
|
-
attr_reader :klass, :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]
|
@@ -11,21 +13,23 @@ module Enumerize
|
|
11
13
|
@klass = klass
|
12
14
|
@name = name.to_sym
|
13
15
|
|
14
|
-
value_class = options.fetch(:value_class, Value)
|
15
|
-
@values = Array(options[:in]).map { |v| value_class.new(self, *v) }
|
16
|
-
|
17
|
-
@value_hash = Hash[@values.map { |v| [v.value.to_s, v] }]
|
18
|
-
@value_hash.merge! Hash[@values.map { |v| [v.to_s, v] }]
|
19
|
-
|
20
16
|
if options[:i18n_scope]
|
21
17
|
raise ArgumentError, ':i18n_scope option accepts only String or Array of strings' unless Array(options[:i18n_scope]).all? { |s| s.is_a?(String) }
|
22
18
|
@i18n_scope = options[:i18n_scope]
|
23
19
|
end
|
24
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
|
+
|
25
27
|
if options[:default]
|
26
28
|
@default_value = find_default_value(options[:default])
|
27
29
|
raise ArgumentError, 'invalid default value' unless @default_value
|
28
30
|
end
|
31
|
+
|
32
|
+
@skip_validations_value = options.fetch(:skip_validations, false)
|
29
33
|
end
|
30
34
|
|
31
35
|
def find_default_value(value)
|
@@ -44,11 +48,15 @@ module Enumerize
|
|
44
48
|
values.map { |value| find_value(value) }.compact
|
45
49
|
end
|
46
50
|
|
51
|
+
def each_value
|
52
|
+
values.each { |value| yield value }
|
53
|
+
end
|
54
|
+
|
47
55
|
def i18n_scopes
|
48
56
|
@i18n_scopes ||= if i18n_scope
|
49
|
-
|
57
|
+
Array(i18n_scope)
|
50
58
|
elsif @klass.respond_to?(:model_name)
|
51
|
-
|
59
|
+
["enumerize.#{@klass.model_name.i18n_key}.#{name}"]
|
52
60
|
else
|
53
61
|
[]
|
54
62
|
end
|
data/lib/enumerize/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module Base
|
3
5
|
def self.included(base)
|
@@ -72,6 +74,9 @@ module Enumerize
|
|
72
74
|
|
73
75
|
def _validate_enumerized_attributes
|
74
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
|
+
|
75
80
|
value = read_attribute_for_validation(attr.name)
|
76
81
|
next if value.blank?
|
77
82
|
|
@@ -96,12 +101,7 @@ module Enumerize
|
|
96
101
|
value_for_validation = _enumerized_values_for_validation[attr.name.to_s]
|
97
102
|
|
98
103
|
if (!attr_value || attr_value.empty?) && (!value_for_validation || value_for_validation.empty?)
|
99
|
-
value = attr.default_value
|
100
|
-
|
101
|
-
if value.respond_to?(:call)
|
102
|
-
value = value.arity == 0 ? value.call : value.call(self)
|
103
|
-
end
|
104
|
-
|
104
|
+
value = Utils.call_if_callable(attr.default_value, self)
|
105
105
|
public_send("#{attr.name}=", value)
|
106
106
|
end
|
107
107
|
rescue ActiveModel::MissingAttributeError
|
data/lib/enumerize/module.rb
CHANGED
data/lib/enumerize/mongoid.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module MongoidSupport
|
3
5
|
def enumerize(name, options={})
|
@@ -5,9 +7,23 @@ module Enumerize
|
|
5
7
|
|
6
8
|
_enumerize_module.dependent_eval do
|
7
9
|
if self < ::Mongoid::Document
|
10
|
+
include InstanceMethods
|
11
|
+
|
8
12
|
after_initialize :_set_default_value_for_enumerized_attributes
|
9
13
|
end
|
10
14
|
end
|
11
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
|
+
end
|
12
28
|
end
|
13
29
|
end
|
data/lib/enumerize/predicates.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module Scope
|
3
5
|
module ActiveRecord
|
@@ -16,6 +18,8 @@ module Enumerize
|
|
16
18
|
private
|
17
19
|
|
18
20
|
def _define_activerecord_scope_methods!(name, options)
|
21
|
+
return _define_activerecord_shallow_scopes!(name) if options[:scope] == :shallow
|
22
|
+
|
19
23
|
scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
|
20
24
|
|
21
25
|
define_singleton_method scope_name do |*values|
|
@@ -32,6 +36,14 @@ module Enumerize
|
|
32
36
|
end
|
33
37
|
end
|
34
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
|
+
end
|
46
|
+
end
|
35
47
|
end
|
36
48
|
end
|
37
49
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module Scope
|
3
5
|
module Mongoid
|
@@ -16,6 +18,7 @@ module Enumerize
|
|
16
18
|
private
|
17
19
|
|
18
20
|
def _define_mongoid_scope_methods!(name, options)
|
21
|
+
return _define_mongoid_shallow_scopes!(name) if options[:scope] == :shallow
|
19
22
|
scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
|
20
23
|
|
21
24
|
define_singleton_method scope_name do |*values|
|
@@ -30,6 +33,14 @@ module Enumerize
|
|
30
33
|
end
|
31
34
|
end
|
32
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
|
+
end
|
43
|
+
end
|
33
44
|
end
|
34
45
|
end
|
35
46
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module Scope
|
3
5
|
module Sequel
|
@@ -18,6 +20,8 @@ module Enumerize
|
|
18
20
|
private
|
19
21
|
|
20
22
|
def _define_sequel_scope_methods!(name, options)
|
23
|
+
return _define_sequel_shallow_scopes!(name) if options[:scope] == :shallow
|
24
|
+
|
21
25
|
klass = self
|
22
26
|
scope_name = options[:scope] == true ? "with_#{name}" : options[:scope]
|
23
27
|
|
@@ -35,6 +39,14 @@ module Enumerize
|
|
35
39
|
end
|
36
40
|
end
|
37
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
|
+
end
|
49
|
+
end
|
38
50
|
end
|
39
51
|
end
|
40
52
|
end
|
data/lib/enumerize/sequel.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Enumerize
|
2
4
|
module SequelSupport
|
3
5
|
def enumerize(name, options={})
|
@@ -17,8 +19,11 @@ module Enumerize
|
|
17
19
|
module InstanceMethods
|
18
20
|
def validate
|
19
21
|
super
|
20
|
-
|
22
|
+
|
21
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
|
+
|
22
27
|
value = read_attribute_for_validation(attr.name)
|
23
28
|
next if value.blank?
|
24
29
|
|
@@ -38,13 +43,13 @@ module Enumerize
|
|
38
43
|
if defined?(Sequel::Plugins::Serialization::InstanceMethods)
|
39
44
|
modules = self.class.ancestors
|
40
45
|
plugin_idx = modules.index(Sequel::Plugins::Serialization::InstanceMethods)
|
41
|
-
|
46
|
+
|
42
47
|
if plugin_idx && plugin_idx < modules.index(Enumerize::SequelSupport::InstanceMethods)
|
43
48
|
abort "ERROR: You need to enable the Sequel serialization plugin before calling any enumerize methods on a model."
|
44
49
|
end
|
45
|
-
|
50
|
+
|
46
51
|
plugin_idx = modules.index(Sequel::Plugins::ValidationHelpers::InstanceMethods)
|
47
|
-
|
52
|
+
|
48
53
|
if plugin_idx && plugin_idx < modules.index(Enumerize::SequelSupport::InstanceMethods)
|
49
54
|
abort "ERROR: You need to enable the Sequel validation_helpers plugin before calling any enumerize methods on a model."
|
50
55
|
end
|
data/lib/enumerize/set.rb
CHANGED
data/lib/enumerize/value.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'i18n'
|
2
4
|
|
3
5
|
module Enumerize
|
@@ -11,10 +13,16 @@ module Enumerize
|
|
11
13
|
@value = value.nil? ? name.to_s : value
|
12
14
|
|
13
15
|
super(name.to_s)
|
16
|
+
|
17
|
+
@i18n_keys = @attr.i18n_scopes.map { |s| :"#{s}.#{self}" }
|
18
|
+
@i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}"
|
19
|
+
@i18n_keys << :"enumerize.#{@attr.name}.#{self}"
|
20
|
+
@i18n_keys << self.underscore.humanize # humanize value if there are no translations
|
21
|
+
@i18n_keys
|
14
22
|
end
|
15
23
|
|
16
24
|
def text
|
17
|
-
I18n.t(i18n_keys[0], :default => i18n_keys[1..-1])
|
25
|
+
I18n.t(@i18n_keys[0], :default => @i18n_keys[1..-1])
|
18
26
|
end
|
19
27
|
|
20
28
|
def ==(other)
|
@@ -30,19 +38,5 @@ module Enumerize
|
|
30
38
|
def predicate_call(value)
|
31
39
|
value == self
|
32
40
|
end
|
33
|
-
|
34
|
-
def i18n_keys
|
35
|
-
@i18n_keys ||= begin
|
36
|
-
i18n_keys = i18n_scopes
|
37
|
-
i18n_keys << :"enumerize.defaults.#{@attr.name}.#{self}"
|
38
|
-
i18n_keys << :"enumerize.#{@attr.name}.#{self}"
|
39
|
-
i18n_keys << self.underscore.humanize # humanize value if there are no translations
|
40
|
-
i18n_keys
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
44
|
-
def i18n_scopes
|
45
|
-
@attr.i18n_scopes.map { |s| :"#{s}.#{self}" }
|
46
|
-
end
|
47
41
|
end
|
48
42
|
end
|
data/lib/enumerize/version.rb
CHANGED
data/spec/spec_helper.rb
CHANGED
data/test/activemodel_test.rb
CHANGED
data/test/activerecord_test.rb
CHANGED
@@ -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
|
-
|
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'
|
@@ -173,6 +216,14 @@ describe Enumerize::ActiveRecordSupport do
|
|
173
216
|
user.errors[:role].must_include 'is not included in the list'
|
174
217
|
end
|
175
218
|
|
219
|
+
it 'sets value to enumerized field from db when record is reloaded' do
|
220
|
+
user = User.create!(interests: [:music])
|
221
|
+
User.find(user.id).update(interests: %i[music dancing])
|
222
|
+
user.interests.must_equal %w[music]
|
223
|
+
user.reload
|
224
|
+
user.interests.must_equal %w[music dancing]
|
225
|
+
end
|
226
|
+
|
176
227
|
it 'validates inclusion when using write_attribute with string attribute' do
|
177
228
|
user = User.new
|
178
229
|
user.send(:write_attribute, 'role', 'wrong')
|
@@ -212,6 +263,31 @@ describe Enumerize::ActiveRecordSupport do
|
|
212
263
|
user.read_attribute(:role).must_be_nil
|
213
264
|
end
|
214
265
|
|
266
|
+
it 'validates inclusion when :skip_validations = false' do
|
267
|
+
user = DoNotSkipValidationsUser.new
|
268
|
+
user.foo = 'wrong'
|
269
|
+
user.wont_be :valid?
|
270
|
+
user.errors[:foo].must_include 'is not included in the list'
|
271
|
+
end
|
272
|
+
|
273
|
+
it 'does not validate inclusion when :skip_validations = true' do
|
274
|
+
user = SkipValidationsUser.new
|
275
|
+
user.foo = 'wrong'
|
276
|
+
user.must_be :valid?
|
277
|
+
end
|
278
|
+
|
279
|
+
it 'supports :skip_validations option as lambda' do
|
280
|
+
user = SkipValidationsLambdaUser.new
|
281
|
+
user.foo = 'wrong'
|
282
|
+
user.must_be :valid?
|
283
|
+
end
|
284
|
+
|
285
|
+
it 'supports :skip_validations option as lambda with a parameter' do
|
286
|
+
user = SkipValidationsLambdaWithParamUser.new
|
287
|
+
user.foo = 'wrong'
|
288
|
+
user.must_be :valid?
|
289
|
+
end
|
290
|
+
|
215
291
|
it 'supports multiple attributes' do
|
216
292
|
user = User.new
|
217
293
|
user.interests.must_be_empty
|
@@ -263,7 +339,11 @@ describe Enumerize::ActiveRecordSupport do
|
|
263
339
|
it 'stores custom values for multiple attributes' do
|
264
340
|
User.delete_all
|
265
341
|
|
266
|
-
klass = Class.new(User)
|
342
|
+
klass = Class.new(User) do
|
343
|
+
def self.name
|
344
|
+
'UserSubclass'
|
345
|
+
end
|
346
|
+
end
|
267
347
|
klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
|
268
348
|
|
269
349
|
user = klass.new
|
@@ -281,6 +361,7 @@ describe Enumerize::ActiveRecordSupport do
|
|
281
361
|
|
282
362
|
user_1 = User.create!(status: :active, role: :admin)
|
283
363
|
user_2 = User.create!(status: :blocked)
|
364
|
+
user_3 = User.create!(sex: :male, skill: :pro)
|
284
365
|
|
285
366
|
User.with_status(:active).must_equal [user_1]
|
286
367
|
User.with_status(:blocked).must_equal [user_2]
|
@@ -289,7 +370,8 @@ describe Enumerize::ActiveRecordSupport do
|
|
289
370
|
User.without_status(:active).must_equal [user_2]
|
290
371
|
User.without_status(:active, :blocked).must_equal []
|
291
372
|
|
292
|
-
User.
|
373
|
+
User.male.must_equal [user_3]
|
374
|
+
User.pro.must_equal [user_3]
|
293
375
|
end
|
294
376
|
|
295
377
|
it 'ignores not enumerized values that passed to the scope method' do
|
@@ -433,7 +515,11 @@ describe Enumerize::ActiveRecordSupport do
|
|
433
515
|
it 'allows using update_all for multiple enumerize' do
|
434
516
|
User.delete_all
|
435
517
|
|
436
|
-
klass = Class.new(User)
|
518
|
+
klass = Class.new(User) do
|
519
|
+
def self.name
|
520
|
+
'UserSubclass'
|
521
|
+
end
|
522
|
+
end
|
437
523
|
klass.enumerize :interests, in: { music: 0, sports: 1, dancing: 2, programming: 3}, multiple: true
|
438
524
|
|
439
525
|
user = klass.create(status: :active)
|
data/test/attribute_map_test.rb
CHANGED
data/test/attribute_test.rb
CHANGED
@@ -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
|
data/test/base_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
describe Enumerize::Base do
|
@@ -43,7 +45,7 @@ describe Enumerize::Base do
|
|
43
45
|
|
44
46
|
it 'scopes translation by i18n key' do
|
45
47
|
def kklass.model_name
|
46
|
-
name = "ExampleClass"
|
48
|
+
name = String.new("ExampleClass")
|
47
49
|
def name.i18n_key
|
48
50
|
'example_class'
|
49
51
|
end
|
data/test/formtastic_test.rb
CHANGED
data/test/mongo_mapper_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
begin
|
@@ -16,9 +18,11 @@ describe Enumerize do
|
|
16
18
|
|
17
19
|
key :sex
|
18
20
|
key :role
|
21
|
+
key :foo
|
19
22
|
|
20
|
-
enumerize :sex,
|
23
|
+
enumerize :sex, :in => %w[male female]
|
21
24
|
enumerize :role, :in => %w[admin user], :default => 'user'
|
25
|
+
enumerize :foo, :in => %w[bar baz], :skip_validations => true
|
22
26
|
end
|
23
27
|
|
24
28
|
before { $VERBOSE = nil }
|
@@ -60,6 +64,12 @@ describe Enumerize do
|
|
60
64
|
user.wont_be :valid?
|
61
65
|
end
|
62
66
|
|
67
|
+
it 'does not validate inclusion when :skip_validations option passed' do
|
68
|
+
user = model.new
|
69
|
+
user.foo = 'wrong'
|
70
|
+
user.must_be :valid?
|
71
|
+
end
|
72
|
+
|
63
73
|
it 'assigns value on loaded record' do
|
64
74
|
model.delete_all
|
65
75
|
model.create!(:sex => :male)
|
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 }
|
@@ -78,6 +86,20 @@ describe Enumerize do
|
|
78
86
|
user.wont_be :valid?
|
79
87
|
end
|
80
88
|
|
89
|
+
it 'does not validate inclusion when :skip_validations option passed' do
|
90
|
+
user = model.new
|
91
|
+
user.foo = 'wrong'
|
92
|
+
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
|
+
user.mult.must_equal %w[one]
|
99
|
+
user.reload
|
100
|
+
user.mult.must_equal %w[two three]
|
101
|
+
end
|
102
|
+
|
81
103
|
it 'assigns value on loaded record' do
|
82
104
|
model.delete_all
|
83
105
|
model.create!(:sex => :male)
|
@@ -99,17 +121,21 @@ describe Enumerize do
|
|
99
121
|
|
100
122
|
user_1 = model.create!(sex: :male, role: :admin)
|
101
123
|
user_2 = model.create!(sex: :female, role: :user)
|
124
|
+
user_3 = model.create!(skill: :pro, account_type: :premium)
|
102
125
|
|
103
126
|
model.with_sex(:male).to_a.must_equal [user_1]
|
104
127
|
model.with_sex(:female).to_a.must_equal [user_2]
|
105
128
|
model.with_sex(:male, :female).to_set.must_equal [user_1, user_2].to_set
|
106
129
|
|
107
|
-
model.without_sex(:male).
|
108
|
-
model.without_sex(:female).
|
109
|
-
model.without_sex(:male, :female).to_a.must_equal []
|
130
|
+
model.without_sex(:male).to_set.must_equal [user_2, user_3].to_set
|
131
|
+
model.without_sex(:female).to_set.must_equal [user_1, user_3].to_set
|
132
|
+
model.without_sex(:male, :female).to_a.must_equal [user_3]
|
110
133
|
|
111
134
|
model.having_role(:admin).to_a.must_equal [user_1]
|
112
|
-
model.having_role(:user).to_a.must_equal [user_2]
|
135
|
+
model.having_role(:user).to_a.must_equal [user_2, user_3]
|
136
|
+
|
137
|
+
model.pro.to_a.must_equal [user_3]
|
138
|
+
model.premium.to_a.must_equal [user_3]
|
113
139
|
end
|
114
140
|
|
115
141
|
it 'chains scopes' do
|
data/test/multiple_test.rb
CHANGED
data/test/predicates_test.rb
CHANGED
data/test/rails_admin_test.rb
CHANGED
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,6 +73,22 @@ 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
|
@@ -150,6 +172,31 @@ module SequelTest
|
|
150
172
|
user.values[:role].must_be_nil
|
151
173
|
end
|
152
174
|
|
175
|
+
it 'validates inclusion when :skip_validations = false' do
|
176
|
+
user = DoNotSkipValidationsUser.new
|
177
|
+
user.foo = 'wrong'
|
178
|
+
user.wont_be :valid?
|
179
|
+
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
|
+
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
|
+
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
|
+
user.must_be :valid?
|
198
|
+
end
|
199
|
+
|
153
200
|
it 'supports multiple attributes' do
|
154
201
|
user = User.new
|
155
202
|
user.interests ||= []
|
@@ -212,6 +259,7 @@ module SequelTest
|
|
212
259
|
|
213
260
|
user_1 = User.create(status: :active, role: :admin)
|
214
261
|
user_2 = User.create(status: :blocked)
|
262
|
+
user_3 = User.create(sex: :male, skill: :pro)
|
215
263
|
|
216
264
|
User.with_status(:active).to_a.must_equal [user_1]
|
217
265
|
User.with_status(:blocked).to_a.must_equal [user_2]
|
@@ -221,6 +269,8 @@ module SequelTest
|
|
221
269
|
User.without_status(:active, :blocked).to_a.must_equal []
|
222
270
|
|
223
271
|
User.having_role(:admin).to_a.must_equal [user_1]
|
272
|
+
User.male.to_a.must_equal [user_3]
|
273
|
+
User.pro.to_a.must_equal [user_3]
|
224
274
|
end
|
225
275
|
|
226
276
|
it 'allows either key or value as valid' do
|
data/test/set_test.rb
CHANGED
data/test/simple_form_test.rb
CHANGED
@@ -0,0 +1,43 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'active_record'
|
4
|
+
require 'sequel'
|
5
|
+
|
6
|
+
module EnumerizeExtention
|
7
|
+
def self.included(base)
|
8
|
+
case
|
9
|
+
when base < ActiveRecord::Base
|
10
|
+
base.extend Enumerize
|
11
|
+
when base < Sequel::Model
|
12
|
+
base.plugin :enumerize
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
module SkipValidationsEnum
|
18
|
+
def self.included(base)
|
19
|
+
base.include EnumerizeExtention
|
20
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => true
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
module DoNotSkipValidationsEnum
|
25
|
+
def self.included(base)
|
26
|
+
base.include EnumerizeExtention
|
27
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => false
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
module SkipValidationsLambdaEnum
|
32
|
+
def self.included(base)
|
33
|
+
base.include EnumerizeExtention
|
34
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { true }
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
module SkipValidationsLambdaWithParamEnum
|
39
|
+
def self.included(base)
|
40
|
+
base.include EnumerizeExtention
|
41
|
+
base.enumerize :foo, :in => [:bar, :baz], :skip_validations => lambda { |record| true }
|
42
|
+
end
|
43
|
+
end
|
data/test/test_helper.rb
CHANGED
data/test/value_test.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
require 'yaml'
|
3
5
|
|
4
6
|
describe Enumerize::Value do
|
5
|
-
class Attr < Struct.new(:values)
|
7
|
+
class Attr < Struct.new(:values, :name, :i18n_scopes)
|
6
8
|
end
|
7
9
|
|
8
|
-
let(:attr) { Attr.new([]) }
|
9
|
-
let(:val)
|
10
|
+
let(:attr) { Attr.new([], "attribute_name", []) }
|
11
|
+
let(:val) { Enumerize::Value.new(attr, 'test_value', 1) }
|
10
12
|
|
11
13
|
it 'is a string' do
|
12
14
|
val.must_be_kind_of String
|
@@ -30,7 +32,6 @@ describe Enumerize::Value do
|
|
30
32
|
end
|
31
33
|
|
32
34
|
describe 'translation' do
|
33
|
-
let(:attr) { Struct.new(:values, :name, :i18n_scopes).new([], "attribute_name", []) }
|
34
35
|
|
35
36
|
it 'uses common translation' do
|
36
37
|
store_translations(:en, :enumerize => {:attribute_name => {:test_value => "Common translation"}}) do
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: enumerize
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sergey Nartimov
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-05-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -68,6 +68,7 @@ files:
|
|
68
68
|
- lib/enumerize/scope/sequel.rb
|
69
69
|
- lib/enumerize/sequel.rb
|
70
70
|
- lib/enumerize/set.rb
|
71
|
+
- lib/enumerize/utils.rb
|
71
72
|
- lib/enumerize/value.rb
|
72
73
|
- lib/enumerize/version.rb
|
73
74
|
- lib/sequel/plugins/enumerize.rb
|
@@ -89,6 +90,7 @@ files:
|
|
89
90
|
- test/set_test.rb
|
90
91
|
- test/simple_form_test.rb
|
91
92
|
- test/support/mock_controller.rb
|
93
|
+
- test/support/shared_enums.rb
|
92
94
|
- test/support/view_test_helper.rb
|
93
95
|
- test/test_helper.rb
|
94
96
|
- test/value_test.rb
|
@@ -112,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
112
114
|
version: '0'
|
113
115
|
requirements: []
|
114
116
|
rubyforge_project:
|
115
|
-
rubygems_version: 2.7.
|
117
|
+
rubygems_version: 2.7.6
|
116
118
|
signing_key:
|
117
119
|
specification_version: 4
|
118
120
|
summary: Enumerated attributes with I18n and ActiveRecord/Mongoid/MongoMapper support
|
@@ -135,6 +137,7 @@ test_files:
|
|
135
137
|
- test/set_test.rb
|
136
138
|
- test/simple_form_test.rb
|
137
139
|
- test/support/mock_controller.rb
|
140
|
+
- test/support/shared_enums.rb
|
138
141
|
- test/support/view_test_helper.rb
|
139
142
|
- test/test_helper.rb
|
140
143
|
- test/value_test.rb
|