Module: Decay::Enum

Defined in:
lib/decay/enum.rb

Instance Method Summary collapse

Instance Method Details

#enum(**rules) ⇒ Object

rubocop:disable Metrics/MethodLength



4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/decay/enum.rb', line 4

def enum(**rules)
  rules.each do |enum_name, enum_values|
    enumerated_type_class =
      if enum_values.is_a?(Hash)
        ::Decay::EnumeratedType.create(**enum_values)
      else
        ::Decay::EnumeratedType.create(*enum_values)
      end

    meta = Metaprogramming.new(
      class: self,
      enumerated_type: enumerated_type_class,
      enumerated_type_name: enum_name
    )

    meta.define_enumerated_type

    meta.define_getter
    meta.define_setter
  end
end