Class: Kolor::Enum
- Inherits:
-
Object
- Object
- Kolor::Enum
- Defined in:
- lib/kolor/internal/enum.rb
Direct Known Subclasses
Defined Under Namespace
Classes: Background, Foreground, Style, Theme
Instance Attribute Summary collapse
-
#value ⇒ Object
readonly
The value associated with the enum entry.
Class Method Summary collapse
-
.[](name) ⇒ Kolor::Enum?
Retrieves an enum instance by name.
-
.all ⇒ Array<Kolor::Enum>
Returns all registered enum instances.
-
.entry(name, value) ⇒ void
Registers a new enum entry with a unique name and value.
-
.keys ⇒ Array<Symbol>
Returns all registered names.
-
.name_for(value) ⇒ Symbol
Resolves the symbolic name for a given value.
-
.remove(name) ⇒ Kolor::Enum?
Removes an enum entry by name.
-
.type(klass) ⇒ void
Declares the expected type of all enum values.
-
.values ⇒ Array<Object>
Returns all raw values.
Instance Method Summary collapse
-
#==(other) ⇒ Boolean
(also: #eql?)
Equality based on class and value.
-
#hash ⇒ Integer
Hash code based on value.
-
#initialize(value) ⇒ Enum
constructor
Initializes a new enum instance with a given value.
-
#inspect ⇒ String
Returns a debug-friendly string representation.
-
#to_s ⇒ String
Returns the symbolic name of the value as a string.
-
#to_sym ⇒ Symbol
Returns the symbolic name of the value as a symbol.
Constructor Details
#initialize(value) ⇒ Enum
Initializes a new enum instance with a given value
29 30 31 |
# File 'lib/kolor/internal/enum.rb', line 29 def initialize(value) @value = value end |
Instance Attribute Details
#value ⇒ Object (readonly)
Returns the value associated with the enum entry.
24 25 26 |
# File 'lib/kolor/internal/enum.rb', line 24 def value @value end |
Class Method Details
.[](name) ⇒ Kolor::Enum?
Retrieves an enum instance by name
112 113 114 |
# File 'lib/kolor/internal/enum.rb', line 112 def [](name) @registry[name.to_sym] end |
.all ⇒ Array<Kolor::Enum>
Returns all registered enum instances
127 128 129 |
# File 'lib/kolor/internal/enum.rb', line 127 def all @registry.values end |
.entry(name, value) ⇒ void
This method returns an undefined value.
Registers a new enum entry with a unique name and value
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/kolor/internal/enum.rb', line 83 def entry(name, value) name = name.to_sym @registry ||= {} @values ||= {} if defined?(@value_type) && !value.is_a?(@value_type) raise TypeError, "Invalid value type for #{name}: expected #{@value_type}, got #{value.class}" end if @values.key?(value) existing = @values[value] raise ArgumentError, "Duplicate value #{value.inspect} for #{name}; already assigned to #{existing}" end if @registry.key?(name) raise ArgumentError, "Duplicate name #{name}; already registered with value #{@registry[name].value.inspect}" end instance = new(value) @registry[name] = instance @values[value] = name define_singleton_method(name) { instance } end |
.keys ⇒ Array<Symbol>
Returns all registered names
134 135 136 |
# File 'lib/kolor/internal/enum.rb', line 134 def keys @registry.keys end |
.name_for(value) ⇒ Symbol
Resolves the symbolic name for a given value
120 121 122 |
# File 'lib/kolor/internal/enum.rb', line 120 def name_for(value) @values[value] || :unknown end |
.remove(name) ⇒ Kolor::Enum?
Removes an enum entry by name
149 150 151 152 153 154 155 156 157 |
# File 'lib/kolor/internal/enum.rb', line 149 def remove(name) name = name.to_sym entry = @registry.delete(name) if entry @values.delete_if { |_, v| v == name } singleton_class.undef_method(name) if respond_to?(name) end entry end |
.type(klass) ⇒ void
This method returns an undefined value.
Declares the expected type of all enum values
72 73 74 |
# File 'lib/kolor/internal/enum.rb', line 72 def type(klass) @value_type = klass end |
.values ⇒ Array<Object>
Returns all raw values
141 142 143 |
# File 'lib/kolor/internal/enum.rb', line 141 def values @registry.values.map(&:value) end |
Instance Method Details
#==(other) ⇒ Boolean Also known as: eql?
Equality based on class and value
52 53 54 |
# File 'lib/kolor/internal/enum.rb', line 52 def ==(other) other.is_a?(self.class) && other.value == value end |
#hash ⇒ Integer
Hash code based on value
65 |
# File 'lib/kolor/internal/enum.rb', line 65 def hash = value.hash |
#inspect ⇒ String
Returns a debug-friendly string representation
46 |
# File 'lib/kolor/internal/enum.rb', line 46 def inspect = "#<#{self.class.name} #{to_sym.inspect}:#{value.inspect}>" |
#to_s ⇒ String
Returns the symbolic name of the value as a string
36 |
# File 'lib/kolor/internal/enum.rb', line 36 def to_s = self.class.name_for(value).to_s |
#to_sym ⇒ Symbol
Returns the symbolic name of the value as a symbol
41 |
# File 'lib/kolor/internal/enum.rb', line 41 def to_sym = self.class.name_for(value) |