minenum 0.2.0 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e30a7b63806d1b89941d7297d647ff2c023ec029f703e4522d4575f4bffa356e
4
- data.tar.gz: 627051960b7b12cb639b4a11255bb570037dfa1c427ff2ea80ca4f5ef047a416
3
+ metadata.gz: 3b0b250f9cdf2dc9e1b04c2147dbfed357c486a5a65ef3c47a2b588d661ec830
4
+ data.tar.gz: fc97171ca4d6569198cb6b0e1f0496968acba322d4cf36074c8b0bfedc8fd117
5
5
  SHA512:
6
- metadata.gz: 2b8856a071493ce14759178492992bf0578e75a71b6d10d992573caba2979b8d3027fd7b1a80f34639e598f575479ee776dfd39c5c28fefdd67003d6f94679a8
7
- data.tar.gz: 6eddef5145f0b90c81d0a188a62dbad5fb171f9cb5b21adcc0ab854fba993e35306c498ffad9955f912d84cdace9fc55849a78076beb381377fbd2ebd8f5bff9
6
+ metadata.gz: 0675e25518f01f6c8ddfc02468025b23bb3b16cddf2ddb8aa9605573c7f04d4ee332f0085b0a141cd7f23b49c78cd3a7ed7f25b3020f307f00bec2f11306bf54
7
+ data.tar.gz: 8ac83aa20381a9ec0c8620ecadcb5b367257ab321e472fd2b23a342802daf9665b5022b757fa6889d75b80774f8368ebf18d21ae9d61998c61b69214e6b67e5a
data/lib/minenum/model.rb CHANGED
@@ -31,27 +31,36 @@ module Minenum
31
31
  module Model
32
32
  def self.included(base)
33
33
  base.extend ClassMethods
34
- base.include InstanceMethods
35
34
  end
36
35
 
37
36
  module AccessorAdder # :nodoc:
38
- def add(model_class, methods_module, reflection)
39
- add_singleton_method(model_class, reflection.name)
37
+ def add(model_class, methods_module, reflections, reflection)
38
+ add_singleton_method(model_class, reflection, reflection.name)
39
+ add_enum_method(methods_module, reflections) unless methods_module.method_defined?(:_minenum_enum)
40
40
 
41
41
  add_getter(methods_module, reflection.name)
42
42
  add_setter(methods_module, reflection.name)
43
43
 
44
- model_class._minenum_reflections[reflection.name] = reflection
44
+ reflections[reflection.name] = reflection
45
45
  end
46
46
  module_function :add
47
47
 
48
- def add_singleton_method(model_class, name)
49
- model_class.class_eval <<~RUBY, __FILE__, __LINE__ + 1
50
- def self.#{name} # def self.size
51
- _minenum_reflections[:'#{name}'].enum_class # _minenum_reflections[:'size'].enum_class
52
- end # end
53
- RUBY
48
+ def add_singleton_method(model_class, reflection, name)
49
+ model_class.singleton_class.define_method(name) do
50
+ reflection.enum_class
51
+ end
52
+ end
53
+
54
+ def add_enum_method(methods_module, reflections)
55
+ methods_module.module_eval do
56
+ define_method(:_minenum_enum) do |name|
57
+ @_minenum_enum ||= {}
58
+ @_minenum_enum[name.to_sym] ||= reflections[name.to_sym].build_enum(self)
59
+ end
60
+ private :_minenum_enum
61
+ end
54
62
  end
63
+ module_function :add_singleton_method, :add_enum_method
55
64
 
56
65
  def add_getter(methods_module, name)
57
66
  methods_module.module_eval <<~RUBY, __FILE__, __LINE__ + 1
@@ -68,13 +77,12 @@ module Minenum
68
77
  end # end
69
78
  RUBY
70
79
  end
71
- module_function :add_singleton_method, :add_getter, :add_setter
80
+ module_function :add_getter, :add_setter
72
81
  end
73
82
 
74
83
  module ClassMethods # :nodoc:
75
- def enum(name, values, adapter_builder: Enum::Adapter::LocalInstanceVariableAccessor)
76
- reflection = Reflection.new(self, name, values, adapter_builder: adapter_builder)
77
- AccessorAdder.add(self, enum_methods_module, reflection)
84
+ def enum(name, values)
85
+ _minenum_enum(name, values, _minenum_methods_module, _minenum_reflections)
78
86
  end
