enum_ext 0.8.1 → 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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