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