class ConstEnum::Base

Attributes

attributes[R]
key[R]

Public Class Methods

[](value) click to toggle source
# File lib/const_enum/base.rb, line 47
def [](value)
  @instances[value]
end
each() { |obj| ... } click to toggle source
# File lib/const_enum/base.rb, line 75
def each
  return Enumerator.new(self) unless block_given?
  @instances.each {|value, obj| yield obj }
end
each_key() { |key| ... } click to toggle source
# File lib/const_enum/base.rb, line 80
def each_key
  return Enumerator.new(self, :each_key) unless block_given?
  keys.each {|key| yield key }
end
each_label() { |label| ... } click to toggle source
# File lib/const_enum/base.rb, line 90
def each_label
  return Enumerator.new(self, :each_label) unless block_given?
  labels.each {|label| yield label }
end
each_value() { |value| ... } click to toggle source
# File lib/const_enum/base.rb, line 85
def each_value
  return Enumerator.new(self, :each_value) unless block_given?
  values.each {|value| yield value }
end
include?(value) click to toggle source
# File lib/const_enum/base.rb, line 43
def include?(value)
  (ConstEnum === value) ? @instances.include?(value) : @instances.key?(value)
end
inherited(clazz) click to toggle source
# File lib/const_enum/base.rb, line 37
def inherited(clazz)
  hash_class = RUBY_VERSION < '1.9' ? ActiveSupport::OrderedHash : Hash 
  clazz.instance_variable_set(:@instances, hash_class.new)
  clazz.instance_variable_set(:@keys, hash_class.new)
end
inspect() click to toggle source
# File lib/const_enum/base.rb, line 95
def inspect
  to_s
end
key(value) click to toggle source
# File lib/const_enum/base.rb, line 55
def key(value)
  @keys[value]
end
keys() click to toggle source
# File lib/const_enum/base.rb, line 59
def keys
  @keys.values
end
label(value) click to toggle source
# File lib/const_enum/base.rb, line 51
def label(value)
  @instances[value].label
end
labels() click to toggle source
# File lib/const_enum/base.rb, line 67
def labels
  @instances.values.map(&:label)
end
new(key, *attributes) click to toggle source
# File lib/const_enum/base.rb, line 9
def initialize(key, *attributes)
  @key = key
  @attributes = attributes
  @attributes.freeze
end
size() click to toggle source
# File lib/const_enum/base.rb, line 71
def size
  @instances.size
end
to_s() click to toggle source
Calls superclass method
# File lib/const_enum/base.rb, line 99
def to_s
  return super if ConstEnum::Base == self
  elems = []
  @keys.each do |value, key|
    elems << "#{key}[#{@instances[value]}]"
  end
  super << " { #{elems.join(', ')} }"
end
values() click to toggle source
# File lib/const_enum/base.rb, line 63
def values
  @instances.keys
end

Protected Class Methods

define_const(key, value, *args) click to toggle source
# File lib/const_enum/base.rb, line 109
def define_const(key, value, *args)
  raise "already initialized constant value #{value}. name: #{key} defined_name: #{@keys[value]}"if @instances.key? value
  const_set(key, value)
  obj = self.new(key, value, *args)
  singleton_class.__send__(:define_method, key) { obj }
  obj.freeze
  @instances[value] = obj
  @keys[value] = key
end

Public Instance Methods

[](pos) click to toggle source
# File lib/const_enum/base.rb, line 15
def [](pos)
  @attributes[pos]
end
inspect() click to toggle source
# File lib/const_enum/base.rb, line 27
def inspect
  "#{@attributes.first.inspect}:#{(@attributes[2 .. -1]||[]).unshift(label).map(&:inspect).join(', ')}"
end
label() click to toggle source
# File lib/const_enum/base.rb, line 23
def label
  @attributes.second
end
to_s() click to toggle source
# File lib/const_enum/base.rb, line 31
def to_s
  "#{@attributes.first.inspect}:#{(@attributes[2 .. -1]||[]).unshift(label).map(&:inspect).join(', ')}"
end
value() click to toggle source
# File lib/const_enum/base.rb, line 19
def value
  @attributes.first
end