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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2c17ae56d510836b3106e8b1ca84b83f69a6854a0988192e71d7a7a62910dde0
4
- data.tar.gz: 870773a5d09b15840695a8ff0ee57823b4bcc4c89753a88840b3daca7a69ae28
3
+ metadata.gz: efd427aa71da1e4f38c9ee7837d170ef9732a709dc23a80332d7d61456632350
4
+ data.tar.gz: 42e2acb52324970fb199cf036c5763f7c4d4c8ce5e7fdd8c7fca80dc08913807
5
5
  SHA512:
6
- metadata.gz: dd80dfc1f862eb03fbd9065af6f1eee36a95254ce4dd7e708073683ca4d5483163457cb5a8b96da851943d93246436a0897965d11b0f5478d966a4a590c82276
7
- data.tar.gz: f07fd0d4869deba68067d29a0e6ac6a8003ae4df28dea658decd66455f12a5cbcdd622e816042f93de452c7186bb7af885b9b0d549b2fe3c40edfccd6b3fadf1
6
+ metadata.gz: 3c1aaf8307cba00ba948a79f2ceee1acd09dd1b310c9ee22c892c5e776d63716addcb3e2f3c505146b98c206fdc9f8134309a58b268c323e7df697f380221650
7
+ data.tar.gz: e7ea79641953c863d45427c3a5eca6a942089a9cfb1f796ddc54a0fd5dbb275ca598d172d03f61ded14e5a5751c6cdca44423053c3acfb1ecdf3d87db542fa68
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ # 0.9
2
+ * supersets works fine and same way with prefixes and suffixes as usual enum does
3
+
1
4
  # 0.8.1
2
5
  * Fixes issue https://github.com/alekseyl/enum_ext/issues/50
3
6
  * Better describe for supersets.
data/Gemfile_rails_6.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- enum_ext (0.8.0)
4
+ enum_ext (0.9.0)
5
5
  activerecord (>= 5.2.4.3)
6
6
 
7
7
  GEM
@@ -82,6 +82,7 @@ PLATFORMS
82
82
  ruby
83
83
 
84
84
  DEPENDENCIES
85
+ activerecord (< 7)
85
86
  amazing_print
86
87
  bundler (>= 1.11)
87
88
  byebug
@@ -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
- enum_vals = self.send( enum_name.to_s.pluralize )
77
-
78
- enum_vals.keys.each do |enum_el|
79
- define_singleton_method( "#{enum_el}!" ) do
80
- self.update_all( {enum_name => enum_vals[enum_el]}.merge( self.column_names.include?('updated_at') ? {updated_at: Time.now} : {} ))
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 superset_name, -> { where( enum_name => send(enum_plural).send(superset_name) ) } if respond_to?(: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 "#{superset_name}?" do
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
 
@@ -1,3 +1,3 @@
1
1
  module EnumExt
2
- VERSION = "0.8.1"
2
+ VERSION = "0.9.0"
3
3
  end
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
- enum_ext(name, extensions)
56
+ replace_enum_with_wrapper(name, options_dup)
57
+ enum_ext(name, [*extensions])
56
58
  else
57
- multiple_enum_definitions.each { |enum_name,| enum_ext(enum_name, extensions) }
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
- replace_enum_with_wrapper(enum_name)
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
- def replace_enum_with_wrapper(enum_name)
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
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enum_ext
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.8.1
4
+ version: 0.9.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - alekseyl