class Enu

Constants

VERSION

Attributes

options[W]

Public Class Methods

default() click to toggle source
# File lib/enu.rb, line 47
def default
  raise "empty enum, sad enum" unless options&.any?
  keys.first
end
inherited(descendant) click to toggle source
# File lib/enu.rb, line 42
def inherited(descendant)
  inherited_frozen_options = options&.clone || {}.freeze
  descendant.class_eval { self.options = inherited_frozen_options }
end
options() click to toggle source
# File lib/enu.rb, line 20
def options
  @options ||= {}.freeze
end
to_json() click to toggle source
# File lib/enu.rb, line 52
def to_json
  keys.map { |key| [key, key] }.to_h.to_json
end

Private Class Methods

option(enum_key, value = nil) click to toggle source
# File lib/enu.rb, line 24
def option(enum_key, value = nil)
  key = enum_key.to_sym
  raise KeyError, "'#{key}' option already exists" if key?(key)
  raise ArgumentError, "'#{key}' key is reserved" if respond_to?(key)
  raise TypeError, "non-integer value" if value && !value.is_a?(Integer)
  raise ArgumentError, "repeating value" if values.include?(value)

  explicit_value = value || (options.none? ? 0 : values.max + 1)
  self.options = options.merge(key => explicit_value).freeze

  singleton_class.class_eval do
    define_method(key) { key }
    define_method("#{key}_value") { explicit_value }
  end

  nil
end