module ReeEnum::Enumerable::ClassMethods

def get_enum_name

def get_enum_name
  @values&.enum_name
end

def get_values

def get_values
  @values
end

def setup_enum(enum_name)

def setup_enum(enum_name)
  @values ||= ReeEnum::Values.new(self, enum_name)
end

def val(value, mapped_value = nil, method: nil)

def val(value, mapped_value = nil, method: nil)
  value = value.to_s if value.is_a?(Symbol)
  mapped_value ||= value
  if method.nil? && value.is_a?(String) && value.match?(ALLOWED_VALUE_TO_METHOD_REGEXP)
    method = value.to_sym
  end
  if RESTRICTED_METHODS.include?(method)
    raise ArgumentError.new("#{method.inspect} is not allowed as enum method")
  end
  enum_value = @values.add(value, mapped_value, method)
  if !method.nil?
    class_eval(<<~RUBY, __FILE__, __LINE__ + 1)
      def #{method}
        get_values.by_value(#{value.inspect}.freeze)
      end
      def self.#{method}
        get_values.by_value(#{value.inspect}.freeze)
      end
    RUBY
  end
  enum_value
end