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