79
87
 
80
88
  def _minenum_reflections
@@ -83,22 +91,20 @@ module Minenum
83
91
 
84
92
  private
85
93
 
86
- def enum_methods_module
87
- @enum_methods_module ||= begin
94
+ def _minenum_enum(name, values, methods_module, reflections, adapter_builder: nil)
95
+ adapter_builder ||= Enum::Adapter::LocalInstanceVariableAccessor
96
+
97
+ reflection = Reflection.new(self, name, values, adapter_builder: adapter_builder)
98
+ AccessorAdder.add(self, methods_module, reflections, reflection)
99
+ end
100
+
101
+ def _minenum_methods_module
102
+ @_minenum_methods_module ||= begin
88
103
  mod = Module.new
89
104
  include mod
90
105
  mod
91
106
  end
92
107
  end
93
108
  end
94
-
95
- module InstanceMethods # :nodoc:
96
- private
97
-
98
- def _minenum_enum(name)
99
- @_minenum_enum ||= {}
100
- @_minenum_enum[name.to_sym] ||= self.class._minenum_reflections[name.to_sym].build_enum(self)
101
- end
102
- end
103
109
  end
104
110
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Minenum
4
- VERSION = '0.2.0'
4
+ VERSION = '0.2.1'
5
5
  end
@@ -9,7 +9,7 @@ module Minenum
9
9
 
10
10
  attr_reader adapter_builder: untyped
11
11
 
12
- def initialize: (untyped, String | Symbol, Hash[untyped, untyped], ?adapter_builder: Minenum::Enum::Adapter::_AdapterBuilder) -> void
12
+ def initialize: (untyped, String | Symbol, Hash[untyped, untyped], ?adapter_builder: untyped) -> void
13
13
  def name: -> Symbol
14
14
  def enum_class: -> untyped
15
15
  def build_enum: (untyped) -> untyped
@@ -1,29 +1,26 @@
1
1
  module Minenum
2
2
  module Model
3
3
  module AccessorAdder
4
- def self?.add: (untyped, untyped, Minenum::Model::Reflection) -> void
5
- def self?.add_singleton_method: (untyped, Symbol) -> void
4
+ def self?.add: (untyped, untyped, Hash[Symbol, Minenum::Model::Reflection], Minenum::Model::Reflection) -> void
5
+ def self?.add_singleton_method: (untyped, Minenum::Model::Reflection, Symbol) -> void
6
+ def self?.add_enum_method: (untyped, Hash[Symbol, Minenum::Model::Reflection]) -> void
6
7
  def self?.add_getter: (untyped, Symbol) -> void
7
8
  def self?.add_setter: (untyped, Symbol) -> void
9
+
10
+ def self?.define_method: (Symbol) { (Symbol) -> void } -> void
11
+ def self?.private: (Symbol) -> void
8
12
  end
9
13
 
10
14
  module ClassMethods
11
- def enum: (String | Symbol name, Hash[String | Symbol, untyped], ?adapter_builder: Minenum::Enum::Adapter::_AdapterBuilder) -> void
15
+ def enum: (String | Symbol, Hash[String | Symbol, untyped]) -> void
12
16
  def _minenum_reflections: -> Hash[Symbol, untyped]
13
17
 
14
18
  private
15
19
 
16
- def enum_methods_module: -> Module
20
+ def _minenum_enum: (String | Symbol, Hash[String | Symbol, untyped], Module, Hash[Symbol, Minenum::Model::Reflection], ?adapter_builder: untyped) -> void
21
+ def _minenum_methods_module: -> Module
17
22
 
18
23
  def include: (Module) -> self
19
24
  end
20
-
21
- module InstanceMethods
22
- private
23
-
24
- def _minenum_enum: (Symbol) -> untyped
25
-
26
- def self._minenum_reflections: -> Hash[Symbol, untyped]
27
- end
28
25
  end
29
26
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: minenum
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Loose Coupling
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-06-03 00:00:00.000000000 Z
11
+ date: 2024-06-06 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Enum for Ruby
14
14
  email: