enum_machine 2.3.0 → 2.3.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.
- checksums.yaml +4 -4
- data/Gemfile.lock +1 -1
- data/README.md +7 -1
- data/lib/enum_machine/build_enum_class.rb +25 -0
- data/lib/enum_machine/driver_simple_class.rb +1 -19
- data/lib/enum_machine/version.rb +1 -1
- data/lib/enum_machine.rb +1 -0
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9652b2333de5222d8012acef09006ba1f57f6d5eed4a69afc52aa8e43c930c69
|
|
4
|
+
data.tar.gz: 3e9929cc5e1f14a78d28321e61c052cc0067d338f219dc70ffa829982a3701f6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 9381ee9e5e0faf50c90becfbea6b1299c50db93e49617735886ccaac987a95f01ee8bd654cd6afa63ad6ff0feb26f8701d79e201ae8f4b8368bfe4a7f2cb7236
|
|
7
|
+
data.tar.gz: e2d7f9c85b2decd744b4163c31f24597f4785cf4fe4e69d262156d6ecec8538cec437315183682e35236f8436ecdc82c53424535ae143d6bac626b9052b46c6a
|
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
|
@@ -298,11 +298,17 @@ comment.review_type.bonus_value # => 100
|
|
|
298
298
|
# Form helpers (when i18n_scope is set)
|
|
299
299
|
Comment::REVIEW_TYPE.values_for_form
|
|
300
300
|
# => [["Text", "text"], ["Photo", "photo"], ["Video", "video"]]
|
|
301
|
+
|
|
302
|
+
# Reuse with enum_decorator in other classes or models
|
|
303
|
+
class UserFeedback < ActiveRecord::Base
|
|
304
|
+
# requires `review_type` database column (or `attr_accessor :review_type` in plain classes)
|
|
305
|
+
include Comment::REVIEW_TYPE.enum_decorator
|
|
306
|
+
end
|
|
301
307
|
```
|
|
302
308
|
|
|
303
309
|
In `ActiveRecord` models, `enum_machine :attribute` relies on a database column for persistence
|
|
304
310
|
and dirty tracking. `EnumMachine.enum` is designed for everything else where you still want
|
|
305
|
-
enum capabilities without an underlying column
|
|
311
|
+
enum capabilities without an underlying column, and can be plugged into classes via `.enum_decorator`.
|
|
306
312
|
|
|
307
313
|
## Benchmarks
|
|
308
314
|
[test/performance.rb](../master/test/performance.rb)
|
|
@@ -19,6 +19,10 @@ module EnumMachine
|
|
|
19
19
|
value_attribute_mapping[key] if value_attribute_mapping.key?(key)
|
|
20
20
|
end
|
|
21
21
|
|
|
22
|
+
define_singleton_method(:enum_decorator) do
|
|
23
|
+
@enum_decorator ||= BuildEnumClass.build_enum_decorator(self, name.demodulize.underscore)
|
|
24
|
+
end
|
|
25
|
+
|
|
22
26
|
if i18n_scope
|
|
23
27
|
def self.values_for_form(specific_values = nil)
|
|
24
28
|
(specific_values || values).map { |v| [human_name_for(v), v] }
|
|
@@ -59,5 +63,26 @@ module EnumMachine
|
|
|
59
63
|
end
|
|
60
64
|
end
|
|
61
65
|
end
|
|
66
|
+
|
|
67
|
+
def self.build_enum_decorator(enum_class, attr)
|
|
68
|
+
enum_const_name = attr.to_s.upcase
|
|
69
|
+
|
|
70
|
+
define_methods =
|
|
71
|
+
Module.new do
|
|
72
|
+
define_method(attr) do
|
|
73
|
+
enum_value = super()
|
|
74
|
+
return unless enum_value
|
|
75
|
+
|
|
76
|
+
enum_class.value_attribute_mapping.fetch(enum_value)
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
Module.new do
|
|
81
|
+
define_singleton_method(:included) do |decorating_class|
|
|
82
|
+
decorating_class.prepend define_methods
|
|
83
|
+
decorating_class.const_set enum_const_name, enum_class
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
62
87
|
end
|
|
63
88
|
end
|
|
@@ -18,26 +18,8 @@ module EnumMachine
|
|
|
18
18
|
if defined?(ActiveRecord) && klass <= ActiveRecord::Base
|
|
19
19
|
klass.enum_machine(attr, enum_values, i18n_scope: i18n_scope)
|
|
20
20
|
else
|
|
21
|
-
enum_const_name = attr.to_s.upcase
|
|
22
21
|
enum_class = EnumMachine.enum(enum_values, i18n_scope: i18n_scope, value_decorator: value_decorator)
|
|
23
|
-
|
|
24
|
-
define_methods =
|
|
25
|
-
Module.new do
|
|
26
|
-
define_method(attr) do
|
|
27
|
-
enum_value = super()
|
|
28
|
-
return unless enum_value
|
|
29
|
-
|
|
30
|
-
enum_class.value_attribute_mapping.fetch(enum_value)
|
|
31
|
-
end
|
|
32
|
-
end
|
|
33
|
-
|
|
34
|
-
enum_decorator =
|
|
35
|
-
Module.new do
|
|
36
|
-
define_singleton_method(:included) do |decorating_class|
|
|
37
|
-
decorating_class.prepend define_methods
|
|
38
|
-
decorating_class.const_set enum_const_name, enum_class
|
|
39
|
-
end
|
|
40
|
-
end
|
|
22
|
+
enum_decorator = BuildEnumClass.build_enum_decorator(enum_class, attr)
|
|
41
23
|
enum_class.define_singleton_method(:enum_decorator) { enum_decorator }
|
|
42
24
|
|
|
43
25
|
klass.include(enum_decorator)
|
data/lib/enum_machine/version.rb
CHANGED
data/lib/enum_machine.rb
CHANGED
|
@@ -7,6 +7,7 @@ require_relative "enum_machine/attribute_persistence_methods"
|
|
|
7
7
|
require_relative "enum_machine/build_enum_class"
|
|
8
8
|
require_relative "enum_machine/machine"
|
|
9
9
|
require "active_support"
|
|
10
|
+
require "active_support/core_ext/string"
|
|
10
11
|
|
|
11
12
|
module EnumMachine
|
|
12
13
|
class Error < StandardError; end
|