enum_ext 0.8.1 → 0.9.0
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/CHANGELOG.md +3 -0
- data/Gemfile_rails_6.lock +2 -1
- data/lib/enum_ext/basic_helpers.rb +5 -5
- data/lib/enum_ext/enum_wrapper.rb +18 -2
- data/lib/enum_ext/superset_helpers.rb +5 -2
- data/lib/enum_ext/version.rb +1 -1
- data/lib/enum_ext.rb +11 -6
- 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: efd427aa71da1e4f38c9ee7837d170ef9732a709dc23a80332d7d61456632350
|
4
|
+
data.tar.gz: 42e2acb52324970fb199cf036c5763f7c4d4c8ce5e7fdd8c7fca80dc08913807
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3c1aaf8307cba00ba948a79f2ceee1acd09dd1b310c9ee22c892c5e776d63716addcb3e2f3c505146b98c206fdc9f8134309a58b268c323e7df697f380221650
|
7
|
+
data.tar.gz: e7ea79641953c863d45427c3a5eca6a942089a9cfb1f796ddc54a0fd5dbb275ca598d172d03f61ded14e5a5751c6cdca44423053c3acfb1ecdf3d87db542fa68
|
data/CHANGELOG.md
CHANGED
data/Gemfile_rails_6.lock
CHANGED
@@ -73,11 +73,11 @@ module EnumExt::BasicHelpers
|
|
73
73
|
|
74
74
|
def mass_assign_enum( *enums_names )
|
75
75
|
enums_names.each do |enum_name|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
define_singleton_method( "#{
|
80
|
-
self.update_all( {enum_name =>
|
76
|
+
enum_plural = enum_name.to_s.pluralize
|
77
|
+
self.send(enum_plural).keys.each do |label|
|
78
|
+
method_name = self.send(enum_plural).transform_enum_label(label)
|
79
|
+
define_singleton_method( "#{method_name}!" ) do
|
80
|
+
self.update_all( {enum_name => self.send(enum_plural)[label]}.merge( self.column_names.include?('updated_at') ? {updated_at: Time.now} : {} ))
|
81
81
|
end
|
82
82
|
end
|
83
83
|
end
|
@@ -5,12 +5,12 @@ class EnumExt::EnumWrapper
|
|
5
5
|
include EnumExt::Annotated
|
6
6
|
|
7
7
|
# supersets is storing exact definitions, if you need a raw mapping use class.statuses.superset_statuses
|
8
|
-
attr_reader :enum_values, :supersets, :supersets_raw, :t_options_raw, :localizations, :base_class, :enum_name
|
8
|
+
attr_reader :enum_values, :supersets, :supersets_raw, :t_options_raw, :localizations, :base_class, :enum_name, :suffix, :prefix
|
9
9
|
|
10
10
|
delegate_missing_to :enum_values
|
11
11
|
delegate :inspect, to: :enum_values
|
12
12
|
|
13
|
-
def initialize(enum_values, base_class, enum_name)
|
13
|
+
def initialize(enum_values, base_class, enum_name, **options)
|
14
14
|
@enum_values = enum_values
|
15
15
|
@supersets = ActiveSupport::HashWithIndifferentAccess.new
|
16
16
|
@supersets_raw = ActiveSupport::HashWithIndifferentAccess.new
|
@@ -20,6 +20,8 @@ class EnumExt::EnumWrapper
|
|
20
20
|
|
21
21
|
@base_class = base_class
|
22
22
|
@enum_name = enum_name
|
23
|
+
@suffix = options[:suffix] || options[:_suffix]
|
24
|
+
@prefix = options[:prefix] || options[:_prefix]
|
23
25
|
end
|
24
26
|
|
25
27
|
# ext_sets_to_kinds( :ready_for_shipment, :delivery_set ) -->
|
@@ -51,6 +53,18 @@ class EnumExt::EnumWrapper
|
|
51
53
|
|
52
54
|
alias_method :t, :localizations
|
53
55
|
|
56
|
+
def transform_enum_label(label)
|
57
|
+
_prefix = if prefix
|
58
|
+
prefix == true ? "#{enum_name}_" : "#{prefix}_"
|
59
|
+
end
|
60
|
+
|
61
|
+
_suffix = if suffix
|
62
|
+
suffix == true ? "_#{enum_name}" : "_#{suffix}"
|
63
|
+
end
|
64
|
+
|
65
|
+
"#{_prefix}#{label}#{_suffix}"
|
66
|
+
end
|
67
|
+
|
54
68
|
private
|
55
69
|
|
56
70
|
def evaluate_localizations(t_enum_set)
|
@@ -75,4 +89,6 @@ class EnumExt::EnumWrapper
|
|
75
89
|
end
|
76
90
|
end
|
77
91
|
|
92
|
+
|
93
|
+
|
78
94
|
end
|
@@ -54,6 +54,8 @@ module EnumExt::SupersetHelpers
|
|
54
54
|
enum_plural = enum_name.to_s.pluralize
|
55
55
|
|
56
56
|
self.instance_eval do
|
57
|
+
suffix = send(enum_plural).suffix
|
58
|
+
prefix = send(enum_plural).prefix
|
57
59
|
send(enum_plural).supersets.merge!( options.transform_values{ _1.try(:map, &:to_s) || _1.to_s } )
|
58
60
|
|
59
61
|
options.each do |superset_name, enum_vals|
|
@@ -64,11 +66,12 @@ module EnumExt::SupersetHelpers
|
|
64
66
|
# class.enum_wrapper.superset
|
65
67
|
send(enum_plural).define_singleton_method(superset_name) { base_class.send(enum_plural).superset_to_enum(*enum_vals) }
|
66
68
|
|
69
|
+
superset_method_name = send(enum_plural).transform_enum_label(superset_name)
|
67
70
|
# superset_name scope
|
68
|
-
scope
|
71
|
+
scope superset_method_name, -> { where( enum_name => send(enum_plural).send(superset_name) ) } if respond_to?(:scope)
|
69
72
|
|
70
73
|
# instance.superset_name?
|
71
|
-
define_method "#{
|
74
|
+
define_method "#{superset_method_name}?" do
|
72
75
|
send(enum_name) && self.class.send(enum_plural).send(superset_name).include?( send(enum_name) )
|
73
76
|
end
|
74
77
|
|
data/lib/enum_ext/version.rb
CHANGED
data/lib/enum_ext.rb
CHANGED
@@ -49,33 +49,38 @@ module EnumExt
|
|
49
49
|
def enum(name = nil, values = nil, **options)
|
50
50
|
single_enum_definition = name.present?
|
51
51
|
extensions = options.delete(:ext)
|
52
|
+
options_dup = options.dup
|
52
53
|
|
53
54
|
(ActiveRecord::VERSION::MAJOR >= 7 ? super : super(options)).tap do |multiple_enum_definitions|
|
54
55
|
if single_enum_definition
|
55
|
-
|
56
|
+
replace_enum_with_wrapper(name, options_dup)
|
57
|
+
enum_ext(name, [*extensions])
|
56
58
|
else
|
57
|
-
multiple_enum_definitions.each { |enum_name,|
|
59
|
+
multiple_enum_definitions.each { |enum_name,|
|
60
|
+
replace_enum_with_wrapper(enum_name, options_dup)
|
61
|
+
enum_ext(enum_name, [*extensions])
|
62
|
+
}
|
58
63
|
end
|
59
64
|
end
|
60
65
|
end
|
61
66
|
|
62
67
|
# its an extension helper, on the opposite to basic enum method could be called multiple times
|
63
68
|
def enum_ext(enum_name, extensions)
|
64
|
-
|
65
|
-
# [:enum_i, :enum_multi_scopes, enum_supersets: { valid: [:fresh, :cool], invalid: [:stale] }]
|
69
|
+
# [:enum_i, :enum_multi_scopes, enum_supersets: { valid: [:fresh, :cool], invalid: [:stale] }]
|
66
70
|
# --> [:enum_i, :enum_multi_scopes, [:enum_supersets, { valid: [:fresh, :cool], invalid: [:stale] }]
|
67
71
|
[*extensions].map { _1.try(:to_a)&.flatten || _1 }
|
68
72
|
.each { |(ext_method, params)| send(*[ext_method, enum_name, params].compact) }
|
69
73
|
end
|
70
74
|
|
71
75
|
private
|
72
|
-
|
76
|
+
|
77
|
+
def replace_enum_with_wrapper(enum_name, options_dup)
|
73
78
|
enum_name_plural = enum_name.to_s.pluralize
|
74
79
|
return if send(enum_name_plural).is_a?(EnumWrapper)
|
75
80
|
|
76
81
|
# enum will freeze values so there is no other way to move extended functionality,
|
77
82
|
# than to use wrapper and delegate everything to enum_values
|
78
|
-
enum_wrapper = EnumWrapper.new(send(enum_name_plural), self, enum_name)
|
83
|
+
enum_wrapper = EnumWrapper.new(send(enum_name_plural), self, enum_name, **options_dup)
|
79
84
|
# "self" here is a base enum class, so we are replacing original enum definition, with a wrapper
|
80
85
|
define_singleton_method(enum_name_plural) { enum_wrapper }
|
81
86
|
end
|