Method: Enum.define_enum_value

Defined in:
lib/trax/core/primitives/enum.rb

.define_enum_value(const_name, val = nil) ⇒ Object Also known as: enum_value, define

Class Methods ###



24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/trax/core/primitives/enum.rb', line 24

def self.define_enum_value(const_name, val=nil)
  name = "#{const_name}".underscore.to_sym
  const_name = name.to_s.camelize
  val = (self._values_hash.length + 1) if val.nil?

  raise ::Trax::Core::Errors::DuplicateEnumValue.new(:klass => self.class.name, :value => const_name) if self === name
  raise ::Trax::Core::Errors::DuplicateEnumValue.new(:klass => self.class.name, :value => val) if self === val

  value_klass = self.const_set(const_name, Class.new(::EnumValue){
    self.tag = name
    self.value = val
  })

  self._values_hash[val] = value_klass
  self._names_hash[name] = value_klass
end