File tree Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Expand file tree Collapse file tree 1 file changed +28
-0
lines changed Original file line number Diff line number Diff line change 1
1
# frozen_string_literal: true
2
2
3
3
require "set"
4
+ require "singleton"
5
+ require "forwardable"
4
6
5
7
module Rekkyo
6
8
module Type
@@ -12,6 +14,32 @@ def included(klass)
12
14
klass . extend ( DSLMethods )
13
15
klass . extend ( EnumMethods )
14
16
end
17
+
18
+ def create ( member_names )
19
+ ::Class . new do
20
+ include ::Singleton
21
+ extend ::SingleForwardable
22
+
23
+ include EnumMethods
24
+ def_single_delegators :instance , :all , :members , :freeze
25
+
26
+ const_set ( :Member , ::Class . new ( Member ) )
27
+
28
+ define_method :initialize do
29
+ member_class = self . class . const_get ( :Member , false )
30
+ @members = ::Set . new
31
+ member_names . each do |member_name |
32
+ member = member_class . new ( member_name . upcase . to_sym , member_name ) . freeze
33
+ @members << member
34
+ self . class . const_set ( member . key , member )
35
+ end
36
+ @members . freeze
37
+ end
38
+
39
+ instance # define a class and instantiate it
40
+ freeze
41
+ end
42
+ end
15
43
end
16
44
end
17
45
end
You can’t perform that action at this time.
0 commit comments