module Enum

set values on each child like so: set_values :north, :east, :south, :west

Public Instance Methods

[](index) click to toggle source
# File lib/enum.rb, line 16
def [] index
  self.send(values[index])
end
all() click to toggle source
# File lib/enum.rb, line 24
def all
  values
end
method_missing(m, *args, &block) click to toggle source
Calls superclass method
# File lib/enum.rb, line 28
def method_missing m, *args, &block
  index_array = (0..(values.size-1)).to_a
  index_array.respond_to?(m) ? index_array.send(m,*args,&block) : super
end
name(index) click to toggle source
# File lib/enum.rb, line 20
def name index
  values[index].to_s
end
next(index) click to toggle source
# File lib/enum.rb, line 11
def next index
  next_index = index + 1
  send(values[next_index].nil? ? values.first : values[next_index])
end
set_values(*args) click to toggle source
# File lib/enum.rb, line 4
def set_values *args
  self.define_singleton_method(:values) { args }
  args.each_index do |i|
    self.define_singleton_method(args[i]) { i }
  end
end