Module: Ruby::Enum::ClassMethods

Defined in:
lib/ruby-enum/enum.rb

Instance Method Summary collapse

Instance Method Details

#const_missing(key) ⇒ Object



55
56
57
# File 'lib/ruby-enum/enum.rb', line 55

def const_missing(key)
  raise Ruby::Enum::Errors::UninitializedConstantError, name: name, key: key
end

#define(key, value = key) ⇒ Object

Define an enumerated value.

Parameters

key

Enumerator key.

value

Enumerator value.



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/ruby-enum/enum.rb', line 33

def define(key, value = key)
  @_enum_hash ||= {}
  @_enums_by_value ||= {}

  validate_key!(key)
  validate_value!(value)

  store_new_instance(key, value)

  if upper?(key.to_s)
    const_set key, value
  else
    define_singleton_method(key) { value }
  end
end

#each(&block) ⇒ Object

Iterate over all enumerated values. Required for Enumerable mixin



61
62
63
# File 'lib/ruby-enum/enum.rb', line 61

def each(&block)
  @_enum_hash.each(&block)
end

#each_key(&_block) ⇒ Object

Iterate over all enumerated keys. Required for Enumerable mixin



148
149
150
151
152
# File 'lib/ruby-enum/enum.rb', line 148

def each_key(&_block)
  @_enum_hash.each_value do |v|
    yield v.key
  end
end

#each_value(&_block) ⇒ Object

Iterate over all enumerated values. Required for Enumerable mixin



140
141
142
143
144
# File 'lib/ruby-enum/enum.rb', line 140

def each_value(&_block)
  @_enum_hash.each_value do |v|
    yield v.value
  end
end

#key(v) ⇒ Object

Gets the key symbol for the specified value.

Parameters

v

The string value to parse.

Returns the corresponding key symbol or nil.



117
118
119
120
# File 'lib/ruby-enum/enum.rb', line 117

def key(v)
  enum = @_enums_by_value[v]
  enum&.key
end

#key?(k) ⇒ Boolean

Whether the specified key exists in this enum.

Parameters

k

The string key to check.

Returns true if the key exists, false otherwise.

Returns:

  • (Boolean)


86
87
88
# File 'lib/ruby-enum/enum.rb', line 86

def key?(k)
  @_enum_hash.key?(k)
end

#keysObject

Returns all enum keys.



123
124
125
# File 'lib/ruby-enum/enum.rb', line 123

def keys
  @_enum_hash.values.map(&:key)
end

#parse(k) ⇒ Object

Attempt to parse an enum key and return the corresponding value.

Parameters

k

The key string to parse.

Returns the corresponding value or nil.



72
73
74
75
76
77
78
# File 'lib/ruby-enum/enum.rb', line 72

def parse(k)
  k = k.to_s.upcase
  each do |key, enum|
    return enum.value if key.to_s.upcase == k
  end
  nil
end

#store_new_instance(key, value) ⇒ Object



49
50
51
52
53
# File 'lib/ruby-enum/enum.rb', line 49

def store_new_instance(key, value)
  new_instance = new(key, value)
  @_enum_hash[key] = new_instance
  @_enums_by_value[value] = new_instance
end

#to_hObject



154
155
156
# File 'lib/ruby-enum/enum.rb', line 154

def to_h
  @_enum_hash.transform_values(&:value)
end

#value(k) ⇒ Object

Gets the string value for the specified key.

Parameters

k

The key symbol to get the value for.

Returns the corresponding enum instance or nil.



96
97
98
99
# File 'lib/ruby-enum/enum.rb', line 96

def value(k)
  enum = @_enum_hash[k]
  enum&.value
end

#value?(v) ⇒ Boolean

Whether the specified value exists in this enum.

Parameters

k

The string value to check.

Returns true if the value exists, false otherwise.

Returns:

  • (Boolean)


107
108
109
# File 'lib/ruby-enum/enum.rb', line 107

def value?(v)
  @_enums_by_value.key?(v)
end

#valuesObject

Returns all enum values.



128
129
130
131
132
133
134
135
136
# File 'lib/ruby-enum/enum.rb', line 128

def values
  result = @_enum_hash.values.map(&:value)

  if superclass < Ruby::Enum
    superclass.values + result
  else
    result
  end
end