Module: Kernel

Defined in:
lib/cenum.rb,
lib/version.rb

Defined Under Namespace

Classes: Enum

Instance Method Summary collapse

Instance Method Details

#enum(*names) ⇒ Object



37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/cenum.rb', line 37

def enum(*names)
  klass = Class.new(Enum)
  counter = 0
  names.each do |name|
    if name.is_a? Hash
      counter = name.values.first
      name = name.keys.first
    end
    klass.const_set(klass.constant_name(name), counter)
    klass.send(:define_method, "#{name}?", lambda { @value == klass[name] })
    klass.send(:define_method, "#{name}!", lambda { @value = klass[name] })
    counter += 1
  end
  (class << klass ; self ; end).send(:define_method, :values){ names }
  klass
end