module Enum

Provides enumerated value support for use as magic constants (status flags, types, etc…)

Sample usage:

module Fruit
  enum :apple, 1
  enum :pear,  2
end

Yields:

Fruit::APPLE => 1
Fruit.name(1) => 'Apple'
Fruit.keys => [:apple, :pear]

etc…

Constants

KEY_IDX

Indexes into our internal enum list

NAME_IDX
VALUE_IDX

Public Instance Methods

define_enum(*items) click to toggle source

Legacy method of enum creation. Call with a set of arrays, one for each desired enum. Arrays should contain the parameters supported by enum, e.g. [:key, <value>, “<optional name>”]

# File lib/iron/enum.rb, line 26
def define_enum(*items)
  items.each do |item|
    enum(*item)
  end
end
enum(key, value, name = nil) click to toggle source

Add an enumerated constant to the given module/class. The key should be a symbol, the value a fixed integer that the symbol represents. The name is an optional user-friendly name for the enum, which will default to a capitalized version of the key.

Sample usage:

module HTTPCode
  enum :success, 200
  enum :missing, 404
  enum :error,   500, 'Server Error'
end
# File lib/iron/enum.rb, line 43
def enum(key, value, name = nil)
  # Make sure we have our enum stuff in here
  self.extend(Enum::Core) unless respond_to?(:enum_list)

  # Validate input
  raise "Invalid enum key: #{key.inspect}" unless key.is_a?(Symbol)
  raise "Invalid enum value: #{value.inspect}" unless value.is_a?(Fixnum)
  raise "Invalid enum name: #{name.inspect}" unless name.nil? || name.is_a?(String)
  
  # Set our constant
  const_set(key.to_s.upcase, value)
  
  # Ensure we have a valid name
  name ||= key.to_s.split('_').collect(&:capitalize).join(' ')
  
  # Save to our list
  enum_list << [key, value, name]
end