# Idiomatic Ruby: Enumerations

**URL:** <https://www.ruby-forum.com/t/idiomatic-ruby-enumerations/102546>\
**Category:** Ruby\
**Created:** [February 21, 2006, 10:05am UTC](https://www.ruby-forum.com/t/idiomatic-ruby-enumerations/102546 "2006-02-21T10:05:41Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![lstrecv](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/l/e68b1a/32.png) [@lstrecv](https://www.ruby-forum.com/u/lstrecv)\
**Post date:** [February 21, 2006, 10:05am UTC](https://www.ruby-forum.com/t/idiomatic-ruby-enumerations/102546/1 "2006-02-21T10:05:41Z")

</div>

Hi. I’d appreciate comments/criticisms on the following approach &  
code:

For some variables, we need to be able to choose from enumerations.  
For instance, we track different choices on a webform - each has an  
integer code, as well as some other properties. I want to implement a  
class which these are made out of.

How’s this?:

class TimeSlot

```
# Only use predefined
private_class_method :new

# The text description
attr_reader :text

# The integer code
attr_reader :code

      # The legacy_id (key in a legacy database)
attr_reader :legacy_id

def initialize(text, code, legacy_id)
	@text = text
	@code = code
	@legacy_id = legacy_id
end

MORNING = new('morning', 2, 1001)
AFTERNOON = new('morning', 3, 1002)
EVENING = new('evening', 4, 1003)
NIGHT = new('night', 5, 1004')

      # This next line is unDRY, but I'm not sure how to eliminate

```

it.  
# Perhaps instead of just listing the constansts, use a  
register\_value method which both defines the constant  
# and adds it to the @@values - but I’m not sure how to  
implement this  
@@members = [MORNING, AFTERNOON, EVENING, NIGHT]

```
def self.from_code(c)
	@@members.find { |t| t.code == c } || raise ArgumentError, "No

```

TimeSlot has code #{c}"  
end

end

Also - we have several of these - how would I extract a common  
Enumeration mixin? I’d like to be able to include Enumeration, much as  
you include Singleton, to turn a class into an enumeration type along  
these lines.
